The optparse-applicative package

[Tags: bsd3, library]

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

Common 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

Versions0.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, 0.6.0, 0.7.0, 0.7.0.1, 0.7.0.2, 0.8.0, 0.8.0.1
Dependenciesbase (==4.*), data-default (==0.4.*), data-lens (==2.10.*), transformers (>=0.2 && <0.4)
LicenseBSD3
Copyright(c) 2012 Paolo Capriotti <p.capriotti@gmail.com>
AuthorPaolo Capriotti
Maintainerp.capriotti@gmail.com
CategorySystem
Upload dateSat Jul 7 19:58:14 UTC 2012
Uploaded byPaoloCapriotti
DistributionsDebian:0.7.0.2, FreeBSD:0.5.2.1, NixOS:0.8.0.1
Downloads24609 total (7592 in last 30 days)

Modules

Downloads

Maintainers' corner

For package maintainers and hackage trustees