The optparse-applicative package
Here is a simple example of an applicative option parser:
data Sample = Sample
{ hello :: String
, quiet :: Bool }
sample :: Parser Sample
sample = Sample
<$> strOption
( long "hello"
& metavar "TARGET"
& help "Target for the greeting" )
<*> switch
( long "quiet"
& help "Whether to be quiet" )
The parser is built using applicative style starting from a set of basic combinators. In this example, hello is defined as an option with a String argument, while quiet is a boolean flag (called switch).
A parser can be used like this:
greet :: Sample -> IO ()
greet (Sample h False) = putStrLn $ "Hello, " ++ h
greet _ = return ()
main :: IO ()
main = execParser opts >>= greet
where
opts = info (helper <*> sample)
( fullDesc
& progDesc "Print a greeting for TARGET"
& header "hello - a test for optparse-applicative" )
The greet function is the entry point of the program, while opts is a complete description of the program, used when generating a help text. The helper combinator takes any parser, and adds a help option to it (which always fails).
The hello option in this example is mandatory (since it doesn't have a default value), so running the program without any argument will display a help text:
hello - a test for optparse-applicative Usage: hello --hello TARGET [--quiet] Print a greeting for TARGET Available options: -h,--help Show this help text --hello TARGET Target for the greeting --quiet Whether to be quiet
containing a short usage summary, and a detailed list of options with descriptions.
Properties
| Versions | 0.0.1, 0.1.0, 0.1.1, 0.2.0, 0.3.0, 0.3.1, 0.3.2, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.5.0, 0.5.1, 0.5.2, 0.5.2.1 |
|---|---|
| Dependencies | base (4.*), process (1.1.*), transformers (≥0.2 & <0.4) |
| License | BSD3 |
| Copyright | (c) 2012 Paolo Capriotti <p.capriotti@gmail.com> |
| Author | Paolo Capriotti |
| Maintainer | p.capriotti@gmail.com |
| Category | System |
| Home page | https://github.com/pcapriotti/optparse-applicative |
| Bug tracker | https://github.com/pcapriotti/optparse-applicative/issues |
| Upload date | Tue Sep 4 16:41:17 UTC 2012 |
| Uploaded by | PaoloCapriotti |
| Built on | ghc-7.4 |
| Distributions | NixOS: 0.5.2.1, Debian: 0.4.1, FreeBSD: 0.5.2.1 |
Modules
Downloads
- optparse-applicative-0.4.1.tar.gz (Cabal source package)
- package description (included in the package)