diff options
author | William Carroll <wpcarro@gmail.com> | 2020-08-04T15·36+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-08-04T15·36+0100 |
commit | b1c403f6b913d0ac416efffba8e563ab6a24fa9b (patch) | |
tree | be94457b46c00018f93b3ece1a941efbeb726891 | |
parent | ef40622a87b9dad5781d0214b4f68b450b04b100 (diff) |
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.
-rw-r--r-- | scratch/brilliant/.ghci | 2 | ||||
-rw-r--r-- | scratch/brilliant/Main.hs | 45 | ||||
-rw-r--r-- | scratch/brilliant/shell.nix | 9 |
3 files changed, 56 insertions, 0 deletions
diff --git a/scratch/brilliant/.ghci b/scratch/brilliant/.ghci new file mode 100644 index 000000000000..efc88e630ccb --- /dev/null +++ b/scratch/brilliant/.ghci @@ -0,0 +1,2 @@ +:set prompt "> " +:set -Wall diff --git a/scratch/brilliant/Main.hs b/scratch/brilliant/Main.hs new file mode 100644 index 000000000000..999771f55836 --- /dev/null +++ b/scratch/brilliant/Main.hs @@ -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 '!' diff --git a/scratch/brilliant/shell.nix b/scratch/brilliant/shell.nix new file mode 100644 index 000000000000..58a2e9a6a573 --- /dev/null +++ b/scratch/brilliant/shell.nix @@ -0,0 +1,9 @@ +let + pkgs = import /home/wpcarro/nixpkgs {}; +in pkgs.mkShell { + buildInputs = with pkgs; [ + (haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [ + optparse-applicative + ])) + ]; +} |