/
Hello.hs
42 lines (36 loc) · 1000 Bytes
/
Hello.hs
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
{-# LANGUAGE CPP #-}
module Examples.Hello where
import Options.Applicative
import Data.Semigroup ((<>))
import Control.Monad (replicateM_)
data Sample = Sample
{ hello :: String
, quiet :: Bool
, repeat :: Int }
deriving Show
sample :: Parser Sample
sample = Sample
<$> strOption
( long "hello"
<> metavar "TARGET"
<> help "Target for the greeting" )
<*> switch
( long "quiet"
<> short 'q'
<> help "Whether to be quiet" )
<*> option auto
( long "repeat"
<> help "Repeats for greeting"
<> showDefault
<> value 1
<> metavar "INT" )
main :: IO ()
main = greet =<< execParser opts
opts :: ParserInfo Sample
opts = info (sample <**> helper)
( fullDesc
<> progDesc "Print a greeting for TARGET"
<> header "hello - a test for optparse-applicative" )
greet :: Sample -> IO ()
greet (Sample h False n) = replicateM_ n . putStrLn $ "Hello, " ++ h
greet _ = return ()