{-# LANGUAGE CPP #-}
module Examples.Commands where
import Data.List
import Options.Applicative
#if __GLASGOW_HASKELL__ <= 702
import Data.Monoid
(<>) :: Monoid a => a -> a -> a
(<>) = mappend
#endif
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 <**> helper) idm
main :: IO ()
main = execParser opts >>= run