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
    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.


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.6.0, 0.7.0,,, 0.8.0,, 0.8.1, 0.9.0, 0.9.1,
Dependenciesbase (==4.*), process (==1.1.*), transformers (>=0.2 && <0.4)
Copyright(c) 2012 Paolo Capriotti <>
AuthorPaolo Capriotti
Home page
Bug tracker
Upload dateMon Nov 26 09:40:13 UTC 2012
Uploaded byPaoloCapriotti
DistributionsDebian:, Fedora:0.9.0, FreeBSD:, NixOS:
Downloads59511 total (8886 in last 30 days)




Maintainers' corner

For package maintainers and hackage trustees