New alternative argument parser: optparse-applicative #936
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces a new library for parsing command line flags that's a bit more flexible in how flags are specified, and importantly the ability to specify mutually exclusive flags.
The key idea of the interface is to have a central type
OptParser athat represents a set of options that can be parsed from a commandline to produce a value of typea. This type is a functor (viaoptMap), an applicative (viaoptPureandoptApply), and supports alternatives (viaoptOr), leading to a very composable interface. It's mildly more annoying to use in MCore than in Haskell because we don't have infix operators or ApplicativeDo, but hopefully the composability wins are worth it anyway.The library is inspired by https://hackage.haskell.org/package/optparse-applicative and has a similar interface. Currently missing major things (that I think would be nice to have) relative to that library:
-vin some programs, or--debug-phaseinmi).evalandcompileformi).Things we can do that are pretty neat:
--helptext and flag.