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

-- | Parsing of aeson's Value with attoparsec
--   
--   Parsing of aeson's Value with attoparsec, originally from aeson.
@package attoparsec-aeson
@version 2.2.2.0

-- | Efficiently and correctly parse a JSON string. The string must be
--   encoded as UTF-8.
module Data.Aeson.Parser.Internal

-- | Parse any JSON value.
--   
--   The conversion of a parsed value to a Haskell value is deferred until
--   the Haskell value is needed. This may improve performance if only a
--   subset of the results of conversions are needed, but at a cost in
--   thunk allocation.
--   
--   This function is an alias for value. In aeson 0.8 and earlier,
--   it parsed only object or array types, in conformance with the
--   now-obsolete RFC 4627.
--   
--   
Warning
--   
--   If an object contains duplicate keys, only the first one will be kept.
--   For a more flexible alternative, see jsonWith.
json :: Parser Value

-- | Parse a top-level JSON value followed by optional whitespace and
--   end-of-input. See also: json.
jsonEOF :: Parser Value

-- | Parse any JSON value.
--   
--   This parser is parameterized by a function to construct an
--   Object from a raw list of key-value pairs, where duplicates are
--   preserved. The pairs appear in reverse order from the source.
--   
--   
Examples
--   
--   json keeps only the first occurrence of each key, using
--   fromList.
--   
--   
--   json = jsonWith (Right . fromList)
--   
--   
--   jsonLast keeps the last occurrence of each key, using
--   fromListWith (const id).
--   
--   
--   jsonLast = jsonWith (Right . fromListWith (const id))
--   
--   
--   jsonAccum keeps wraps all values in arrays to keep duplicates,
--   using fromListAccum.
--   
--   
--   jsonAccum = jsonWith (Right . fromListAccum)
--   
--   
--   jsonNoDup fails if any object contains duplicate keys, using
--   parseListNoDup.
--   
--   
--   jsonNoDup = jsonWith parseListNoDup
--   
jsonWith :: ([(Key, Value)] -> Either String Object) -> Parser Value

-- | Variant of json which keeps only the last occurrence of every
--   key.
jsonLast :: Parser Value

-- | Variant of json wrapping all object mappings in Array to
--   preserve key-value pairs with the same keys.
jsonAccum :: Parser Value

-- | Variant of json which fails if any object contains duplicate
--   keys.
jsonNoDup :: Parser Value

-- | Parse any JSON value. Synonym of json.
value :: Parser Value

-- | Parse a quoted JSON string.
jstring :: Parser Text

-- | Parse a string without a leading quote.
jstring_ :: Parser Text

-- | Parse a JSON number.
scientific :: Parser Scientific

-- | Parse any JSON value.
--   
--   This is a strict version of json which avoids building up
--   thunks during parsing; it performs all conversions immediately. Prefer
--   this version if most of the JSON data needs to be accessed.
--   
--   This function is an alias for value'. In aeson 0.8 and earlier,
--   it parsed only object or array types, in conformance with the
--   now-obsolete RFC 4627.
--   
--   
Warning
--   
--   If an object contains duplicate keys, only the first one will be kept.
--   For a more flexible alternative, see jsonWith'.
json' :: Parser Value

-- | Parse a top-level JSON value followed by optional whitespace and
--   end-of-input. See also: json'.
jsonEOF' :: Parser Value

-- | Strict version of jsonWith.
jsonWith' :: ([(Key, Value)] -> Either String Object) -> Parser Value

-- | Variant of json' which keeps only the last occurrence of every
--   key.
jsonLast' :: Parser Value

-- | Variant of json' wrapping all object mappings in Array
--   to preserve key-value pairs with the same keys.
jsonAccum' :: Parser Value

-- | Variant of json' which fails if any object contains duplicate
--   keys.
jsonNoDup' :: Parser Value

-- | Strict version of value. Synonym of json'.
value' :: Parser Value
decodeWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
decodeStrictWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
eitherDecodeWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a
eitherDecodeStrictWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a

-- | fromListAccum kvs is an object mapping keys to arrays
--   containing all associated values from the original list kvs.
--   
--   
--   >>> fromListAccum [("apple", Bool True), ("apple", Bool False), ("orange", Bool False)]
--   fromList [("apple",Array [Bool False,Bool True]),("orange",Array [Bool False])]
--   
fromListAccum :: [(Key, Value)] -> Object

-- | fromListNoDup kvs fails if kvs contains
--   duplicate keys.
parseListNoDup :: [(Key, Value)] -> Either String Object

-- | Unescape JSON text literal.
--   
--   This function is exporeted mostly for testing and benchmarking
--   purposes.
unescapeText :: ByteString -> Either UnicodeException Text

-- | Efficiently and correctly parse a JSON string. The string must be
--   encoded as UTF-8.
--   
--   It can be useful to think of parsing as occurring in two phases:
--   
--   
--   
- Identification of the textual boundaries of a JSON value. This is
--   always strict, so that an invalid JSON document can be rejected as
--   soon as possible.
--   
- Conversion of a JSON value to a Haskell value. This may be either
--   immediate (strict) or deferred (lazy); see below for details.
--   
--   
--   The question of whether to choose a lazy or strict parser is subtle,
--   but it can have significant performance implications, resulting in
--   changes in CPU use and memory footprint of 30% to 50%, or occasionally
--   more. Measure the performance of your application with each!
module Data.Aeson.Parser

-- | Parse any JSON value.
--   
--   The conversion of a parsed value to a Haskell value is deferred until
--   the Haskell value is needed. This may improve performance if only a
--   subset of the results of conversions are needed, but at a cost in
--   thunk allocation.
--   
--   This function is an alias for value. In aeson 0.8 and earlier,
--   it parsed only object or array types, in conformance with the
--   now-obsolete RFC 4627.
--   
--   
Warning
--   
--   If an object contains duplicate keys, only the first one will be kept.
--   For a more flexible alternative, see jsonWith.
json :: Parser Value

-- | Parse any JSON value. Synonym of json.
value :: Parser Value

-- | Parse a quoted JSON string.
jstring :: Parser Text

-- | Parse a JSON number.
scientific :: Parser Scientific

-- | Parse any JSON value.
--   
--   This parser is parameterized by a function to construct an
--   Object from a raw list of key-value pairs, where duplicates are
--   preserved. The pairs appear in reverse order from the source.
--   
--   
Examples
--   
--   json keeps only the first occurrence of each key, using
--   fromList.
--   
--   
--   json = jsonWith (Right . fromList)
--   
--   
--   jsonLast keeps the last occurrence of each key, using
--   fromListWith (const id).
--   
--   
--   jsonLast = jsonWith (Right . fromListWith (const id))
--   
--   
--   jsonAccum keeps wraps all values in arrays to keep duplicates,
--   using fromListAccum.
--   
--   
--   jsonAccum = jsonWith (Right . fromListAccum)
--   
--   
--   jsonNoDup fails if any object contains duplicate keys, using
--   parseListNoDup.
--   
--   
--   jsonNoDup = jsonWith parseListNoDup
--   
jsonWith :: ([(Key, Value)] -> Either String Object) -> Parser Value

-- | Variant of json which keeps only the last occurrence of every
--   key.
jsonLast :: Parser Value

-- | Variant of json wrapping all object mappings in Array to
--   preserve key-value pairs with the same keys.
jsonAccum :: Parser Value

-- | Variant of json which fails if any object contains duplicate
--   keys.
jsonNoDup :: Parser Value

-- | Parse any JSON value.
--   
--   This is a strict version of json which avoids building up
--   thunks during parsing; it performs all conversions immediately. Prefer
--   this version if most of the JSON data needs to be accessed.
--   
--   This function is an alias for value'. In aeson 0.8 and earlier,
--   it parsed only object or array types, in conformance with the
--   now-obsolete RFC 4627.
--   
--   
Warning
--   
--   If an object contains duplicate keys, only the first one will be kept.
--   For a more flexible alternative, see jsonWith'.
json' :: Parser Value

-- | Strict version of value. Synonym of json'.
value' :: Parser Value

-- | Strict version of jsonWith.
jsonWith' :: ([(Key, Value)] -> Either String Object) -> Parser Value

-- | Variant of json' which keeps only the last occurrence of every
--   key.
jsonLast' :: Parser Value

-- | Variant of json' wrapping all object mappings in Array
--   to preserve key-value pairs with the same keys.
jsonAccum' :: Parser Value

-- | Variant of json' which fails if any object contains duplicate
--   keys.
jsonNoDup' :: Parser Value
decodeWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
decodeStrictWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
eitherDecodeWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a
eitherDecodeStrictWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a
