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