This module is a fork from https://github.com/docopt/docopt.fs/ but with strong ordering. The strong ordering enables you to have a nice CLI on your script or to write your own fake 5 modules with a CLI.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
A more sophisticated example can be found in the fake runner: https://github.com/fsharp/FAKE/blob/64d871f5065412fe7b233025e454ccf3b89e46d7/src/app/Fake.netcore/Program.fs#L204-L259
Or the target module:
You can also take a look at the test-suite:
Differences to the python reference Docopt implementation
The parser doesn't differentiate between arguments with and without
-with regards to ordering. They are subject to the same rules as other arguments. The only exception is when defining multiple arguments like
[-a -b -c], then the ordering of the group doesn't matter. (So in other words: If a group
only has options then the order doesn't matter)
Uniquely identifiable prefixes like
--fsiaare not supported
We return the arguments in the user given order in the result map (difference to
We parse arguments starting with
-as positional arguments. For example consider:
1: 2: 3:
usage: prog (NAME | --foo NAME) options: --foo
Note that --foo has no argument because it was not specified in the options section!
In this scenario
prog --foo 10is parsed as
NAMEargument because that is the only option. However
prog --foo=10is parsed as
NAMEargument without any
--foooption. Usually to prefer
--fooyou should put it first in the usage string:
1: 2: 3:
usage: prog (--foo NAME | NAME) options: --foo
However, in this particular case it doesn't make any difference (as the options section is missing to indicate that
--foohas an argument).
is not inherited for all items, only for the group. To have all items optional use
on every item. For example
usage: prog [go go]means to have either two
goor none. A single one is not allowed.
We do not merge external "options" in the usage string with
[options]. For example:
1: 2: 3: 4:
usage: prog [options] [-a] options: -a -b
-ais actually allowed twice.