argPos,
cmdArgsApply,
cmdArgsMode,
+ def,
details,
+ help,
program,
typ,
+ typFile,
summary
)
data Args =
- Args { article :: String }
+ Args { output :: FilePath,
+ article :: String }
deriving (Show, Data, Typeable)
lwn_epub_summary =
program_name ++ "-" ++ (showVersion version)
+output_help :: String
+output_help = "Output file, defaults to stdout"
+
arg_spec :: Mode (CmdArgs Args)
arg_spec = cmdArgsMode $
- Args { article = "" &= argPos 0 &= typ "ARTICLE" }
+ Args {
+ output = def &= typFile &= help output_help,
+ article = def &= argPos 0 &= typ "ARTICLE"
+ }
&= program program_name
&= summary lwn_epub_summary
&= details [description]
is_missing_arg_error s =
startswith "Requires at least" s
+
parse_args :: IO (CmdArgs Args)
parse_args = do
x <- getArgs
Right result -> return result
Left err ->
if (is_missing_arg_error err) then
+ -- Disregard the error message, show help instead.
withArgs ["--help"] parse_args
else do
hPutStrLn stderr err
exitWith (ExitFailure exit_args_parse_failed)
- -- Disregard the error message, show help instead.
+-- | Really get the command-line arguments. This calls 'parse_args'
+-- first to replace the default "wrong number of arguments" error,
+-- and then runs 'cmdArgsApply' on the result to do what the
+-- 'cmdArgs' function usually does.
apply_args :: IO Args
-apply_args = do
- x <- parse_args
- cmdArgsApply x
+apply_args =
+ parse_args >>= cmdArgsApply