CmdTheLine aims to remove tedium from the definition of command-line programs, producing usage and help with little effort.

The inspiration was found in Daniel Bunzli's http://erratique.ch/software/cmdliner library.

CmdTheLine uses applicative functors to provide a declarative, compositional mechanism for defining command-line programs by lifting regular Haskell functions over argument parsers.

A tutorial can be found at http://elifrey.com/2012/07/23/CmdTheLine-Tutorial/.

Suggestions, comments, and bug reports are appreciated. Please see the bug and issue tracker at http://github.com/eli-frey/cmdtheline.

Changes since 0.1:

More type safety: Types in CmdTheLine.Arg have been made more explicit to disalow unwanted behavior. Positional argument information and optional argument information are distinguished from each other. As well Arg s must be transformed into Term before use, as some operations make since to perform on Arg but not on Term .

ArgVal has only one method: parser and pp have been fused into a tuple, so that instantiation of ArgVal can be simplified for all parties.

Err is an instance of MonadIO: The Err monad now supports IO action.

File and Directory path validation: Taking advantage of new Err capabilities, the library provides new functions for validating String s inside of Term s as being valid/existent file/directory paths.

Changes since 0.2.0:

Test friendly unwrap functions: To allow the testing of terms, there are now two new functions exported with System.Console.CmdTheLine.Term, unwrap and unwrapChoice . As well a datatype representing cause of early exit, EvalExit is exported.

Changes since 0.2.1