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