-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parsing command-line options -- -- The options package lets library and application developers -- easily work with command-line options. -- -- The following example is a full program that can accept two options, -- --message and --quiet: -- --
--   {-# LANGUAGE TemplateHaskell #-}
--   
--   import Options
--   
--   defineOptions "MainOptions" $ do
--       stringOption "optMessage" "message" "Hello world!"
--           "A message to show the user."
--       boolOption "optQuiet" "quiet" False
--           "Whether to be quiet."
--    
--   main :: IO ()
--   main = runCommand $ \opts args -> do
--       if optQuiet opts
--           then return ()
--           else putStrLn (optMessage opts)
--   
-- --
--   $ ./hello
--   Hello world!
--   $ ./hello --message='ciao mondo'
--   ciao mondo
--   $ ./hello --quiet
--   $
--   
-- -- In addition, this library will automatically create documentation -- options such as --help and --help-all: -- --
--   $ ./hello --help
--   Help Options:
--     -h, --help                  Show option summary.
--     --help-all                  Show all help options.
--   
--   Application Options:
--     --message                   A message to show the user.
--     --quiet                     Whether to be quiet.
--   
@package options @version 0.1 -- | The options package lets library and application developers -- easily work with command-line options. -- -- The following example is a full program that can accept two options, -- --message and --quiet: -- --
--   {-# LANGUAGE TemplateHaskell #-}
--   
--   import Options
--   
--   defineOptions "MainOptions" $ do
--       stringOption "optMessage" "message" "Hello world!"
--           "A message to show the user."
--       boolOption "optQuiet" "quiet" False
--           "Whether to be quiet."
--   
--   main :: IO ()
--   main = runCommand $ \opts args -> do
--       if optQuiet opts
--           then return ()
--           else putStrLn (optMessage opts)
--   
-- --
--   $ ./hello
--   Hello world!
--   $ ./hello --message='ciao mondo'
--   ciao mondo
--   $ ./hello --quiet
--   $
--   
-- -- In addition, this library will automatically create documentation -- options such as --help and --help-all: -- --
--   $ ./hello --help
--   Help Options:
--     -h, --help                  Show option summary.
--     --help-all                  Show all help options.
--   
--   Application Options:
--     --message                   A message to show the user.
--     --quiet                     Whether to be quiet.
--   
module Options -- | Options are defined together in a single data type, which will be an -- instance of Options. -- -- See defineOptions for details on defining instances of -- Options. -- -- See options for details on including imported Options -- types in locally defined options. class Options a -- | An options value containing only the default values for each option. -- This is equivalent to the options value when parsing an empty argument -- list. defaultOptions :: Options a => a -- | Retrieve getArgs, and attempt to parse it into a valid value of -- an Options type plus a list of left-over arguments. The options -- and arguments are then passed to the provided computation. -- -- If parsing fails, this computation will print an error and call -- exitFailure. -- -- If parsing succeeds, and the user has passed a --help flag, -- and the developer is using the default help flag definitions, then -- this computation will print documentation and call exitSuccess. -- -- See runSubcommand for details on subcommand support. runCommand :: (MonadIO m, Options opts) => (opts -> [String] -> m a) -> m a data Subcommand cmdOpts action subcommand :: (Options cmdOpts, Options subcmdOpts) => String -> (cmdOpts -> subcmdOpts -> [String] -> action) -> Subcommand cmdOpts action -- | Used to run applications that are split into subcommands. -- -- Use subcommand to define available commands and their actions, -- then pass them to this computation to select one and run it. If the -- user specifies an invalid subcommand, this computation will print an -- error and call exitFailure. In handling of invalid flags or -- --help, runSubcommand acts like runCommand. -- --
--   {-# LANGUAGE TemplateHaskell #-}
--   
--   import Control.Monad (unless)
--   import Options
--   
--   defineOptions "MainOptions" $ do
--       boolOption "optQuiet" "quiet" False "Whether to be quiet."
--   
--   defineOptions "HelloOpts" $ do
--       stringOption "optHello" "hello" "Hello!" "How to say hello."
--   
--   defineOptions "ByeOpts" $ do
--       stringOption "optName" "name" "" "The user's name."
--   
--   hello :: MainOptions -> HelloOpts -> [String] -> IO ()
--   hello mainOpts opts args = unless (optQuiet mainOpts) $ do
--       putStrLn (optHello opts)
--   
--   bye :: MainOptions -> ByeOpts -> [String] -> IO ()
--   bye mainOpts opts args = unless (optQuiet mainOpts) $ do
--       putStrLn ("Good bye " ++ optName opts)
--   
--   main :: IO ()
--   main = runSubcommand
--       [ subcommand "hello" hello
--       , subcommand "bye" bye
--       ]
--   
-- --
--   $ ./app hello
--   Hello!
--   $ ./app hello --hello='Allo!'
--   Allo!
--   $ ./app bye
--   Good bye 
--   $ ./app bye --name='John'
--   Good bye John
--   
runSubcommand :: (Options opts, MonadIO m) => [Subcommand opts (m a)] -> m a -- | Defines a new data type, containing fields for application or library -- options. The new type will be an instance of Options. -- -- Example: this use of defineOptions: -- --
--   defineOptions "MainOptions" $ do
--       stringOption "optMessage" "message" "Hello world!" ""
--       boolOption "optQuiet" "quiet" False ""
--   
-- -- expands to the following definition: -- --
--   data MainOptions = MainOptions
--       { optMessage :: String
--       , optQuiet :: Bool
--       }
--   
--   instance Options MainOptions
--   
defineOptions :: String -> OptionsM () -> Q [Dec] -- | Define an option of type Bool. This is a simple -- wrapper around option. boolOption :: String -> String -> Bool -> String -> OptionsM () -- | Define an option of type String. This is a simple -- wrapper around option. stringOption :: String -> String -> String -> String -> OptionsM () -- | Define an option of type [String]. This is a simple -- wrapper around option. Items are comma-separated. stringsOption :: String -> String -> [String] -> String -> OptionsM () -- | Define an option of type Text. This is a simple -- wrapper around option. textOption :: String -> String -> Text -> String -> OptionsM () -- | Define an option of type [Text]. This is a simple -- wrapper around option. Items are comma-separated. textsOption :: String -> String -> [Text] -> String -> OptionsM () -- | Define an option of type FilePath. This is a simple -- wrapper around option. pathOption :: String -> String -> FilePath -> String -> OptionsM () -- | Define an option of type Int. This is a simple wrapper -- around option. intOption :: String -> String -> Int -> String -> OptionsM () -- | Define an option of type Integer. This is a simple -- wrapper around option. integerOption :: String -> String -> Integer -> String -> OptionsM () -- | Define an option of type Float. This is a simple -- wrapper around option. floatOption :: String -> String -> Float -> String -> OptionsM () -- | Define an option of type Double. This is a simple -- wrapper around option. doubleOption :: String -> String -> Double -> String -> OptionsM () data ImportedOptions a importedOptions :: Options a => ImportedOptions a -- | Include options defined elsewhere into the current options definition. -- -- This is typically used by application developers to include options -- defined in third-party libraries. For example, the author of the "foo" -- library would define and export FooOptions: -- --
--   module Foo (FooOptions, foo) where
--   
--   import Options
--   
--   defineOptions "FooOptions" $ do
--       boolOption "optFrob" "frob" True "Enable frobnication."
--   
--   foo :: FooOptions -> IO ()
--   
-- -- and the author of an application would use options to let -- users specify --frob: -- --
--   module Main where
--   
--   import Options
--   import Foo
--   
--   defineOptions "MainOptions" $ do
--      boolOption "optVerbose" "verbose" False "Be really loud."
--      options "optFoo" (importedOptions :: ImportedOptions FooOptions)
--   
--   main :: IO ()
--   main = runCommand $ \opts args -> do
--       foo (optFoo opts)
--   
-- -- Use of options may be arbitrarily nested. Library authors are -- encouraged to aggregate their options into a single top-level type, so -- application authors can include it easily in their own option -- definitions. options :: String -> ImportedOptions a -> OptionsM () data Option a -- | Defines a new option in the current options type. -- -- All options must have a field name and one or more -- flags. Options may also have a default value, a description, or -- a group. -- -- The field name is how the option will be accessed in Haskell, and is -- typically prefixed with "opt". This is used to define a record field, -- and must be a valid Haskell field name (see defineOptions for -- details). -- -- The flags are how the user specifies an option on the command -- line. Flags may be short or long. See -- optionShortFlags and optionLongFlags for details. -- --
--   option "optPort" (\o -> o
--       { optionLongFlags = ["port"]
--       , optionDefault = "80"
--       , optionType = optionTypeWord16
--       }
--   
option :: String -> (Option String -> Option a) -> OptionsM () -- | Short flags are a single character. When entered by a user, they are -- preceded by a dash and possibly other short flags. -- -- Short flags must be a letter or a number. -- -- Example: An option with optionShortFlags = ['p'] may be set -- using: -- --
--   $ ./app -p 443
--   $ ./app -p443
--   
optionShortFlags :: Option a -> [Char] -- | Long flags are multiple characters. When entered by a user, they are -- preceded by two dashes. -- -- Long flags may contain letters, numbers, '-', and -- '_'. -- -- Example: An option with optionLongFlags = ["port"] may be set -- using: -- --
--   $ ./app --port 443
--   $ ./app --port=443
--   
optionLongFlags :: Option a -> [String] -- | Options may have a default value. This will be parsed as if the user -- had entered it on the command line. optionDefault :: Option a -> String -- | There are many types which an application or library might want to use -- when designing their options. By default, options are strings, but -- optionType may be set to any supported type. See the "Option -- types" section for a list of supported types. optionType :: Option a -> OptionType a -- | An option's description is used with the default implementation of -- --help. It should be a short string describing what the -- option does. optionDescription :: Option a -> String -- | Which group the option is in. See the "Option groups" section for -- details. optionGroup :: Option a -> Group -- | An option's type determines how the option will be parsed, and which -- Haskell type the parsed value will be stored as. There are many types -- available, covering most basic types and a few more advanced types. data OptionType a -- | Store an option as a Bool. The option's value must be -- either "true" or "false". -- -- Boolean options are unary, which means that their value is optional -- when specified on the command line. If a flag is present, the option -- is set to True. -- --
--   $ ./app -q
--   $ ./app --quiet
--   
-- -- Boolean options may still be specified explicitly by using long flags -- with the --flag=value format. This is the only way to set a -- unary flag to "false". -- --
--   $ ./app --quiet=true
--   $ ./app --quiet=false
--   
optionTypeBool :: OptionType Bool -- | Store an option value as a String. The value is -- decoded to Unicode first, if needed. The value may contain non-Unicode -- bytes, in which case they will be stored using GHC 7.4's encoding for -- mixed-use strings. optionTypeString :: OptionType String -- | Store an option value as a Text. The value is decoded -- to Unicode first, if needed. If the value cannot be decoded, the -- stored value may have the Unicode substitution character -- '\65533' in place of some of the original input. optionTypeText :: OptionType Text -- | Store an option value as a FilePath. optionTypeFilePath :: OptionType FilePath -- | Store an option as an Int. The option value must be an -- integer n such that minBound <= n <= -- maxBound. optionTypeInt :: OptionType Int -- | Store an option as an Int8. The option value must be -- an integer n such that minBound <= n <= -- maxBound. optionTypeInt8 :: OptionType Int8 -- | Store an option as an Int16. The option value must be -- an integer n such that minBound <= n <= -- maxBound. optionTypeInt16 :: OptionType Int16 -- | Store an option as an Int32. The option value must be -- an integer n such that minBound <= n <= -- maxBound. optionTypeInt32 :: OptionType Int32 -- | Store an option as an Int64. The option value must be -- an integer n such that minBound <= n <= -- maxBound. optionTypeInt64 :: OptionType Int64 -- | Store an option as a Word. The option value must be a -- positive integer n such that 0 <= n <= -- maxBound. optionTypeWord :: OptionType Word -- | Store an option as a Word8. The option value must be a -- positive integer n such that 0 <= n <= -- maxBound. optionTypeWord8 :: OptionType Word8 -- | Store an option as a Word16. The option value must be -- a positive integer n such that 0 <= n <= -- maxBound. optionTypeWord16 :: OptionType Word16 -- | Store an option as a Word32. The option value must be -- a positive integer n such that 0 <= n <= -- maxBound. optionTypeWord32 :: OptionType Word32 -- | Store an option as a Word64. The option value must be -- a positive integer n such that 0 <= n <= -- maxBound. optionTypeWord64 :: OptionType Word64 -- | Store an option as an Integer. The option value must -- be an integer. There is no minimum or maximum value. optionTypeInteger :: OptionType Integer -- | Store an option as a Float. The option value must be a -- number. Due to the imprecision of floating-point math, the stored -- value might not exactly match the user's input. If the user's input is -- out of range for the Float type, it will be stored as -- Infinity or -Infinity. optionTypeFloat :: OptionType Float -- | Store an option as a Double. The option value must be -- a number. Due to the imprecision of floating-point math, the stored -- value might not exactly match the user's input. If the user's input is -- out of range for the Double type, it will be stored as -- Infinity or -Infinity. optionTypeDouble :: OptionType Double -- | Store an option as a Maybe of another type. The value -- will be Nothing if the option was not provided or is an empty -- string. -- --
--   option "optTimeout" (\o -> o
--       { optionLongFlags = ["timeout"]
--       , optionType = optionTypeMaybe optionTypeInt
--       })
--   
optionTypeMaybe :: OptionType a -> OptionType (Maybe a) -- | Store an option as a list, using another option type for the elements. -- The separator should be a character that will not occur within the -- values, such as a comma or semicolon. -- --
--   option "optNames" (\o -> o
--       { optionLongFlags = ["names"]
--       , optionDefault = "Alice;Bob;Charles"
--       , optionType = optionTypeList ';' optionTypeString
--       })
--   
optionTypeList :: Char -> OptionType a -> OptionType [a] -- | Store an option as a Set, using another option type -- for the elements. The separator should be a character that will not -- occur within the values, such as a comma or semicolon. -- -- Duplicate elements in the input are permitted. -- --
--   option "optNames" (\o -> o
--       { optionLongFlags = ["names"]
--       , optionDefault = "Alice;Bob;Charles"
--       , optionType = optionTypeSet ';' optionTypeString
--       })
--   
optionTypeSet :: Ord a => Char -> OptionType a -> OptionType (Set a) -- | Store an option as a Map, using other option types for the keys -- and values. -- -- The item separator is used to separate key/value pairs from eachother. -- It should be a character that will not occur within either the keys or -- values. -- -- The value separator is used to separate the key from the value. It -- should be a character that will not occur within the keys. It may -- occur within the values. -- -- Duplicate keys in the input are permitted. The final value for each -- key is stored. -- --
--   option "optNames" (\o -> o
--       { optionLongFlags = ["names"]
--       , optionDefault = "name=Alice;hometown=Bucharest"
--       , optionType = optionTypeMap ';' '=' optionTypeString optionTypeString
--       })
--   
optionTypeMap :: Ord k => Char -> Char -> OptionType k -> OptionType v -> OptionType (Map k v) -- | Store an option as one of a set of enumerated values. The option type -- must be defined in a separate file. -- --
--   -- MyApp/Types.hs
--   data Mode = ModeFoo | ModeBar
--       deriving (Enum)
--   
-- --
--    -- Main.hs
--   import MyApp.Types
--   
--   defineOptions "MainOptions" $ do
--       option "optMode" (\o -> o
--           { optionLongFlags = ["mode"]
--           , optionDefault = "foo"
--           , optionType = optionTypeEnum ''Mode
--               [ ("foo", ModeFoo)
--               , ("bar", ModeBar)
--               ]
--           })
--   
-- --
--   $ ./app
--   Running in mode ModeFoo
--   $ ./app --mode=bar
--   Running in mode ModeBar
--   
optionTypeEnum :: Enum a => Name -> [(String, a)] -> OptionType a data Group -- | Define an option group. -- -- Option groups are used to make long --help output more -- readable, by hiding obscure or rarely-used options from the main -- summary. -- -- If an option is in a group named "examples", it will only be -- shown in the help output if the user provides the flag -- --help-examples or --help-all. The flag -- --help-all will show all options, in all groups. group :: String -> (Group -> Group) -> Group -- | A short title for the group, which is used when printing -- --help output. groupTitle :: Group -> String -- | A description of the group, which is used when printing -- --help output. groupDescription :: Group -> String -- | See parseOptions and parseSubcommand. class Parsed a -- | Get the error that prevented options from being parsed from argv, or -- Nothing if no error was detected. parsedError :: Parsed a => a -> Maybe String -- | Get a help message to show the user. If the arguments included a help -- flag, this will be a message appropriate to that flag. Otherwise, it -- is a summary (equivalent to --help). -- -- This is always a non-empty string, regardless of whether the parse -- succeeded or failed. If you need to perform additional validation on -- the options value, this message can be displayed if validation fails. parsedHelp :: Parsed a => a -> String -- | See parseOptions. data ParsedOptions opts -- | Get the options value that was parsed from argv, or Nothing -- if the arguments could not be converted into options. -- -- Note: This function return Nothing if the user provided a -- help flag. To check whether an error occured during parsing, check the -- value of parsedError. parsedOptions :: ParsedOptions opts -> Maybe opts -- | Get command-line arguments remaining after parsing options. The -- arguments are unchanged from the original argument list, and have not -- been decoded or otherwise transformed. parsedArguments :: ParsedOptions opts -> [String] -- | Attempt to convert a list of command-line arguments into an options -- value. This can be used by application developers who want finer -- control over error handling, or who want to perform additional -- validation on the options value. -- -- The argument list must be in the same encoding as the result of -- getArgs. -- -- Use parsedOptions, parsedArguments, -- parsedError, and parsedHelp to inspect -- the result of parseOptions. -- -- Example: -- --
--   getOptionsOrDie :: Options a => IO a
--   getOptionsOrDie = do
--       argv <- System.Environment.getArgs
--       let parsed = parseOptions argv
--       case parsedOptions parsed of
--           Just opts -> return opts
--           Nothing -> case parsedError parsed of
--               Just err -> do
--                   hPutStrLn stderr (parsedHelp parsed)
--                   hPutStrLn stderr err
--                   exitFailure
--               Nothing -> do
--                   hPutStr stdout (parsedHelp parsed)
--                   exitSuccess
--   
parseOptions :: Options opts => [String] -> ParsedOptions opts -- | See parseSubcommand. data ParsedSubcommand action -- | Get the subcommand action that was parsed from argv, or -- Nothing if the arguments could not be converted into a valid -- action. -- -- Note: This function return Nothing if the user provided a -- help flag. To check whether an error occured during parsing, check the -- value of parsedError. parsedSubcommand :: ParsedSubcommand action -> Maybe action -- | Attempt to convert a list of command-line arguments into a subcommand -- action. This can be used by application developers who want finer -- control over error handling, or who want subcommands that run in an -- unusual monad. -- -- The argument list must be in the same encoding as the result of -- getArgs. -- -- Use parsedSubcommand, parsedError, and -- parsedHelp to inspect the result of -- parseSubcommand. -- -- Example: -- --
--   runSubcommand :: Options cmdOpts => [Subcommand cmdOpts (IO a)] -> IO a
--   runSubcommand subcommands = do
--       argv <- System.Environment.getArgs
--       let parsed = parseSubcommand subcommands argv
--       case parsedSubcommand parsed of
--           Just cmd -> cmd
--           Nothing -> case parsedError parsed of
--               Just err -> do
--                   hPutStrLn stderr (parsedHelp parsed)
--                   hPutStrLn stderr err
--                   exitFailure
--               Nothing -> do
--                   hPutStr stdout (parsedHelp parsed)
--                   exitSuccess
--   
parseSubcommand :: Options cmdOpts => [Subcommand cmdOpts action] -> [String] -> ParsedSubcommand action instance Parsed (ParsedSubcommand a) instance Parsed (ParsedOptions a) instance Monad (ParserM optType) instance Monad OptionsM