-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parse Aeson data with commitment -- -- Aeson parsers backtracks too much for some use cases. The commit -- parser forbids backtracking for already committed parses. @package aeson-commit @version 1.2 -- | Commitment mechanism for aeson Parser. This is comes up when -- you e.g. want to make a distinction between in error handling for -- missing keys and malformed keys. As an example, this parser will yield -- nested.value if there the key nested is present, and -- value if it is not present. -- --
--   parse o = (o .:> "nested") (withObject "nestedObj" (.: "value"))
--           <|> tryParser (o .: "value")
--   
-- --
--   { value: "foo", otherField: "bar" }
--   -> Right "foo"
--   
--   { value: "foo", nested: { value: "bar" } }
--   -> Right "bar"
--   
--   { value: "foo", nested: { bar: 9 } }
--   -> Left "Error in $.nested: key \"value\" not found"
--   
--   { value: "foo", nested: 9 }
--   -> Left "Error in $.nested: parsing nestedObj failed, expected Object, but encountered Number"
--   
--   {}
--   -> Left
--     "Error in $: No match,
--      - key \"value\" not found"
--      - key \"nested\" not found"
--   
module Data.Aeson.Commit -- | Construct a commit. If the first parser succeeds, the Commit is -- a success, and any failures in the inner action will be preserved. commit :: Parser a -> (a -> Parser b) -> Commit b -- | Turn a Commit back into a regular Parser. runCommit :: Commit a -> Parser a -- | Convenience wrapper around commit for when the commit is -- checking whether a key is present in some object. If it is, it will -- commit and append the key to the JSONPath of the inner context through -- <?>, which will give nicer error messages. (.:>) :: FromJSON a => Object -> Text -> (a -> Parser b) -> Commit b -- | Turn a Parser into a Commit Unlike liftParser, -- the parser's failure is recoverable. -- --
--   tryParser empty <|> p = p
--   
tryParser :: Parser a -> Commit a -- | Turn a Parser into a Commit. Unlike tryParser, -- the parser's failure is _not_ recoverable, i.e. the parse is always -- committed. -- --
--   liftParser empty <|> p = empty
--   
liftParser :: Parser a -> Commit a -- | A Parser that has _two_ failure modes; recoverable and -- non-recoverable. The default, recoverable failure is the equivalent to -- aeson's default Parser behavior. The non-recoverable failure -- mode is used to commit to a branch; to commit means that every -- subsequent failure is non-recoverable. -- -- You turn a commit back into a normal Parser using -- runCommit. As an additional benefit, if no commit succeeded the -- parser error message will contain all encountered errors. -- -- The implementation works by capturing failure in either the -- ExceptT or in the underlying Parser. The derived -- Alternative instance will only recover from failures in the -- ExceptT. This means that as soon as we successfully construct a -- Right value, the Alternative considers the Commit -- a success, even though the underlying parser might have failed. The -- Void represents the guarantee that we only collect error -- values. newtype Commit a Commit :: ExceptT [Parser Void] Parser a -> Commit a [unCommit] :: Commit a -> ExceptT [Parser Void] Parser a instance GHC.Base.Alternative Data.Aeson.Commit.Commit instance GHC.Base.Applicative Data.Aeson.Commit.Commit instance GHC.Base.Functor Data.Aeson.Commit.Commit instance GHC.Base.Monad Data.Aeson.Commit.Commit