69 lines
2.3 KiB
XML
69 lines
2.3 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
|
<pkgmetadata>
|
|
<herd>haskell</herd>
|
|
<longdescription>
|
|
Here is a simple example of an applicative option parser:
|
|
|
|
@
|
|
data Sample = Sample
|
|
&#x20; &#x7b; hello :: String
|
|
&#x20; , quiet :: Bool &#x7d;
|
|
|
|
sample :: Parser Sample
|
|
sample = Sample
|
|
&#x20; \<$\> strOption
|
|
&#x20; ( long \"hello\"
|
|
&#x20; & metavar \"TARGET\"
|
|
&#x20; & help \"Target for the greeting\" )
|
|
&#x20; \<*\> switch
|
|
&#x20; ( long \"quiet\"
|
|
&#x20; & 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
|
|
&#x20; where
|
|
&#x20; opts = info (helper \<*\> sample)
|
|
&#x20; ( fullDesc
|
|
&#x20; & progDesc \"Print a greeting for TARGET\"
|
|
&#x20; & 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.
|
|
</longdescription>
|
|
<upstream>
|
|
<remote-id type="github">pcapriotti/optparse-applicative</remote-id>
|
|
</upstream>
|
|
</pkgmetadata>
|