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:
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:
Note that --foo has no argument because it was not specified in the options section!
In this scenario
prog --foo 10 is parsed as
NAME argument because that is the only option. However
prog --foo=10 is parsed as
NAME argument without any
--foo option. Usually to prefer
--foo you should put it first in the usage string:
1: 2: 3:
However, in this particular case it doesn't make any difference.
 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
go or 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:
-a is actually allowed twice.