-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Command Line Interface -- -- All you need for interacting with users at the Console level -- --
-- defaultMain $ do -- f1 <- flag .. -- f2 <- argument .. -- action $ \toParam -> -- something (toParam f1) (toParam f2) .. ---- -- You can also define subcommand using: -- --
-- defaultMain $ do -- subcommand "foo" $ do -- <..flags & parameters definitions...> -- action $ \toParam -> <..IO-action..> -- subcommand "bar" $ do -- <..flags & parameters definitions...> -- action $ \toParam -> <..IO-action..> ---- -- Example: -- --
-- main = defaultMain $ do -- programName "test-cli" -- programDescription "test CLI program" -- flagA <- flag $ FlagShort 'a' <> FlagLong "aaa" -- allArgs <- remainingArguments "FILE" -- action $ \toParam -> do -- putStrLn $ "using flag A : " ++ show (toParam flagA) -- putStrLn $ "args: " ++ show (toParam allArgs) --module Console.Options -- | run parse options description on the action -- -- to be able to specify the arguments manually (e.g. pre-handling), you -- can use defaultMainWith. >defaultMain dsl = getArgs -- >>= defaultMainWith dsl defaultMain :: OptionDesc (IO ()) () -> IO () -- | same as defaultMain, but with the argument defaultMainWith :: OptionDesc (IO ()) () -> [String] -> IO () -- | This is only useful when you want to handle all the description -- parsing manually and need to not automatically execute any action or -- help/error handling. -- -- Used for testing the parser. parseOptions :: OptionDesc r () -> [String] -> (ProgramDesc r, OptionRes r) -- | return value of the option parser. only needed when using -- parseOptions directly data OptionRes r OptionSuccess :: Params -> (Action r) -> OptionRes r OptionHelp :: OptionRes r OptionError :: String -> OptionRes r OptionInvalid :: String -> OptionRes r -- | Option description Monad data OptionDesc r a -- | Set the program name programName :: String -> OptionDesc r () -- | Set the program version programVersion :: Version -> OptionDesc r () -- | Set the program description programDescription :: String -> OptionDesc r () -- | Create a new sub command command :: String -> OptionDesc r () -> OptionDesc r () -- | Fragment of flag definition. -- -- Use the monoid approach to concat flags together e.g. > FlagShort -- o <> FlagLong "option" data FlagFrag -- | short option e.g. '-a' FlagShort :: Char -> FlagFrag -- | long option e.g. "--aaaa" FlagLong :: String -> FlagFrag -- | description of this flag. | FlagDefault String FlagDescription :: String -> FlagFrag -- | Flag option either of the form -short or --long -- -- for flag that expect a value (optional or mandatory), uses -- flagArg flag :: FlagFrag -> OptionDesc r (Flag Bool) -- | Flag option either of the form -short or --long -- -- for flag that doesn't have parameter, use flag flagParam :: FlagFrag -> FlagParser a -> OptionDesc r (FlagParam a) -- | Apply on a flagParam to turn into a flag that can be invoked -- multiples, creating a list of values in the action. flagMany :: OptionDesc r (FlagParam a) -> OptionDesc r (FlagMany a) -- | An unnamed positional argument -- -- For now, argument in a point of tree that contains sub trees will be -- ignored. TODO: record a warning or add a strict mode (for developping -- the CLI) and error. argument :: String -> ValueParser a -> OptionDesc r (Arg a) -- | All the remaining position arguments -- -- This is useful for example for a program that takes an unbounded list -- of files as parameters. remainingArguments :: String -> OptionDesc r (ArgRemaining [String]) -- | Set the action to run in this command action :: Action r -> OptionDesc r () -- | Set the description for a command description :: String -> OptionDesc r () -- | Represent a program to run type Action r = (forall a p. Param p => p a -> Ret p a) -> r -- | A parser for a flag's value, either optional or required. data FlagParser a -- | flag value parser with a required parameter. FlagRequired :: (ValueParser a) -> FlagParser a -- | Optional flag value parser: Default value if not present to a FlagOptional :: a -> (ValueParser a) -> FlagParser a -- | Represent a boolean flag (present / not present) data Flag a -- | Represent a Flag that can be called multiples times and will increase -- a counter. data FlagLevel a -- | Represent a Flag with an optional or required value associated data FlagParam a -- | Represent a Flag with optional or required value that can be added -- multiple times data FlagMany a -- | A positional argument data Arg a -- | All the remaining positional arguments data ArgRemaining a -- | A dictionary of parsed flags and arguments data Params -- | return all the flags and their unique identifier. internal only paramsFlags :: Params -> [(Nid, Maybe String)] -- | get the value associated with a specific Param (either a Flag, -- FlagParam, or an Arg) getParams :: Param p => Params -> (forall a. p a -> Ret p a)