blob: a2d33046e859cd067eb544f796730c7dbe0c8edb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
<?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>
|