46 lines
1.4 KiB
Haskell
46 lines
1.4 KiB
Haskell
|
{-# LANGUAGE RecordWildCards #-}
|
||
|
--------------------------------------------------------------------------------
|
||
|
module Main where
|
||
|
--------------------------------------------------------------------------------
|
||
|
import Options.Applicative
|
||
|
import Data.Semigroup ((<>))
|
||
|
|
||
|
import qualified System.Environment as Env
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
data CommandArgs = CommandArgs
|
||
|
{ hello :: String
|
||
|
, quiet :: Bool
|
||
|
, enthusiasm :: Int
|
||
|
} deriving (Eq, Show)
|
||
|
|
||
|
parseArgs :: Parser CommandArgs
|
||
|
parseArgs =
|
||
|
CommandArgs <$> strOption
|
||
|
( long "hello"
|
||
|
<> metavar "TARGET"
|
||
|
<> help "Target for the greeting" )
|
||
|
<*> switch
|
||
|
( long "quiet"
|
||
|
<> short 'q'
|
||
|
<> help "Whether to be quiet" )
|
||
|
<*> option auto
|
||
|
( long "enthusiasm"
|
||
|
<> help "How enthusiastic to greet"
|
||
|
<> showDefault
|
||
|
<> value 1
|
||
|
<> metavar "INT" )
|
||
|
|
||
|
main :: IO ()
|
||
|
main = do
|
||
|
args <- execParser opts
|
||
|
greet args
|
||
|
where
|
||
|
opts = info (parseArgs <**> helper)
|
||
|
( fullDesc
|
||
|
<> progDesc "Print a greeting for TARGET"
|
||
|
<> header "header - a test for optparse-applicative" )
|
||
|
|
||
|
greet :: CommandArgs -> IO ()
|
||
|
greet CommandArgs{..} = putStrLn $ "Hello, " ++ hello ++ replicate enthusiasm '!'
|