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,, 0.10.0, 0.11.0,,
Change logNone available
Dependenciesbase (==4.*), transformers (>=0.2 && <0.4)
Copyright(c) 2012 Paolo Capriotti <>
AuthorPaolo Capriotti
UploadedMon Jul 30 18:33:26 UTC 2012 by PaoloCapriotti
DistributionsDebian:, Fedora:, FreeBSD:, LTSHaskell:, NixOS:, Stackage:
Downloads98392 total (1089 in last 30 days)
StatusDocs uploaded by user
Build status unknown [no reports yet]




Maintainers' corner

For package maintainers and hackage trustees