summaryrefslogtreecommitdiff
blob: 3e2bcf92c04b722f597a191c026c3a4ca38fda44 (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
70
71
72
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
	<maintainer type="project">
		<email>haskell@gentoo.org</email>
		<name>Gentoo Haskell</name>
	</maintainer>
	<longdescription>
		Here is a simple example of an applicative option parser:
		
		@
		data Sample = Sample
		&amp;#x20; &amp;#x7b; hello :: String
		&amp;#x20; , quiet :: Bool &amp;#x7d;
		
		sample :: Parser Sample
		sample = Sample
		&amp;#x20; \&lt;$\&gt; strOption
		&amp;#x20;     ( long \"hello\"
		&amp;#x20;     &amp; metavar \"TARGET\"
		&amp;#x20;     &amp; help \"Target for the greeting\" )
		&amp;#x20; \&lt;*\&gt; switch
		&amp;#x20;     ( long \"quiet\"
		&amp;#x20;     &amp; 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 -&gt; IO ()
		greet (Sample h False) = putStrLn $ \"Hello, \" ++ h
		greet _ = return ()
		
		main :: IO ()
		main = execParser opts \&gt;\&gt;= greet
		&amp;#x20; where
		&amp;#x20;   opts = info (helper \&lt;*\&gt; sample)
		&amp;#x20;     ( fullDesc
		&amp;#x20;     &amp; progDesc \"Print a greeting for TARGET\"
		&amp;#x20;     &amp; 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:
		
		&gt;hello - a test for optparse-applicative
		&gt;
		&gt;Usage: hello --hello TARGET [--quiet]
		&gt;  Print a greeting for TARGET
		&gt;
		&gt;Available options:
		&gt;  -h,--help                Show this help text
		&gt;  --hello TARGET           Target for the greeting
		&gt;  --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>