{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-- | A module for decoding JSON, and generating good error messages. Note,
-- however, that this package only deals with generating good error messages
-- /after/ the JSON has been parsed into a 'Data.Aeson.Value' - unfortunately,
-- invalid JSON will still produce poor error messages.
--
-- See for a tutorial.
--
-- Any kind of feedback is very welcome: suggestions for a better designed API,
-- bug reports, whatever - the best place for it is probably the GitHub issue
-- tracker: .
module Data.Aeson.BetterErrors
( -- * The Parser type
Parse
-- * Basic parsers
, asText
, asString
, asScientific
, asIntegral
, asRealFloat
, asBool
, asNull
, asObject
, asArray
-- * Traversing JSON
, key
, keyOrDefault
, keyMay
, nth
, nthOrDefault
, nthMay
, eachInArray
, eachInObject
-- * Custom validations
, withText
, withString
, withScientific
, withIntegral
, withRealFloat
, withBool
, withObject
, withArray
-- * Running parsers
, parse
, parseStrict
, parseValue
-- * Errors
, ParseError(..)
, PathPiece(..)
, ErrorSpecifics(..)
, displayError
, displayPath
, displaySpecifics
-- * Miscellaneous
, toAesonParser
, JSONType(..)
, jsonTypeOf
) where
import Data.Aeson (Value) -- for haddock
import Data.Aeson.BetterErrors.Internal
-- TODO Alternative?
-- use monoid, combine errors?
-- Simply take rightmost?
-- Or maybe take the one with the deepest path?
--
-- Or, export our own (<|>) that uses a semigroup (since errors are
-- 'nonempty') - that is, we don't want to allow failing with no error.