docopt-0.7.0.5: System/Console/Docopt/NoTH.hs
module System.Console.Docopt.NoTH
(
-- * Usage parsers
parseUsage
, parseUsageOrExit
, module System.Console.Docopt.Public
)
where
import Data.Map as M hiding (null)
import System.Exit
import System.Console.Docopt.Types
import System.Console.Docopt.Public
import System.Console.Docopt.ParseUtils
import System.Console.Docopt.UsageParse (pDocopt, trimEmptyLines)
-- | Parse docopt-formatted usage patterns.
--
-- For help with the docopt usage format, see
-- <https://github.com/docopt/docopt.hs/blob/master/README.md#help-text-format the readme on github>.
parseUsage :: String -> Either ParseError Docopt
parseUsage rawUsg =
let usg = trimEmptyLines rawUsg
in case runParser pDocopt M.empty "Usage" usg of
Left e -> Left e
Right optfmt -> Right (Docopt optfmt usg)
-- | Same as 'parseUsage', but 'exitWithUsage' on parse failure. E.g.
--
-- > let usageStr = "Usage:\n prog [--option]\n"
-- > patterns <- parseUsageOrExit usageStr
parseUsageOrExit :: String -> IO Docopt
parseUsageOrExit rawUsg = exitUnless $ parseUsage usg
where
usg = trimEmptyLines rawUsg
exit message = putStrLn message >> exitFailure
exitUnless = either (const $ exit usg) return