packages feed

optparse-applicative-0.4.2: tests/Examples/Commands.hs

module Examples.Commands where

import Data.List
import Options.Applicative

data Sample
  = Hello [String]
  | Goodbye
  deriving Show

hello :: Parser Sample
hello = Hello <$> arguments str (metavar "TARGET...")

sample :: Parser Sample
sample = subparser
       ( command "hello"
         (info hello
               (progDesc "Print greeting"))
       & command "goodbye"
         (info (pure Goodbye)
               (progDesc "Say goodbye"))
       )

run :: Sample -> IO ()
run (Hello targets) = putStrLn $ "Hello, " ++ intercalate ", " targets ++ "!"
run Goodbye = putStrLn "Goodbye."

opts :: ParserInfo Sample
opts = info sample idm

main :: IO ()
main = execParser opts >>= run