-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Simple interface to optparse-applicative
--   
--   Please see the README at
--   https://www.stackage.org/package/optparse-simple
@package optparse-simple
@version 0.1.1.4

-- | Simple interface to program arguments.
--   
--   Typical usage with no commands:
--   
--   
--   do (opts,()) <-
--        simpleOptions "ver"
--                      "header"
--                      "desc"
--                      (flag () () (long "some-flag"))
--                      empty
--      doThings opts
--   
--   
--   Typical usage with commands:
--   
--   
--   do (opts,runCmd) <-
--        simpleOptions "ver"
--                      "header"
--                      "desc"
--                      (pure ()) $
--        do addCommand "delete"
--                      "Delete the thing"
--                      (const deleteTheThing)
--                      (pure ())
--           addCommand "create"
--                      "Create a thing"
--                      createAThing
--                      (strOption (long "hello"))
--      runCmd
--   
module Options.Applicative.Simple

-- | Generate and execute a simple options parser.
simpleOptions :: String -> String -> String -> Parser a -> ExceptT b (Writer (Mod CommandFields b)) () -> IO (a, b)

-- | Generate a simple options parser.
--   
--   Most of the time you should use simpleOptions instead, but
--   simpleParser can be used for sub-commands that need common
--   options. For example:
--   
--   
--   addCommand "thing"
--              "Subcommands that operate on things"
--              (\(opts,runSubCmd) -> runSubCmd opts)
--              (simpleParser (flag () () (long "some-flag")) $
--               do addCommand "delete"
--                             "Delete the thing"
--                             (const deleteTheThing)
--                             (pure ())
--                  addCommand "create"
--                             "Create a thing"
--                             createAThing
--                             (strOption (long "hello")))
--   
simpleParser :: Parser a -> ExceptT b (Writer (Mod CommandFields b)) () -> Parser (a, b)

-- | Generate a string like Version 1.2, Git revision 1234.
--   
--   $(simpleVersion …) :: String
simpleVersion :: Version -> Q Exp

-- | Add a command to the options dispatcher.
addCommand :: String -> String -> (a -> b) -> Parser a -> ExceptT b (Writer (Mod CommandFields b)) ()

-- | Add a command that takes sub-commands to the options dispatcher.
--   
--   Example:
--   
--   
--   addSubCommands "thing"
--                  "Subcommands that operate on things"
--                  (do addCommand "delete"
--                                 "Delete the thing"
--                                 (const deleteTheThing)
--                                 (pure ())
--                      addCommand "create"
--                                 "Create a thing"
--                                 createAThing
--                                 (strOption (long "hello")))
--   
--   
--   If there are common options between all the sub-commands, use
--   addCommand in combination with simpleParser instead of
--   addSubCommands.
addSubCommands :: String -> String -> ExceptT b (Writer (Mod CommandFields b)) () -> ExceptT b (Writer (Mod CommandFields b)) ()
