{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell, OverloadedStrings, DeriveDataTypeable #-} import System.Console.CmdArgs.FromHelp import System.Console.CmdArgs hiding (cmdArgsHelp) import System.Environment (getArgs) {-printHelp :: Annotate Ann -> IO ()-} {-printHelp a = print =<< (cmdArgs_ a :: IO FromHelpArgs)-} {- main :: IO () main = print =<< processArgs [cmdArgsHelp| -} mkCmdArgs [fromHelp| The sample program sample [COMMAND] ... [OPTIONS] Common flags -h --help Display help message -V --version Print version information -w --whom=GUY sample hello [OPTIONS] -t --top Top of the Morning to you! sample goodbye [OPTIONS] -s --sianara -c --ciao |] main :: IO () main = do print defaultHello print defaultGoodbye args <- getArgs if "--help" `elem` args || "-?" `elem` args -- helpContents and default.. are references generated by mkCmdArgs then putStrLn helpContents else print =<< cmdArgs (modes [defaultHello, defaultGoodbye]) {- dist/build/test/test goodbye -s sucker Hello {top = "", whom = ""} Goodbye {whom = "", sianara = "", ciao = ""} Goodbye {whom = "", sianara = "sucker", ciao = ""} -}