-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parse Aeson data with commitment -- -- Commitment mechanism for aeson parsers. Commitment means that -- if some initial parsing succeeds, subsequent failures are -- unrecoverable. @package aeson-commit @version 1.4 -- | Commit mechanism for aeson's Parser. To commit means that if -- some initial parsing succeeds, subsequent failures are unrecoverable. -- -- In the following example, we use .:> to look for a key -- .nested.value, and if that does not exist, .value. -- --
--   parse o = (o .:> "nested") (withObject "nestedObj" (.: "value"))
--           <|> tryParser (o .: "value")
--   
-- -- Not having the key nested is a normal, recoverable failure, -- and parsing will continue looking for value. However, if -- nested is present but malformed, parsing fails. -- --
--   { 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 fails, the failure is -- recoverable through Alternative. 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 -- | Run a Commit, capturing its result in a 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 -> Key -> (a -> Parser b) -> Commit b -- | Turn a Parser into a Commit Unlike liftParser, -- the parser's failure is recoverable. -- --
--   tryParser empty <|> p = p
--   tryParser p = commit p pure
--   
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 p = commit (pure ()) (const p)
--   
liftParser :: Parser a -> Commit a -- | A Commit is a Parser that has two failure modes; -- recoverable and non-recoverable. -- --
--   tryParser empty <|> p = p
--   liftParser empty <|> p = empty
--   
-- -- Commit is typically constructed using commit, and -- consumed using runCommit, which captures its result in a -- Parser. -- -- The implementation works by wrapping Parser in an -- ExceptT. The derived Alternative instance will then 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