Create small command line program that parses arguments
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.
This commit is contained in:
		
							parent
							
								
									ef40622a87
								
							
						
					
					
						commit
						b1c403f6b9
					
				
					 3 changed files with 56 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								scratch/brilliant/.ghci
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								scratch/brilliant/.ghci
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| :set prompt "> " | ||||
| :set -Wall | ||||
							
								
								
									
										45
									
								
								scratch/brilliant/Main.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								scratch/brilliant/Main.hs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| {-# 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 '!' | ||||
							
								
								
									
										9
									
								
								scratch/brilliant/shell.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								scratch/brilliant/shell.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| let | ||||
|   pkgs = import /home/wpcarro/nixpkgs {}; | ||||
| in pkgs.mkShell { | ||||
|   buildInputs = with pkgs; [ | ||||
|     (haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [ | ||||
|       optparse-applicative | ||||
|     ])) | ||||
|   ]; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue