about summary refs log blame commit diff
path: root/scratch/brilliant/Main.hs
blob: 999771f558364f0e0cdaca40023e576f9ba2d6eb (plain) (tree)












































                                                                                 
{-# 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 '!'