+to_address_help :: String
+to_address_help = "Send tweets to ADDRESS"
+
+from_address_help :: String
+from_address_help = "Send tweets from ADDRESS"
+
+sendmail_path_help :: String
+sendmail_path_help = "Use PATH to send mail"
+
+ignore_replies_help :: String
+ignore_replies_help = "Ignore replies to other tweets"
+
+ignore_retweets_help :: String
+ignore_retweets_help = "Ignore retweets from other users"
+
+verbose_help :: String
+verbose_help = "Be verbose about stuff"
+
+arg_spec :: Mode (CmdArgs OptionalCfg)
+arg_spec =
+ cmdArgsMode $
+ OptionalCfg {
+ consumer_key =
+ def &= typ "KEY"
+ &= groupname "Twitter API"
+ &= help consumer_key_help,
+
+ consumer_secret =
+ def &= typ "SECRET"
+ &= groupname "Twitter API"
+ &= help consumer_secret_help,
+
+ access_token =
+ def &= typ "TOKEN"
+ &= groupname "Twitter API"
+ &= help access_token_help,
+
+ access_secret =
+ def &= typ "SECRET"
+ &= groupname "Twitter API"
+ &= help access_secret_help,
+
+ heartbeat =
+ def &= groupname "Miscellaneous"
+ &= help heartbeat_help,
+
+ ignore_replies =
+ def &= groupname "Miscellaneous"
+ &= help ignore_replies_help,
+
+ ignore_retweets =
+ def &= groupname "Miscellaneous"
+ &= help ignore_retweets_help,
+
+ verbose =
+ def &= groupname "Miscellaneous"
+ &= help verbose_help,
+
+ sendmail_path =
+ def &= typ "PATH"
+ &= groupname "Mail Options"
+ &= help sendmail_path_help,
+
+ from_address =
+ def &= typ "ADDRESS"
+ &= groupname "Mail Options"
+ &= help from_address_help,
+
+ to_address =
+ def &= typ "ADDRESS"
+ &= groupname "Mail Options"
+ &= help to_address_help,
+
+ usernames =
+ def &= args
+ &= typ "USERNAMES" }
+
+ &= program program_name
+ &= summary my_summary
+ &= details [description]
+ &= helpArg [groupname "Common flags"]
+ &= versionArg [groupname "Common flags"]
+
+show_help :: IO (CmdArgs OptionalCfg)
+show_help = withArgs ["--help"] parse_args
+
+
+
+parse_args :: IO (CmdArgs OptionalCfg)
+parse_args = do
+ x <- getArgs
+ let y = process arg_spec x
+ case y of
+ Right result -> return result
+ Left err -> do
+ hPutStrLn stderr err
+ exitWith (ExitFailure exit_args_parse_failed)
+
+
+-- | 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 OptionalCfg
+apply_args =
+ parse_args >>= cmdArgsApply