b1c403f6b9
Before starting my take-home assignment, the instructions advised me to create a "Hello, world" program in the language of my choice. Since I'm choosing Haskell, I created this example as my starter boilerplate.
45 lines
1.4 KiB
Haskell
45 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 '!'
|