{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-deprecations #-}
module Data.Aeson.Types.FromJSON
    (
    
      FromJSON(..)
    
    , FromJSON1(..)
    , parseJSON1
    , FromJSON2(..)
    , parseJSON2
    
    , GFromJSON(..)
    , FromArgs(..)
    , genericParseJSON
    , genericLiftParseJSON
    
    , FromJSONKey(..)
    , FromJSONKeyFunction(..)
    , fromJSONKeyCoerce
    , coerceFromJSONKeyFunction
    , mapFromJSONKeyFunction
    , GFromJSONKey()
    , genericFromJSONKey
    
    , listParser
    
    , withObject
    , withText
    , withArray
    , withScientific
    , withBool
    , withEmbeddedJSON
    
    , fromJSON
    , ifromJSON
    , typeMismatch
    , unexpected
    , parseField
    , parseFieldMaybe
    , parseFieldMaybe'
    , explicitParseField
    , explicitParseFieldMaybe
    , explicitParseFieldMaybe'
    , parseIndexedJSON
    
    , (.:)
    , (.:?)
    , (.:!)
    , (.!=)
    
    , parseOptionalFieldWith
    ) where
import Prelude.Compat
import Control.Applicative ((<|>), Const(..), liftA2)
import Control.Monad (zipWithM)
import Data.Aeson.Internal.Functions (mapKey, mapKeyO)
import Data.Aeson.Parser.Internal (eitherDecodeWith, jsonEOF)
import Data.Aeson.Types.Generic
import Data.Aeson.Types.Internal
import Data.Bits (unsafeShiftR)
import Data.Fixed (Fixed, HasResolution (resolution), Nano)
import Data.Functor.Compose (Compose(..))
import Data.Functor.Identity (Identity(..))
import Data.Functor.Product (Product(..))
import Data.Functor.Sum (Sum(..))
import Data.Functor.These (These1 (..))
import Data.Hashable (Hashable(..))
import Data.Int (Int16, Int32, Int64, Int8)
import Data.List.NonEmpty (NonEmpty(..))
import Data.Maybe (fromMaybe)
import Data.Proxy (Proxy(..))
import Data.Ratio ((%), Ratio)
import Data.Scientific (Scientific, base10Exponent)
import Data.Tagged (Tagged(..))
import Data.Text (Text, pack, unpack)
import Data.These (These (..))
import Data.Time (Day, DiffTime, LocalTime, NominalDiffTime, TimeOfDay, UTCTime, ZonedTime)
import Data.Time.Calendar.Compat (CalendarDiffDays (..), DayOfWeek (..))
import Data.Time.Calendar.Month.Compat (Month)
import Data.Time.Calendar.Quarter.Compat (Quarter, QuarterOfYear (..))
import Data.Time.LocalTime.Compat (CalendarDiffTime (..))
import Data.Time.Clock.System.Compat (SystemTime (..))
import Data.Time.Format.Compat (parseTimeM, defaultTimeLocale)
import Data.Traversable as Tr (sequence)
import Data.Tuple.Solo (Solo (..))
import Data.Type.Coercion (Coercion (..))
import Data.Vector (Vector)
import Data.Version (Version, parseVersion)
import Data.Void (Void)
import Data.Word (Word16, Word32, Word64, Word8)
import Foreign.Storable (Storable)
import Foreign.C.Types (CTime (..))
import GHC.Generics
#if !MIN_VERSION_base(4,17,0)
import GHC.Generics.Generically (Generically (..), Generically1 (..))
#endif
import Numeric.Natural (Natural)
import Text.ParserCombinators.ReadP (readP_to_S)
import Unsafe.Coerce (unsafeCoerce)
import qualified Data.Aeson.Parser.Time as Time
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.KeyMap as KM
import qualified Data.Attoparsec.ByteString.Char8 as A (endOfInput, parseOnly, scientific)
import qualified Data.ByteString.Lazy as L
import qualified Data.DList as DList
#if MIN_VERSION_dlist(1,0,0)
import qualified Data.DList.DNonEmpty as DNE
#endif
import qualified Data.Fix as F
import qualified Data.HashMap.Strict as H
import qualified Data.HashSet as HashSet
import qualified Data.IntMap as IntMap
import qualified Data.IntSet as IntSet
import qualified Data.Map as M
import qualified Data.Monoid as Monoid
import qualified Data.Scientific as Scientific
import qualified Data.Semigroup as Semigroup
import qualified Data.Sequence as Seq
import qualified Data.Set as Set
import qualified Data.Strict as S
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as LT
import qualified Data.Text.Short as ST
import qualified Data.Tree as Tree
import qualified Data.UUID.Types as UUID
import qualified Data.Vector as V
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Primitive as VP
import qualified Data.Vector.Storable as VS
import qualified Data.Vector.Unboxed as VU
import qualified GHC.Exts as Exts
import qualified Data.Primitive.Array as PM
import qualified Data.Primitive.SmallArray as PM
import qualified Data.Primitive.Types as PM
import qualified Data.Primitive.PrimArray as PM
import Data.Coerce (Coercible, coerce)
#if __GLASGOW_HASKELL__ < 804
import qualified Data.Type.Coercion
#endif
parseIndexedJSON :: (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON :: forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p Int
idx Value
value = Value -> Parser a
p Value
value Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
idx
parseIndexedJSONPair :: (Value -> Parser a) -> (Value -> Parser b) -> Int -> Value -> Parser (a, b)
parseIndexedJSONPair :: forall a b.
(Value -> Parser a)
-> (Value -> Parser b) -> Int -> Value -> Parser (a, b)
parseIndexedJSONPair Value -> Parser a
keyParser Value -> Parser b
valParser Int
idx Value
value = Value -> Parser (a, b)
p Value
value Parser (a, b) -> JSONPathElement -> Parser (a, b)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
idx
  where
    p :: Value -> Parser (a, b)
p = String -> (Array -> Parser (a, b)) -> Value -> Parser (a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(k, v)" ((Array -> Parser (a, b)) -> Value -> Parser (a, b))
-> (Array -> Parser (a, b)) -> Value -> Parser (a, b)
forall a b. (a -> b) -> a -> b
$ \Array
ab ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
ab
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2
             then (,) (a -> b -> (a, b)) -> Parser a -> Parser (b -> (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
keyParser Int
0 Array
ab
                      Parser (b -> (a, b)) -> Parser b -> Parser (a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
valParser Int
1 Array
ab
             else String -> Parser (a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b)) -> String -> Parser (a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++
                         Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a pair"
parseJSONElemAtIndex :: (Value -> Parser a) -> Int -> V.Vector Value -> Parser a
parseJSONElemAtIndex :: forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
p Int
idx Array
ary = Value -> Parser a
p (Array -> Int -> Value
forall a. Vector a -> Int -> a
V.unsafeIndex Array
ary Int
idx) Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
idx
parseRealFloat :: RealFloat a => String -> Value -> Parser a
parseRealFloat :: forall a. RealFloat a => String -> Value -> Parser a
parseRealFloat String
_    (Number Scientific
s)      = a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> Parser a) -> a -> Parser a
forall a b. (a -> b) -> a -> b
$ Scientific -> a
forall a. RealFloat a => Scientific -> a
Scientific.toRealFloat Scientific
s
parseRealFloat String
_    Value
Null            = a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a
0a -> a -> a
forall a. Fractional a => a -> a -> a
/a
0)
parseRealFloat String
_    (String Text
"-inf") = a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> a
forall a. Num a => a -> a
negate a
1a -> a -> a
forall a. Fractional a => a -> a -> a
/a
0)
parseRealFloat String
_    (String Text
"+inf") = a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a
1a -> a -> a
forall a. Fractional a => a -> a -> a
/a
0)
parseRealFloat String
name Value
v               = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (Value -> Parser a
forall a. Value -> Parser a
unexpected Value
v)
parseIntegralFromScientific :: forall a. Integral a => Scientific -> Parser a
parseIntegralFromScientific :: forall a. Integral a => Scientific -> Parser a
parseIntegralFromScientific Scientific
s =
    case Scientific -> Either Double a
forall r i. (RealFloat r, Integral i) => Scientific -> Either r i
Scientific.floatingOrInteger Scientific
s :: Either Double a of
        Right a
x -> a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x
        Left Double
_  -> String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"unexpected floating number " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Scientific -> String
forall a. Show a => a -> String
show Scientific
s
parseIntegral :: Integral a => String -> Value -> Parser a
parseIntegral :: forall a. Integral a => String -> Value -> Parser a
parseIntegral String
name =
    String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (Parser a -> Parser a) -> (Value -> Parser a) -> Value -> Parser a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> Parser a) -> Value -> Parser a
forall a. (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific' Scientific -> Parser a
forall a. Integral a => Scientific -> Parser a
parseIntegralFromScientific
parseBoundedIntegralFromScientific :: (Bounded a, Integral a) => Scientific -> Parser a
parseBoundedIntegralFromScientific :: forall a. (Bounded a, Integral a) => Scientific -> Parser a
parseBoundedIntegralFromScientific Scientific
s = Parser a -> (a -> Parser a) -> Maybe a -> Parser a
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
    (String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"value is either floating or will cause over or underflow " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Scientific -> String
forall a. Show a => a -> String
show Scientific
s)
    a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Scientific -> Maybe a
forall i. (Integral i, Bounded i) => Scientific -> Maybe i
Scientific.toBoundedInteger Scientific
s)
parseBoundedIntegral :: (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral :: forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
name =
    String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (Parser a -> Parser a) -> (Value -> Parser a) -> Value -> Parser a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> Parser a) -> Value -> Parser a
forall a. (Scientific -> Parser a) -> Value -> Parser a
withScientific' Scientific -> Parser a
forall a. (Bounded a, Integral a) => Scientific -> Parser a
parseBoundedIntegralFromScientific
parseScientificText :: Text -> Parser Scientific
parseScientificText :: Text -> Parser Scientific
parseScientificText
    = (String -> Parser Scientific)
-> (Scientific -> Parser Scientific)
-> Either String Scientific
-> Parser Scientific
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser Scientific
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail Scientific -> Parser Scientific
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Either String Scientific -> Parser Scientific)
-> (Text -> Either String Scientific) -> Text -> Parser Scientific
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Scientific -> ByteString -> Either String Scientific
forall a. Parser a -> ByteString -> Either String a
A.parseOnly (Parser Scientific
A.scientific Parser Scientific -> Parser ByteString () -> Parser Scientific
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
forall t. Chunk t => Parser t ()
A.endOfInput)
    (ByteString -> Either String Scientific)
-> (Text -> ByteString) -> Text -> Either String Scientific
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8
parseIntegralText :: Integral a => String -> Text -> Parser a
parseIntegralText :: forall a. Integral a => String -> Text -> Parser a
parseIntegralText String
name Text
t =
    String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (Parser a -> Parser a) -> Parser a -> Parser a
forall a b. (a -> b) -> a -> b
$
            Text -> Parser Scientific
parseScientificText Text
t
        Parser Scientific
-> (Scientific -> Parser Scientific) -> Parser Scientific
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Scientific -> Parser Scientific
rejectLargeExponent
        Parser Scientific -> (Scientific -> Parser a) -> Parser a
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Scientific -> Parser a
forall a. Integral a => Scientific -> Parser a
parseIntegralFromScientific
  where
    rejectLargeExponent :: Scientific -> Parser Scientific
    rejectLargeExponent :: Scientific -> Parser Scientific
rejectLargeExponent Scientific
s = (Scientific -> Parser Scientific) -> Value -> Parser Scientific
forall a. (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific' Scientific -> Parser Scientific
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Scientific -> Value
Number Scientific
s)
parseBoundedIntegralText :: (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText :: forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
name Text
t =
    String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (Parser a -> Parser a) -> Parser a -> Parser a
forall a b. (a -> b) -> a -> b
$
        Text -> Parser Scientific
parseScientificText Text
t Parser Scientific -> (Scientific -> Parser a) -> Parser a
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Scientific -> Parser a
forall a. (Bounded a, Integral a) => Scientific -> Parser a
parseBoundedIntegralFromScientific
parseOptionalFieldWith :: (Value -> Parser (Maybe a))
                       -> Object -> Key -> Parser (Maybe a)
parseOptionalFieldWith :: forall a.
(Value -> Parser (Maybe a)) -> Object -> Key -> Parser (Maybe a)
parseOptionalFieldWith Value -> Parser (Maybe a)
pj Object
obj Key
key =
    case Key -> Object -> Maybe Value
forall v. Key -> KeyMap v -> Maybe v
KM.lookup Key
key Object
obj of
     Maybe Value
Nothing -> Maybe a -> Parser (Maybe a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a
forall a. Maybe a
Nothing
     Just Value
v  -> Value -> Parser (Maybe a)
pj Value
v Parser (Maybe a) -> JSONPathElement -> Parser (Maybe a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
key
class GFromJSON arity f where
    
    
    
    gParseJSON :: Options -> FromArgs arity a -> Value -> Parser (f a)
data FromArgs arity a where
    NoFromArgs :: FromArgs Zero a
    From1Args  :: (Value -> Parser a) -> (Value -> Parser [a]) -> FromArgs One a
genericParseJSON :: (Generic a, GFromJSON Zero (Rep a))
                 => Options -> Value -> Parser a
genericParseJSON :: forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON Options
opts = (Rep a Any -> a) -> Parser (Rep a Any) -> Parser a
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Rep a Any -> a
forall a x. Generic a => Rep a x -> a
forall x. Rep a x -> a
to (Parser (Rep a Any) -> Parser a)
-> (Value -> Parser (Rep a Any)) -> Value -> Parser a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> FromArgs Zero Any -> Value -> Parser (Rep a Any)
forall a. Options -> FromArgs Zero a -> Value -> Parser (Rep a a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs Zero Any
forall a. FromArgs Zero a
NoFromArgs
genericLiftParseJSON :: (Generic1 f, GFromJSON One (Rep1 f))
                     => Options -> (Value -> Parser a) -> (Value -> Parser [a])
                     -> Value -> Parser (f a)
genericLiftParseJSON :: forall (f :: * -> *) a.
(Generic1 f, GFromJSON One (Rep1 f)) =>
Options
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (f a)
genericLiftParseJSON Options
opts Value -> Parser a
pj Value -> Parser [a]
pjl = (Rep1 f a -> f a) -> Parser (Rep1 f a) -> Parser (f a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Rep1 f a -> f a
forall a. Rep1 f a -> f a
forall k (f :: k -> *) (a :: k). Generic1 f => Rep1 f a -> f a
to1 (Parser (Rep1 f a) -> Parser (f a))
-> (Value -> Parser (Rep1 f a)) -> Value -> Parser (f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> FromArgs One a -> Value -> Parser (Rep1 f a)
forall a. Options -> FromArgs One a -> Value -> Parser (Rep1 f a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts ((Value -> Parser a) -> (Value -> Parser [a]) -> FromArgs One a
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromArgs One a
From1Args Value -> Parser a
pj Value -> Parser [a]
pjl)
class FromJSON a where
    parseJSON :: Value -> Parser a
    default parseJSON :: (Generic a, GFromJSON Zero (Rep a)) => Value -> Parser a
    parseJSON = Options -> Value -> Parser a
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON Options
defaultOptions
    parseJSONList :: Value -> Parser [a]
    parseJSONList = String -> (Array -> Parser [a]) -> Value -> Parser [a]
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"[]" ((Array -> Parser [a]) -> Value -> Parser [a])
-> (Array -> Parser [a]) -> Value -> Parser [a]
forall a b. (a -> b) -> a -> b
$ \Array
a ->
          (Int -> Value -> Parser a) -> [Int] -> [Value] -> Parser [a]
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> m c) -> [a] -> [b] -> m [c]
zipWithM ((Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON) [Int
0..]
        ([Value] -> Parser [a])
-> (Array -> [Value]) -> Array -> Parser [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList
        (Array -> Parser [a]) -> Array -> Parser [a]
forall a b. (a -> b) -> a -> b
$ Array
a
instance (Generic a, GFromJSON Zero (Rep a)) => FromJSON (Generically a) where
    parseJSON :: Value -> Parser (Generically a)
parseJSON = (Value -> Parser a) -> Value -> Parser (Generically a)
forall a b. Coercible a b => a -> b
coerce (Options -> Value -> Parser a
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON Options
defaultOptions :: Value -> Parser a)
class FromJSONKey a where
    
    fromJSONKey :: FromJSONKeyFunction a
    default fromJSONKey :: FromJSON a => FromJSONKeyFunction a
    fromJSONKey = (Value -> Parser a) -> FromJSONKeyFunction a
forall a. (Value -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyValue Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
    
    
    
    
    fromJSONKeyList :: FromJSONKeyFunction [a]
    default fromJSONKeyList :: FromJSON a => FromJSONKeyFunction [a]
    fromJSONKeyList = (Value -> Parser [a]) -> FromJSONKeyFunction [a]
forall a. (Value -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyValue Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
data FromJSONKeyFunction a where
    FromJSONKeyCoerce :: Coercible Text a => FromJSONKeyFunction a
      
    FromJSONKeyText :: !(Text -> a) -> FromJSONKeyFunction a
      
    FromJSONKeyTextParser :: !(Text -> Parser a) -> FromJSONKeyFunction a
      
    FromJSONKeyValue :: !(Value -> Parser a) -> FromJSONKeyFunction a
      
instance Functor FromJSONKeyFunction where
    fmap :: forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
fmap a -> b
h FromJSONKeyFunction a
FromJSONKeyCoerce         = (Text -> b) -> FromJSONKeyFunction b
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText (a -> b
h (a -> b) -> (Text -> a) -> Text -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> a
forall a b. Coercible a b => a -> b
coerce)
    fmap a -> b
h (FromJSONKeyText Text -> a
f)       = (Text -> b) -> FromJSONKeyFunction b
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText (a -> b
h (a -> b) -> (Text -> a) -> Text -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> a
f)
    fmap a -> b
h (FromJSONKeyTextParser Text -> Parser a
f) = (Text -> Parser b) -> FromJSONKeyFunction b
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((a -> b) -> Parser a -> Parser b
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
h (Parser a -> Parser b) -> (Text -> Parser a) -> Text -> Parser b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Parser a
f)
    fmap a -> b
h (FromJSONKeyValue Value -> Parser a
f)      = (Value -> Parser b) -> FromJSONKeyFunction b
forall a. (Value -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyValue ((a -> b) -> Parser a -> Parser b
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
h (Parser a -> Parser b) -> (Value -> Parser a) -> Value -> Parser b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
f)
fromJSONKeyCoerce ::
    Coercible Text a =>
    FromJSONKeyFunction a
fromJSONKeyCoerce :: forall a. Coercible Text a => FromJSONKeyFunction a
fromJSONKeyCoerce = FromJSONKeyFunction a
forall a. Coercible Text a => FromJSONKeyFunction a
FromJSONKeyCoerce
coerceFromJSONKeyFunction ::
    Coercible a b =>
    FromJSONKeyFunction a -> FromJSONKeyFunction b
coerceFromJSONKeyFunction :: forall a b.
Coercible a b =>
FromJSONKeyFunction a -> FromJSONKeyFunction b
coerceFromJSONKeyFunction = FromJSONKeyFunction a -> FromJSONKeyFunction b
forall a b. Coercible a b => a -> b
coerce
{-# RULES
  "FromJSONKeyCoerce: fmap coerce" forall x .
                                   fmap coerce x = coerceFromJSONKeyFunction x
  #-}
mapFromJSONKeyFunction :: (a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
mapFromJSONKeyFunction :: forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
mapFromJSONKeyFunction = (a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
genericFromJSONKey :: forall a. (Generic a, GFromJSONKey (Rep a))
             => JSONKeyOptions
             -> FromJSONKeyFunction a
genericFromJSONKey :: forall a.
(Generic a, GFromJSONKey (Rep a)) =>
JSONKeyOptions -> FromJSONKeyFunction a
genericFromJSONKey JSONKeyOptions
opts = (Text -> Parser a) -> FromJSONKeyFunction a
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser a) -> FromJSONKeyFunction a)
-> (Text -> Parser a) -> FromJSONKeyFunction a
forall a b. (a -> b) -> a -> b
$ \Text
t ->
    case (String -> String) -> Text -> Maybe (Rep a Any)
forall a. (String -> String) -> Text -> Maybe (Rep a a)
forall {k} (f :: k -> *) (a :: k).
SumFromString f =>
(String -> String) -> Text -> Maybe (f a)
parseSumFromString (JSONKeyOptions -> String -> String
keyModifier JSONKeyOptions
opts) Text
t of
        Maybe (Rep a Any)
Nothing -> String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$
            String
"invalid key " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
t String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", expected one of " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
forall a. Show a => a -> String
show [String]
cnames
        Just Rep a Any
k -> a -> Parser a
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Rep a Any -> a
forall a x. Generic a => Rep a x -> a
forall x. Rep a x -> a
to Rep a Any
k)
  where
    cnames :: [String]
cnames = Tagged2 (Rep a) [String] -> [String]
forall (s :: * -> *) b. Tagged2 s b -> b
unTagged2 ((String -> String) -> Tagged2 (Rep a) [String]
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a [t]
constructorTags (JSONKeyOptions -> String -> String
keyModifier JSONKeyOptions
opts) :: Tagged2 (Rep a) [String])
class    (ConstructorNames f, SumFromString f) => GFromJSONKey f where
instance (ConstructorNames f, SumFromString f) => GFromJSONKey f where
typeMismatch :: String 
                       
                       
             -> Value  
             -> Parser a
typeMismatch :: forall a. String -> Value -> Parser a
typeMismatch String
expected Value
actual =
    String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"expected " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
expected String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but encountered " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Value -> String
typeOf Value
actual
unexpected :: Value -> Parser a
unexpected :: forall a. Value -> Parser a
unexpected Value
actual = String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"unexpected " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Value -> String
typeOf Value
actual
typeOf :: Value -> String
typeOf :: Value -> String
typeOf Value
v = case Value
v of
    Object Object
_ -> String
"Object"
    Array Array
_  -> String
"Array"
    String Text
_ -> String
"String"
    Number Scientific
_ -> String
"Number"
    Bool Bool
_   -> String
"Boolean"
    Value
Null     -> String
"Null"
class FromJSON1 f where
    liftParseJSON :: (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
    default liftParseJSON :: (Generic1 f, GFromJSON One (Rep1 f))
                          => (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
    liftParseJSON = Options
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (f a)
forall (f :: * -> *) a.
(Generic1 f, GFromJSON One (Rep1 f)) =>
Options
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (f a)
genericLiftParseJSON Options
defaultOptions
    liftParseJSONList :: (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [f a]
    liftParseJSONList Value -> Parser a
f Value -> Parser [a]
g Value
v = (Value -> Parser (f a)) -> Value -> Parser [f a]
forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser ((Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
f Value -> Parser [a]
g) Value
v
instance (Generic1 f, GFromJSON One (Rep1 f)) => FromJSON1 (Generically1 f) where
    liftParseJSON :: forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (Generically1 f a)
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Generically1 f a)
liftParseJSON = ((Value -> Parser a)
 -> (Value -> Parser [a]) -> Value -> Parser (f a))
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (Generically1 f a)
forall a b. Coercible a b => a -> b
coerce (Options
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (f a)
forall (f :: * -> *) a.
(Generic1 f, GFromJSON One (Rep1 f)) =>
Options
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (f a)
genericLiftParseJSON Options
defaultOptions :: (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a))
parseJSON1 :: (FromJSON1 f, FromJSON a) => Value -> Parser (f a)
parseJSON1 :: forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1 = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
{-# INLINE parseJSON1 #-}
class FromJSON2 f where
    liftParseJSON2
        :: (Value -> Parser a)
        -> (Value -> Parser [a])
        -> (Value -> Parser b)
        -> (Value -> Parser [b])
        -> Value -> Parser (f a b)
    liftParseJSONList2
        :: (Value -> Parser a)
        -> (Value -> Parser [a])
        -> (Value -> Parser b)
        -> (Value -> Parser [b])
        -> Value -> Parser [f a b]
    liftParseJSONList2 Value -> Parser a
fa Value -> Parser [a]
ga Value -> Parser b
fb Value -> Parser [b]
gb = String -> (Array -> Parser [f a b]) -> Value -> Parser [f a b]
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"[]" ((Array -> Parser [f a b]) -> Value -> Parser [f a b])
-> (Array -> Parser [f a b]) -> Value -> Parser [f a b]
forall a b. (a -> b) -> a -> b
$ \Array
vals ->
        (Vector (f a b) -> [f a b])
-> Parser (Vector (f a b)) -> Parser [f a b]
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Vector (f a b) -> [f a b]
forall a. Vector a -> [a]
V.toList ((Value -> Parser (f a b)) -> Array -> Parser (Vector (f a b))
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Vector a -> m (Vector b)
V.mapM ((Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
fa Value -> Parser [a]
ga Value -> Parser b
fb Value -> Parser [b]
gb) Array
vals)
parseJSON2 :: (FromJSON2 f, FromJSON a, FromJSON b) => Value -> Parser (f a b)
parseJSON2 :: forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2 = (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [b]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
{-# INLINE parseJSON2 #-}
listParser :: (Value -> Parser a) -> Value -> Parser [a]
listParser :: forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser Value -> Parser a
f (Array Array
xs) = (Vector a -> [a]) -> Parser (Vector a) -> Parser [a]
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Vector a -> [a]
forall a. Vector a -> [a]
V.toList ((Value -> Parser a) -> Array -> Parser (Vector a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Vector a -> m (Vector b)
V.mapM Value -> Parser a
f Array
xs)
listParser Value -> Parser a
_ Value
v          = String -> Value -> Parser [a]
forall a. String -> Value -> Parser a
typeMismatch String
"Array" Value
v
{-# INLINE listParser #-}
instance FromJSON1 [] where
    liftParseJSON :: forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [a]
liftParseJSON Value -> Parser a
_ Value -> Parser [a]
p' = Value -> Parser [a]
p'
instance (FromJSON a) => FromJSON [a] where
    parseJSON :: Value -> Parser [a]
parseJSON = Value -> Parser [a]
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
prependContext :: String -> Parser a -> Parser a
prependContext :: forall a. String -> Parser a -> Parser a
prependContext String
name = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependFailure (String
"parsing " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" failed, ")
withObject :: String -> (Object -> Parser a) -> Value -> Parser a
withObject :: forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
_    Object -> Parser a
f (Object Object
obj) = Object -> Parser a
f Object
obj
withObject String
name Object -> Parser a
_ Value
v            = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Object" Value
v)
withText :: String -> (Text -> Parser a) -> Value -> Parser a
withText :: forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
_    Text -> Parser a
f (String Text
txt) = Text -> Parser a
f Text
txt
withText String
name Text -> Parser a
_ Value
v            = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"String" Value
v)
withArray :: String -> (Array -> Parser a) -> Value -> Parser a
withArray :: forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
_    Array -> Parser a
f (Array Array
arr) = Array -> Parser a
f Array
arr
withArray String
name Array -> Parser a
_ Value
v           = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Array" Value
v)
withScientific :: String -> (Scientific -> Parser a) -> Value -> Parser a
withScientific :: forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
withScientific String
_ Scientific -> Parser a
f (Number Scientific
scientific) = Scientific -> Parser a
f Scientific
scientific
withScientific String
name Scientific -> Parser a
_ Value
v = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Number" Value
v)
withScientific' :: (Scientific -> Parser a) -> Value -> Parser a
withScientific' :: forall a. (Scientific -> Parser a) -> Value -> Parser a
withScientific' Scientific -> Parser a
f Value
v = case Value
v of
    Number Scientific
n -> Scientific -> Parser a
f Scientific
n
    Value
_ -> String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Number" Value
v
withBoundedScientific :: String -> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific :: forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific String
name Scientific -> Parser a
f Value
v = (Parser a -> Parser a)
-> (Scientific -> Parser a) -> Value -> Parser a
forall a.
(Parser a -> Parser a)
-> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific_ (String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name) Scientific -> Parser a
f Value
v
withBoundedScientific' :: (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific' :: forall a. (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific' Scientific -> Parser a
f Value
v = (Parser a -> Parser a)
-> (Scientific -> Parser a) -> Value -> Parser a
forall a.
(Parser a -> Parser a)
-> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific_ Parser a -> Parser a
forall a. a -> a
id Scientific -> Parser a
f Value
v
withBoundedScientific_ :: (Parser a -> Parser a) -> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific_ :: forall a.
(Parser a -> Parser a)
-> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific_ Parser a -> Parser a
whenFail Scientific -> Parser a
f (Number Scientific
scientific) =
    if Int
exp10 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1024
    then Parser a -> Parser a
whenFail (String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
msg)
    else Scientific -> Parser a
f Scientific
scientific
  where
    exp10 :: Int
exp10 = Scientific -> Int
base10Exponent Scientific
scientific
    msg :: String
msg = String
"found a number with exponent " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
exp10 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but it must not be greater than 1024"
withBoundedScientific_ Parser a -> Parser a
whenFail Scientific -> Parser a
_ Value
v =
    Parser a -> Parser a
whenFail (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Number" Value
v)
withBool :: String -> (Bool -> Parser a) -> Value -> Parser a
withBool :: forall a. String -> (Bool -> Parser a) -> Value -> Parser a
withBool String
_    Bool -> Parser a
f (Bool Bool
arr) = Bool -> Parser a
f Bool
arr
withBool String
name Bool -> Parser a
_ Value
v          = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"Boolean" Value
v)
withEmbeddedJSON :: String -> (Value -> Parser a) -> Value -> Parser a
withEmbeddedJSON :: forall a. String -> (Value -> Parser a) -> Value -> Parser a
withEmbeddedJSON String
_ Value -> Parser a
innerParser (String Text
txt) =
    (String -> Parser a)
-> (Value -> Parser a) -> Either String Value -> Parser a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail Value -> Parser a
innerParser (Either String Value -> Parser a)
-> Either String Value -> Parser a
forall a b. (a -> b) -> a -> b
$ ByteString -> Either String Value
eitherDecode (ByteString -> ByteString
L.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
T.encodeUtf8 Text
txt)
    where
        eitherDecode :: ByteString -> Either String Value
eitherDecode = Either (JSONPath, String) Value -> Either String Value
forall {b}. Either (JSONPath, String) b -> Either String b
eitherFormatError (Either (JSONPath, String) Value -> Either String Value)
-> (ByteString -> Either (JSONPath, String) Value)
-> ByteString
-> Either String Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Value
-> (Value -> IResult Value)
-> ByteString
-> Either (JSONPath, String) Value
forall a.
Parser Value
-> (Value -> IResult a)
-> ByteString
-> Either (JSONPath, String) a
eitherDecodeWith Parser Value
jsonEOF Value -> IResult Value
forall a. FromJSON a => Value -> IResult a
ifromJSON
        eitherFormatError :: Either (JSONPath, String) b -> Either String b
eitherFormatError = ((JSONPath, String) -> Either String b)
-> (b -> Either String b)
-> Either (JSONPath, String) b
-> Either String b
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (String -> Either String b
forall a b. a -> Either a b
Left (String -> Either String b)
-> ((JSONPath, String) -> String)
-> (JSONPath, String)
-> Either String b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (JSONPath -> String -> String) -> (JSONPath, String) -> String
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry JSONPath -> String -> String
formatError) b -> Either String b
forall a b. b -> Either a b
Right
withEmbeddedJSON String
name Value -> Parser a
_ Value
v = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext String
name (String -> Value -> Parser a
forall a. String -> Value -> Parser a
typeMismatch String
"String" Value
v)
fromJSON :: (FromJSON a) => Value -> Result a
fromJSON :: forall a. FromJSON a => Value -> Result a
fromJSON = (Value -> Parser a) -> Value -> Result a
forall a b. (a -> Parser b) -> a -> Result b
parse Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
ifromJSON :: (FromJSON a) => Value -> IResult a
ifromJSON :: forall a. FromJSON a => Value -> IResult a
ifromJSON = (Value -> Parser a) -> Value -> IResult a
forall a b. (a -> Parser b) -> a -> IResult b
iparse Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
(.:) :: (FromJSON a) => Object -> Key -> Parser a
.: :: forall a. FromJSON a => Object -> Key -> Parser a
(.:) = (Value -> Parser a) -> Object -> Key -> Parser a
forall a. (Value -> Parser a) -> Object -> Key -> Parser a
explicitParseField Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
(.:?) :: (FromJSON a) => Object -> Key -> Parser (Maybe a)
.:? :: forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
(.:?) = (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
forall a. (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
(.:!) :: (FromJSON a) => Object -> Key -> Parser (Maybe a)
.:! :: forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
(.:!) = (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
forall a. (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe' Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
parseField :: (FromJSON a) => Object -> Key -> Parser a
parseField :: forall a. FromJSON a => Object -> Key -> Parser a
parseField = Object -> Key -> Parser a
forall a. FromJSON a => Object -> Key -> Parser a
(.:)
parseFieldMaybe :: (FromJSON a) => Object -> Key -> Parser (Maybe a)
parseFieldMaybe :: forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
parseFieldMaybe = Object -> Key -> Parser (Maybe a)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
(.:?)
parseFieldMaybe' :: (FromJSON a) => Object -> Key -> Parser (Maybe a)
parseFieldMaybe' :: forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
parseFieldMaybe' = Object -> Key -> Parser (Maybe a)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
(.:!)
explicitParseField :: (Value -> Parser a) -> Object -> Key -> Parser a
explicitParseField :: forall a. (Value -> Parser a) -> Object -> Key -> Parser a
explicitParseField Value -> Parser a
p Object
obj Key
key = case Key -> Object -> Maybe Value
forall v. Key -> KeyMap v -> Maybe v
KM.lookup Key
key Object
obj of
    Maybe Value
Nothing -> String -> Parser a
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"key " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Key -> String
forall a. Show a => a -> String
show Key
key String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" not found"
    Just Value
v  -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
key
explicitParseFieldMaybe :: (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe :: forall a. (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe Value -> Parser a
p Object
obj Key
key = case Key -> Object -> Maybe Value
forall v. Key -> KeyMap v -> Maybe v
KM.lookup Key
key Object
obj of
    Maybe Value
Nothing -> Maybe a -> Parser (Maybe a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a
forall a. Maybe a
Nothing
    Just Value
v  -> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p ((Value -> Parser a) -> Value -> Parser [a]
forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser Value -> Parser a
p) Value
v Parser (Maybe a) -> JSONPathElement -> Parser (Maybe a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
key 
explicitParseFieldMaybe' :: (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe' :: forall a. (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)
explicitParseFieldMaybe' Value -> Parser a
p Object
obj Key
key = case Key -> Object -> Maybe Value
forall v. Key -> KeyMap v -> Maybe v
KM.lookup Key
key Object
obj of
    Maybe Value
Nothing -> Maybe a -> Parser (Maybe a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a
forall a. Maybe a
Nothing
    Just Value
v  -> a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> Parser a -> Parser (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
key
(.!=) :: Parser (Maybe a) -> a -> Parser a
Parser (Maybe a)
pmval .!= :: forall a. Parser (Maybe a) -> a -> Parser a
.!= a
val = a -> Maybe a -> a
forall a. a -> Maybe a -> a
fromMaybe a
val (Maybe a -> a) -> Parser (Maybe a) -> Parser a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Maybe a)
pmval
instance GFromJSON arity V1 where
    
    gParseJSON :: forall a. Options -> FromArgs arity a -> Value -> Parser (V1 a)
gParseJSON Options
_ FromArgs arity a
_ Value
_ = String -> Parser (V1 a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Attempted to parse empty type"
    {-# INLINE gParseJSON #-}
instance {-# OVERLAPPABLE #-} (GFromJSON arity a) => GFromJSON arity (M1 i c a) where
    
    
    gParseJSON :: forall a.
Options -> FromArgs arity a -> Value -> Parser (M1 i c a a)
gParseJSON Options
opts FromArgs arity a
fargs = (a a -> M1 i c a a) -> Parser (a a) -> Parser (M1 i c a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> M1 i c a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (a a) -> Parser (M1 i c a a))
-> (Value -> Parser (a a)) -> Value -> Parser (M1 i c a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> FromArgs arity a -> Value -> Parser (a a)
forall a. Options -> FromArgs arity a -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs arity a
fargs
    {-# INLINE gParseJSON #-}
type TypeName = String
type ConName = String
contextType :: TypeName -> Parser a -> Parser a
contextType :: forall a. String -> Parser a -> Parser a
contextType = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext
contextTag :: Key -> [String] -> Parser a -> Parser a
contextTag :: forall a. Key -> [String] -> Parser a -> Parser a
contextTag Key
tagKey [String]
cnames = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependFailure
  (String
"expected Object with key \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Key -> String
Key.toString Key
tagKey String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\"" String -> String -> String
forall a. [a] -> [a] -> [a]
++
  String
" containing one of " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
forall a. Show a => a -> String
show [String]
cnames String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", ")
contextCons :: ConName -> TypeName -> Parser a -> Parser a
contextCons :: forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname = String -> Parser a -> Parser a
forall a. String -> Parser a -> Parser a
prependContext (String -> String -> String
showCons String
cname String
tname)
showCons :: ConName -> TypeName -> String
showCons :: String -> String -> String
showCons String
cname String
tname = String
tname String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"(" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
cname String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")"
instance (FromJSON a) => GFromJSON arity (K1 i a) where
    
    gParseJSON :: forall a. Options -> FromArgs arity a -> Value -> Parser (K1 i a a)
gParseJSON Options
_opts FromArgs arity a
_ = (a -> K1 i a a) -> Parser a -> Parser (K1 i a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> K1 i a a
forall k i c (p :: k). c -> K1 i c p
K1 (Parser a -> Parser (K1 i a a))
-> (Value -> Parser a) -> Value -> Parser (K1 i a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
    {-# INLINE gParseJSON #-}
instance GFromJSON One Par1 where
    
    
    gParseJSON :: forall a. Options -> FromArgs One a -> Value -> Parser (Par1 a)
gParseJSON Options
_opts (From1Args Value -> Parser a
pj Value -> Parser [a]
_) = (a -> Par1 a) -> Parser a -> Parser (Par1 a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Par1 a
forall p. p -> Par1 p
Par1 (Parser a -> Parser (Par1 a))
-> (Value -> Parser a) -> Value -> Parser (Par1 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
pj
    {-# INLINE gParseJSON #-}
instance (FromJSON1 f) => GFromJSON One (Rec1 f) where
    
    
    gParseJSON :: forall a. Options -> FromArgs One a -> Value -> Parser (Rec1 f a)
gParseJSON Options
_opts (From1Args Value -> Parser a
pj Value -> Parser [a]
pjl) = (f a -> Rec1 f a) -> Parser (f a) -> Parser (Rec1 f a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f a -> Rec1 f a
forall k (f :: k -> *) (p :: k). f p -> Rec1 f p
Rec1 (Parser (f a) -> Parser (Rec1 f a))
-> (Value -> Parser (f a)) -> Value -> Parser (Rec1 f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
pj Value -> Parser [a]
pjl
    {-# INLINE gParseJSON #-}
instance (FromJSON1 f, GFromJSON One g) => GFromJSON One (f :.: g) where
    
    
    
    gParseJSON :: forall a.
Options -> FromArgs One a -> Value -> Parser ((:.:) f g a)
gParseJSON Options
opts FromArgs One a
fargs =
        let gpj :: Value -> Parser (g a)
gpj = Options -> FromArgs One a -> Value -> Parser (g a)
forall a. Options -> FromArgs One a -> Value -> Parser (g a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs One a
fargs in
        (f (g a) -> (:.:) f g a)
-> Parser (f (g a)) -> Parser ((:.:) f g a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f (g a) -> (:.:) f g a
forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1).
f (g p) -> (:.:) f g p
Comp1 (Parser (f (g a)) -> Parser ((:.:) f g a))
-> (Value -> Parser (f (g a))) -> Value -> Parser ((:.:) f g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser (g a))
-> (Value -> Parser [g a]) -> Value -> Parser (f (g a))
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser (g a)
gpj ((Value -> Parser (g a)) -> Value -> Parser [g a]
forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser Value -> Parser (g a)
gpj)
    {-# INLINE gParseJSON #-}
instance (GFromJSON' arity a, Datatype d) => GFromJSON arity (D1 d a) where
    
    
    gParseJSON :: forall a. Options -> FromArgs arity a -> Value -> Parser (D1 d a a)
gParseJSON Options
opts FromArgs arity a
fargs = (a a -> D1 d a a) -> Parser (a a) -> Parser (D1 d a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> D1 d a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (a a) -> Parser (D1 d a a))
-> (Value -> Parser (a a)) -> Value -> Parser (D1 d a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (Options :* FromArgs arity a)) -> Value -> Parser (a a)
forall a.
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
GFromJSON' arity f =>
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
gParseJSON' (String
tname String
-> (Options :* FromArgs arity a)
-> String :* (Options :* FromArgs arity a)
forall a b. a -> b -> a :* b
:* Options
opts Options -> FromArgs arity a -> Options :* FromArgs arity a
forall a b. a -> b -> a :* b
:* FromArgs arity a
fargs)
      where
        tname :: String
tname = M1 Any d Any Any -> String
forall {k} (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t d f a -> String
moduleName M1 Any d Any Any
proxy String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"." String -> String -> String
forall a. [a] -> [a] -> [a]
++ M1 Any d Any Any -> String
forall {k} (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t d f a -> String
datatypeName M1 Any d Any Any
proxy
        proxy :: M1 Any d Any Any
proxy = M1 _i d _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i d _f _p
forall a. HasCallStack => a
undefined :: M1 _i d _f _p
    {-# INLINE gParseJSON #-}
class GFromJSON' arity f where
    gParseJSON' :: TypeName :* Options :* FromArgs arity a
                -> Value
                -> Parser (f a)
instance GFromJSON' arity V1 where
    gParseJSON' :: forall a.
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (V1 a)
gParseJSON' String :* (Options :* FromArgs arity a)
_ Value
_ = String -> Parser (V1 a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Attempted to parse empty type"
    {-# INLINE gParseJSON' #-}
instance ( ConsFromJSON arity a
         , AllNullary         (C1 c a) allNullary
         , ParseSum     arity (C1 c a) allNullary
         , Constructor c
         ) => GFromJSON' arity (C1 c a) where
    
    
    gParseJSON' :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Parser (C1 c a a)
gParseJSON' p :: String :* (Options :* FromArgs arity a)
p@(String
_ :* Options
opts :* FromArgs arity a
_)
        | Options -> Bool
tagSingleConstructors Options
opts
            = (Tagged allNullary (Parser (C1 c a p)) -> Parser (C1 c a p)
forall {p}.
Tagged allNullary (Parser (C1 c a p)) -> Parser (C1 c a p)
forall {k} (s :: k) b. Tagged s b -> b
unTagged :: Tagged allNullary (Parser (C1 c a p)) -> Parser (C1 c a p))
            (Tagged allNullary (Parser (C1 c a a)) -> Parser (C1 c a a))
-> (Value -> Tagged allNullary (Parser (C1 c a a)))
-> Value
-> Parser (C1 c a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser (C1 c a a))
forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser (M1 C c a a))
forall {k} arity (f :: * -> *) (allNullary :: k) a.
ParseSum arity f allNullary =>
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser (f a))
parseSum String :* (Options :* FromArgs arity a)
p
        | Bool
otherwise = (a a -> C1 c a a) -> Parser (a a) -> Parser (C1 c a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> C1 c a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (a a) -> Parser (C1 c a a))
-> (Value -> Parser (a a)) -> Value -> Parser (C1 c a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall arity (f :: * -> *) a.
ConsFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
consParseJSON (String
cname String
-> (String :* (Options :* FromArgs arity a))
-> String :* (String :* (Options :* FromArgs arity a))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity a)
p)
      where
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
    {-# INLINE gParseJSON' #-}
instance ( AllNullary          (a :+: b) allNullary
         , ParseSum      arity (a :+: b) allNullary
         ) => GFromJSON' arity (a :+: b) where
    
    
    
    gParseJSON' :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Parser ((:+:) a b a)
gParseJSON' String :* (Options :* FromArgs arity a)
p =
        (Tagged allNullary (Parser ((:+:) a b _d)) -> Parser ((:+:) a b _d)
forall {_d}.
Tagged allNullary (Parser ((:+:) a b _d)) -> Parser ((:+:) a b _d)
forall {k} (s :: k) b. Tagged s b -> b
unTagged :: Tagged allNullary (Parser ((a :+: b) _d)) ->
                                        Parser ((a :+: b) _d))
                   (Tagged allNullary (Parser ((:+:) a b a)) -> Parser ((:+:) a b a))
-> (Value -> Tagged allNullary (Parser ((:+:) a b a)))
-> Value
-> Parser ((:+:) a b a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser ((:+:) a b a))
forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser ((:+:) a b a))
forall {k} arity (f :: * -> *) (allNullary :: k) a.
ParseSum arity f allNullary =>
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged allNullary (Parser (f a))
parseSum String :* (Options :* FromArgs arity a)
p
    {-# INLINE gParseJSON' #-}
class ParseSum arity f allNullary where
    parseSum :: TypeName :* Options :* FromArgs arity a
             -> Value
             -> Tagged allNullary (Parser (f a))
instance ( ConstructorNames        f
         , SumFromString           f
         , FromPair          arity f
         , FromTaggedObject  arity f
         , FromUntaggedValue arity f
         ) => ParseSum       arity f True where
    parseSum :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged True (Parser (f a))
parseSum p :: String :* (Options :* FromArgs arity a)
p@(String
tname :* Options
opts :* FromArgs arity a
_)
        | Options -> Bool
allNullaryToStringTag Options
opts = Parser (f a) -> Tagged True (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged True (Parser (f a)))
-> (Value -> Parser (f a)) -> Value -> Tagged True (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Options -> Value -> Parser (f a)
forall (f :: * -> *) a.
(SumFromString f, ConstructorNames f) =>
String -> Options -> Value -> Parser (f a)
parseAllNullarySum String
tname Options
opts
        | Bool
otherwise                  = Parser (f a) -> Tagged True (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged True (Parser (f a)))
-> (Value -> Parser (f a)) -> Value -> Tagged True (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
forall (f :: * -> *) c arity.
(FromPair arity f, FromTaggedObject arity f,
 FromUntaggedValue arity f, ConstructorNames f) =>
(String :* (Options :* FromArgs arity c)) -> Value -> Parser (f c)
parseNonAllNullarySum String :* (Options :* FromArgs arity a)
p
    {-# INLINE parseSum #-}
instance ( ConstructorNames        f
         , FromPair          arity f
         , FromTaggedObject  arity f
         , FromUntaggedValue arity f
         ) => ParseSum       arity f False where
    parseSum :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Tagged False (Parser (f a))
parseSum String :* (Options :* FromArgs arity a)
p = Parser (f a) -> Tagged False (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged False (Parser (f a)))
-> (Value -> Parser (f a)) -> Value -> Tagged False (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
forall (f :: * -> *) c arity.
(FromPair arity f, FromTaggedObject arity f,
 FromUntaggedValue arity f, ConstructorNames f) =>
(String :* (Options :* FromArgs arity c)) -> Value -> Parser (f c)
parseNonAllNullarySum String :* (Options :* FromArgs arity a)
p
    {-# INLINE parseSum #-}
parseAllNullarySum :: (SumFromString f, ConstructorNames f)
                   => TypeName -> Options -> Value -> Parser (f a)
parseAllNullarySum :: forall (f :: * -> *) a.
(SumFromString f, ConstructorNames f) =>
String -> Options -> Value -> Parser (f a)
parseAllNullarySum String
tname Options
opts =
    String -> (Text -> Parser (f a)) -> Value -> Parser (f a)
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
tname ((Text -> Parser (f a)) -> Value -> Parser (f a))
-> (Text -> Parser (f a)) -> Value -> Parser (f a)
forall a b. (a -> b) -> a -> b
$ \Text
tag ->
        Parser (f a)
-> (f a -> Parser (f a)) -> Maybe (f a) -> Parser (f a)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Text -> Parser (f a)
badTag Text
tag) f a -> Parser (f a)
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (f a) -> Parser (f a)) -> Maybe (f a) -> Parser (f a)
forall a b. (a -> b) -> a -> b
$
            (String -> String) -> Text -> Maybe (f a)
forall a. (String -> String) -> Text -> Maybe (f a)
forall {k} (f :: k -> *) (a :: k).
SumFromString f =>
(String -> String) -> Text -> Maybe (f a)
parseSumFromString String -> String
modifier Text
tag
  where
    badTag :: Text -> Parser (f a)
badTag Text
tag = String
-> (String -> String) -> ([String] -> String) -> Parser (f a)
forall (f :: * -> *) a t.
ConstructorNames f =>
String -> (String -> t) -> ([t] -> String) -> Parser (f a)
failWithCTags String
tname String -> String
modifier (([String] -> String) -> Parser (f a))
-> ([String] -> String) -> Parser (f a)
forall a b. (a -> b) -> a -> b
$ \[String]
cnames ->
        String
"expected one of the tags " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
forall a. Show a => a -> String
show [String]
cnames String -> String -> String
forall a. [a] -> [a] -> [a]
++
        String
", but found tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
tag
    modifier :: String -> String
modifier = Options -> String -> String
constructorTagModifier Options
opts
failWithCTags
  :: forall f a t. ConstructorNames f
  => TypeName -> (String -> t) -> ([t] -> String) -> Parser (f a)
failWithCTags :: forall (f :: * -> *) a t.
ConstructorNames f =>
String -> (String -> t) -> ([t] -> String) -> Parser (f a)
failWithCTags String
tname String -> t
modifier [t] -> String
f =
    String -> Parser (f a) -> Parser (f a)
forall a. String -> Parser a -> Parser a
contextType String
tname (Parser (f a) -> Parser (f a))
-> (String -> Parser (f a)) -> String -> Parser (f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Parser (f a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (f a)) -> String -> Parser (f a)
forall a b. (a -> b) -> a -> b
$ [t] -> String
f [t]
cnames
  where
    cnames :: [t]
cnames = Tagged2 f [t] -> [t]
forall (s :: * -> *) b. Tagged2 s b -> b
unTagged2 ((String -> t) -> Tagged2 f [t]
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a [t]
constructorTags String -> t
modifier :: Tagged2 f [t])
class SumFromString f where
    parseSumFromString :: (String -> String) -> Text -> Maybe (f a)
instance (SumFromString a, SumFromString b) => SumFromString (a :+: b) where
    parseSumFromString :: forall (a :: k). (String -> String) -> Text -> Maybe ((:+:) a b a)
parseSumFromString String -> String
opts Text
key = (a a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (a a -> (:+:) a b a) -> Maybe (a a) -> Maybe ((:+:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> String) -> Text -> Maybe (a a)
forall (a :: k). (String -> String) -> Text -> Maybe (a a)
forall {k} (f :: k -> *) (a :: k).
SumFromString f =>
(String -> String) -> Text -> Maybe (f a)
parseSumFromString String -> String
opts Text
key) Maybe ((:+:) a b a) -> Maybe ((:+:) a b a) -> Maybe ((:+:) a b a)
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
                                  (b a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (b a -> (:+:) a b a) -> Maybe (b a) -> Maybe ((:+:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> String) -> Text -> Maybe (b a)
forall (a :: k). (String -> String) -> Text -> Maybe (b a)
forall {k} (f :: k -> *) (a :: k).
SumFromString f =>
(String -> String) -> Text -> Maybe (f a)
parseSumFromString String -> String
opts Text
key)
    {-# INLINE parseSumFromString #-}
instance (Constructor c) => SumFromString (C1 c U1) where
    parseSumFromString :: forall (a :: k). (String -> String) -> Text -> Maybe (C1 c U1 a)
parseSumFromString String -> String
modifier Text
key
        | Text
key Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
name = C1 c U1 a -> Maybe (C1 c U1 a)
forall a. a -> Maybe a
Just (C1 c U1 a -> Maybe (C1 c U1 a)) -> C1 c U1 a -> Maybe (C1 c U1 a)
forall a b. (a -> b) -> a -> b
$ U1 a -> C1 c U1 a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 U1 a
forall k (p :: k). U1 p
U1
        | Bool
otherwise   = Maybe (C1 c U1 a)
forall a. Maybe a
Nothing
      where
        name :: Text
name = String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String -> String
modifier (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
    {-# INLINE parseSumFromString #-}
instance SumFromString a => SumFromString (D1 d a) where
    parseSumFromString :: forall (a :: k). (String -> String) -> Text -> Maybe (D1 d a a)
parseSumFromString String -> String
modifier Text
key = a a -> M1 D d a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (a a -> M1 D d a a) -> Maybe (a a) -> Maybe (M1 D d a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> String) -> Text -> Maybe (a a)
forall (a :: k). (String -> String) -> Text -> Maybe (a a)
forall {k} (f :: k -> *) (a :: k).
SumFromString f =>
(String -> String) -> Text -> Maybe (f a)
parseSumFromString String -> String
modifier Text
key
    {-# INLINE parseSumFromString #-}
constructorTags :: ConstructorNames a => (String -> t) -> Tagged2 a [t]
constructorTags :: forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a [t]
constructorTags String -> t
modifier =
    (DList t -> [t]) -> Tagged2 a (DList t) -> Tagged2 a [t]
forall a b. (a -> b) -> Tagged2 a a -> Tagged2 a b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap DList t -> [t]
forall a. DList a -> [a]
DList.toList ((String -> t) -> Tagged2 a (DList t)
forall t. (String -> t) -> Tagged2 a (DList t)
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a (DList t)
constructorNames' String -> t
modifier)
class ConstructorNames a where
    constructorNames' :: (String -> t) -> Tagged2 a (DList.DList t)
instance (ConstructorNames a, ConstructorNames b) => ConstructorNames (a :+: b) where
    constructorNames' :: forall t. (String -> t) -> Tagged2 (a :+: b) (DList t)
constructorNames' = (Tagged2 a (DList t)
 -> Tagged2 b (DList t) -> Tagged2 (a :+: b) (DList t))
-> ((String -> t) -> Tagged2 a (DList t))
-> ((String -> t) -> Tagged2 b (DList t))
-> (String -> t)
-> Tagged2 (a :+: b) (DList t)
forall a b c.
(a -> b -> c)
-> ((String -> t) -> a)
-> ((String -> t) -> b)
-> (String -> t)
-> c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Tagged2 a (DList t)
-> Tagged2 b (DList t) -> Tagged2 (a :+: b) (DList t)
forall t.
Tagged2 a (DList t)
-> Tagged2 b (DList t) -> Tagged2 (a :+: b) (DList t)
append (String -> t) -> Tagged2 a (DList t)
forall t. (String -> t) -> Tagged2 a (DList t)
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a (DList t)
constructorNames' (String -> t) -> Tagged2 b (DList t)
forall t. (String -> t) -> Tagged2 b (DList t)
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a (DList t)
constructorNames'
      where
        append
          :: Tagged2 a (DList.DList t)
          -> Tagged2 b (DList.DList t)
          -> Tagged2 (a :+: b) (DList.DList t)
        append :: forall t.
Tagged2 a (DList t)
-> Tagged2 b (DList t) -> Tagged2 (a :+: b) (DList t)
append (Tagged2 DList t
xs) (Tagged2 DList t
ys) = DList t -> Tagged2 (a :+: b) (DList t)
forall (s :: * -> *) b. b -> Tagged2 s b
Tagged2 (DList t -> DList t -> DList t
forall a. DList a -> DList a -> DList a
DList.append DList t
xs DList t
ys)
    {-# INLINE constructorNames' #-}
instance Constructor c => ConstructorNames (C1 c a) where
    constructorNames' :: forall t. (String -> t) -> Tagged2 (C1 c a) (DList t)
constructorNames' String -> t
f = DList t -> Tagged2 (C1 c a) (DList t)
forall (s :: * -> *) b. b -> Tagged2 s b
Tagged2 (t -> DList t
forall a. a -> DList a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> t
f String
cname))
      where
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
    {-# INLINE constructorNames' #-}
instance ConstructorNames a => ConstructorNames (D1 d a) where
    constructorNames' :: forall t. (String -> t) -> Tagged2 (D1 d a) (DList t)
constructorNames' = Tagged2 a (DList t) -> Tagged2 (D1 d a) (DList t)
forall u. Tagged2 a u -> Tagged2 (D1 d a) u
retag (Tagged2 a (DList t) -> Tagged2 (D1 d a) (DList t))
-> ((String -> t) -> Tagged2 a (DList t))
-> (String -> t)
-> Tagged2 (D1 d a) (DList t)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> t) -> Tagged2 a (DList t)
forall t. (String -> t) -> Tagged2 a (DList t)
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a (DList t)
constructorNames'
      where
        retag :: Tagged2 a u -> Tagged2 (D1 d a) u
        retag :: forall u. Tagged2 a u -> Tagged2 (D1 d a) u
retag (Tagged2 u
x) = u -> Tagged2 (D1 d a) u
forall (s :: * -> *) b. b -> Tagged2 s b
Tagged2 u
x
    {-# INLINE constructorNames' #-}
parseNonAllNullarySum :: forall f c arity.
                         ( FromPair          arity f
                         , FromTaggedObject  arity f
                         , FromUntaggedValue arity f
                         , ConstructorNames        f
                         ) => TypeName :* Options :* FromArgs arity c
                           -> Value -> Parser (f c)
parseNonAllNullarySum :: forall (f :: * -> *) c arity.
(FromPair arity f, FromTaggedObject arity f,
 FromUntaggedValue arity f, ConstructorNames f) =>
(String :* (Options :* FromArgs arity c)) -> Value -> Parser (f c)
parseNonAllNullarySum p :: String :* (Options :* FromArgs arity c)
p@(String
tname :* Options
opts :* FromArgs arity c
_) =
    case Options -> SumEncoding
sumEncoding Options
opts of
      TaggedObject{String
tagFieldName :: String
contentsFieldName :: String
tagFieldName :: SumEncoding -> String
contentsFieldName :: SumEncoding -> String
..} ->
          String -> (Object -> Parser (f c)) -> Value -> Parser (f c)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
tname ((Object -> Parser (f c)) -> Value -> Parser (f c))
-> (Object -> Parser (f c)) -> Value -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \Object
obj -> do
              Text
tag <- String -> Parser Text -> Parser Text
forall a. String -> Parser a -> Parser a
contextType String
tname (Parser Text -> Parser Text)
-> (Parser Text -> Parser Text) -> Parser Text -> Parser Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> [String] -> Parser Text -> Parser Text
forall a. Key -> [String] -> Parser a -> Parser a
contextTag Key
tagKey [String]
cnames_ (Parser Text -> Parser Text) -> Parser Text -> Parser Text
forall a b. (a -> b) -> a -> b
$ Object
obj Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
tagKey
              Parser (f c) -> Maybe (Parser (f c)) -> Parser (f c)
forall a. a -> Maybe a -> a
fromMaybe (Text -> Parser (f c)
badTag Text
tag Parser (f c) -> JSONPathElement -> Parser (f c)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
tagKey) (Maybe (Parser (f c)) -> Parser (f c))
-> Maybe (Parser (f c)) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                  (Text :* (String :* (String :* (Options :* FromArgs arity c))))
-> Object -> Maybe (Parser (f c))
forall a.
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (f a))
forall arity (f :: * -> *) a.
FromTaggedObject arity f =>
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (f a))
parseFromTaggedObject (Text
tag Text
-> (String :* (String :* (Options :* FromArgs arity c)))
-> Text :* (String :* (String :* (Options :* FromArgs arity c)))
forall a b. a -> b -> a :* b
:* String
contentsFieldName String
-> (String :* (Options :* FromArgs arity c))
-> String :* (String :* (Options :* FromArgs arity c))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity c)
p) Object
obj
        where
          tagKey :: Key
tagKey = String -> Key
Key.fromString String
tagFieldName
          badTag :: Text -> Parser (f c)
badTag Text
tag = ([String] -> String) -> Parser (f c)
failWith_ (([String] -> String) -> Parser (f c))
-> ([String] -> String) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \[String]
cnames ->
              String
"expected tag field to be one of " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
forall a. Show a => a -> String
show [String]
cnames String -> String -> String
forall a. [a] -> [a] -> [a]
++
              String
", but found tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
tag
          cnames_ :: [String]
cnames_ = Tagged2 f [String] -> [String]
forall (s :: * -> *) b. Tagged2 s b -> b
unTagged2 ((String -> String) -> Tagged2 f [String]
forall (a :: * -> *) t.
ConstructorNames a =>
(String -> t) -> Tagged2 a [t]
constructorTags (Options -> String -> String
constructorTagModifier Options
opts) :: Tagged2 f [String])
      SumEncoding
ObjectWithSingleField ->
          String -> (Object -> Parser (f c)) -> Value -> Parser (f c)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
tname ((Object -> Parser (f c)) -> Value -> Parser (f c))
-> (Object -> Parser (f c)) -> Value -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \Object
obj -> case Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList Object
obj of
              [(Key
tag, Value
v)] -> Parser (f c)
-> (Parser (f c) -> Parser (f c))
-> Maybe (Parser (f c))
-> Parser (f c)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Key -> Parser (f c)
badTag Key
tag) (Parser (f c) -> JSONPathElement -> Parser (f c)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
tag) (Maybe (Parser (f c)) -> Parser (f c))
-> Maybe (Parser (f c)) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                  (Key :* (String :* (Options :* FromArgs arity c)))
-> Value -> Maybe (Parser (f c))
forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
forall arity (f :: * -> *) a.
FromPair arity f =>
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
parsePair (Key
tag Key
-> (String :* (Options :* FromArgs arity c))
-> Key :* (String :* (Options :* FromArgs arity c))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity c)
p) Value
v
              [(Key, Value)]
_ -> String -> Parser (f c) -> Parser (f c)
forall a. String -> Parser a -> Parser a
contextType String
tname (Parser (f c) -> Parser (f c))
-> (String -> Parser (f c)) -> String -> Parser (f c)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Parser (f c)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (f c)) -> String -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                  String
"expected an Object with a single pair, but found " String -> String -> String
forall a. [a] -> [a] -> [a]
++
                  Int -> String
forall a. Show a => a -> String
show (Object -> Int
forall v. KeyMap v -> Int
KM.size Object
obj) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" pairs"
        where
          badTag :: Key -> Parser (f c)
badTag Key
tag = ([String] -> String) -> Parser (f c)
failWith_ (([String] -> String) -> Parser (f c))
-> ([String] -> String) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \[String]
cnames ->
              String
"expected an Object with a single pair where the tag is one of " String -> String -> String
forall a. [a] -> [a] -> [a]
++
              [String] -> String
forall a. Show a => a -> String
show [String]
cnames String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but found tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Key -> String
forall a. Show a => a -> String
show Key
tag
      SumEncoding
TwoElemArray ->
          String -> (Array -> Parser (f c)) -> Value -> Parser (f c)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
tname ((Array -> Parser (f c)) -> Value -> Parser (f c))
-> (Array -> Parser (f c)) -> Value -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \Array
arr -> case Array -> Int
forall a. Vector a -> Int
V.length Array
arr of
              Int
2 | String Text
tag <- Array -> Int -> Value
forall a. Vector a -> Int -> a
V.unsafeIndex Array
arr Int
0 ->
                  Parser (f c)
-> (Parser (f c) -> Parser (f c))
-> Maybe (Parser (f c))
-> Parser (f c)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Text -> Parser (f c)
badTag Text
tag Parser (f c) -> JSONPathElement -> Parser (f c)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
0) (Parser (f c) -> JSONPathElement -> Parser (f c)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
1) (Maybe (Parser (f c)) -> Parser (f c))
-> Maybe (Parser (f c)) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                      (Key :* (String :* (Options :* FromArgs arity c)))
-> Value -> Maybe (Parser (f c))
forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
forall arity (f :: * -> *) a.
FromPair arity f =>
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
parsePair (Text -> Key
Key.fromText Text
tag Key
-> (String :* (Options :* FromArgs arity c))
-> Key :* (String :* (Options :* FromArgs arity c))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity c)
p) (Array -> Int -> Value
forall a. Vector a -> Int -> a
V.unsafeIndex Array
arr Int
1)
                | Bool
otherwise ->
                  String -> Parser (f c) -> Parser (f c)
forall a. String -> Parser a -> Parser a
contextType String
tname (Parser (f c) -> Parser (f c)) -> Parser (f c) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                      String -> Parser (f c)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"tag element is not a String" Parser (f c) -> JSONPathElement -> Parser (f c)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
0
              Int
len -> String -> Parser (f c) -> Parser (f c)
forall a. String -> Parser a -> Parser a
contextType String
tname (Parser (f c) -> Parser (f c))
-> (String -> Parser (f c)) -> String -> Parser (f c)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Parser (f c)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (f c)) -> String -> Parser (f c)
forall a b. (a -> b) -> a -> b
$
                  String
"expected a 2-element Array, but encountered an Array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++
                  Int -> String
forall a. Show a => a -> String
show Int
len
        where
          badTag :: Text -> Parser (f c)
badTag Text
tag = ([String] -> String) -> Parser (f c)
failWith_ (([String] -> String) -> Parser (f c))
-> ([String] -> String) -> Parser (f c)
forall a b. (a -> b) -> a -> b
$ \[String]
cnames ->
              String
"expected tag of the 2-element Array to be one of " String -> String -> String
forall a. [a] -> [a] -> [a]
++
              [String] -> String
forall a. Show a => a -> String
show [String]
cnames String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but found tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
tag
      SumEncoding
UntaggedValue -> (String :* (Options :* FromArgs arity c)) -> Value -> Parser (f c)
forall a.
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
forall arity (f :: * -> *) a.
FromUntaggedValue arity f =>
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
parseUntaggedValue String :* (Options :* FromArgs arity c)
p
  where
    failWith_ :: ([String] -> String) -> Parser (f c)
failWith_ = String
-> (String -> String) -> ([String] -> String) -> Parser (f c)
forall (f :: * -> *) a t.
ConstructorNames f =>
String -> (String -> t) -> ([t] -> String) -> Parser (f a)
failWithCTags String
tname (Options -> String -> String
constructorTagModifier Options
opts)
class FromTaggedObject arity f where
    
    
    parseFromTaggedObject
        :: Text :* String :* TypeName :* Options :* FromArgs arity a
        -> Object
        -> Maybe (Parser (f a))
instance ( FromTaggedObject arity a, FromTaggedObject arity b) =>
    FromTaggedObject arity (a :+: b) where
        parseFromTaggedObject :: forall a.
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser ((:+:) a b a))
parseFromTaggedObject Text :* (String :* (String :* (Options :* FromArgs arity a)))
p Object
obj =
            ((a a -> (:+:) a b a) -> Parser (a a) -> Parser ((:+:) a b a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (Parser (a a) -> Parser ((:+:) a b a))
-> Maybe (Parser (a a)) -> Maybe (Parser ((:+:) a b a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (a a))
forall a.
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (a a))
forall arity (f :: * -> *) a.
FromTaggedObject arity f =>
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (f a))
parseFromTaggedObject Text :* (String :* (String :* (Options :* FromArgs arity a)))
p Object
obj) Maybe (Parser ((:+:) a b a))
-> Maybe (Parser ((:+:) a b a)) -> Maybe (Parser ((:+:) a b a))
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
            ((b a -> (:+:) a b a) -> Parser (b a) -> Parser ((:+:) a b a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap b a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (Parser (b a) -> Parser ((:+:) a b a))
-> Maybe (Parser (b a)) -> Maybe (Parser ((:+:) a b a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (b a))
forall a.
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (b a))
forall arity (f :: * -> *) a.
FromTaggedObject arity f =>
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (f a))
parseFromTaggedObject Text :* (String :* (String :* (Options :* FromArgs arity a)))
p Object
obj)
        {-# INLINE parseFromTaggedObject #-}
instance ( IsRecord                f isRecord
         , FromTaggedObject' arity f isRecord
         , Constructor c
         ) => FromTaggedObject arity (C1 c f) where
    parseFromTaggedObject :: forall a.
(Text :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Maybe (Parser (C1 c f a))
parseFromTaggedObject (Text
tag :* String
contentsFieldName :* p :: String :* (Options :* FromArgs arity a)
p@(String
_ :* Options
opts :* FromArgs arity a
_))
        | Text
tag Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
tag'
        = Parser (C1 c f a) -> Maybe (Parser (C1 c f a))
forall a. a -> Maybe a
Just (Parser (C1 c f a) -> Maybe (Parser (C1 c f a)))
-> (Object -> Parser (C1 c f a))
-> Object
-> Maybe (Parser (C1 c f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f a -> C1 c f a) -> Parser (f a) -> Parser (C1 c f a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f a -> C1 c f a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (f a) -> Parser (C1 c f a))
-> (Object -> Parser (f a)) -> Object -> Parser (C1 c f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            (Tagged isRecord (Parser (f a)) -> Parser (f a)
forall {a}. Tagged isRecord (Parser (f a)) -> Parser (f a)
forall {k} (s :: k) b. Tagged s b -> b
unTagged :: Tagged isRecord (Parser (f a)) -> Parser (f a)) (Tagged isRecord (Parser (f a)) -> Parser (f a))
-> (Object -> Tagged isRecord (Parser (f a)))
-> Object
-> Parser (f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            (String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged isRecord (Parser (f a))
forall a.
(String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged isRecord (Parser (f a))
forall {k} arity (f :: * -> *) (isRecord :: k) a.
FromTaggedObject' arity f isRecord =>
(String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged isRecord (Parser (f a))
parseFromTaggedObject' (String
contentsFieldName String
-> (String :* (String :* (Options :* FromArgs arity a)))
-> String :* (String :* (String :* (Options :* FromArgs arity a)))
forall a b. a -> b -> a :* b
:* String
cname String
-> (String :* (Options :* FromArgs arity a))
-> String :* (String :* (Options :* FromArgs arity a))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity a)
p)
        | Bool
otherwise = Maybe (Parser (C1 c f a)) -> Object -> Maybe (Parser (C1 c f a))
forall a b. a -> b -> a
const Maybe (Parser (C1 c f a))
forall a. Maybe a
Nothing
      where
        tag' :: Text
tag' = String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ Options -> String -> String
constructorTagModifier Options
opts String
cname
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
    {-# INLINE parseFromTaggedObject #-}
class FromTaggedObject' arity f isRecord where
    
    parseFromTaggedObject'
        :: String :* ConName :* TypeName :* Options :* FromArgs arity a
        -> Object -> Tagged isRecord (Parser (f a))
instance (RecordFromJSON arity f, FieldNames f) => FromTaggedObject' arity f True where
    
    parseFromTaggedObject' :: forall a.
(String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged True (Parser (f a))
parseFromTaggedObject' (String
_ :* String :* (String :* (Options :* FromArgs arity a))
p) = Parser (f a) -> Tagged True (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged True (Parser (f a)))
-> (Object -> Parser (f a)) -> Object -> Tagged True (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
forall a.
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
forall arity (f :: * -> *) a.
RecordFromJSON arity f =>
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
recordParseJSON (Bool
True Bool
-> (String :* (String :* (Options :* FromArgs arity a)))
-> Bool :* (String :* (String :* (Options :* FromArgs arity a)))
forall a b. a -> b -> a :* b
:* String :* (String :* (Options :* FromArgs arity a))
p)
    {-# INLINE parseFromTaggedObject' #-}
instance (ConsFromJSON arity f) => FromTaggedObject' arity f False where
    
    parseFromTaggedObject' :: forall a.
(String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged False (Parser (f a))
parseFromTaggedObject' String :* (String :* (String :* (Options :* FromArgs arity a)))
p Object
obj = Parser (f a) -> Tagged False (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged False (Parser (f a)))
-> Parser (f a) -> Tagged False (Parser (f a))
forall a b. (a -> b) -> a -> b
$ do
        Value
contents <- String -> String -> Parser Value -> Parser Value
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Object
obj Object -> Key -> Parser Value
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
key)
        (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
forall arity (f :: * -> *) a.
ConsFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
consParseJSON String :* (String :* (Options :* FromArgs arity a))
p' Value
contents Parser (f a) -> JSONPathElement -> Parser (f a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
key
      where
        key :: Key
key = String -> Key
Key.fromString String
contentsFieldName
        String
contentsFieldName :* p' :: String :* (String :* (Options :* FromArgs arity a))
p'@(String
cname :* String
tname :* Options :* FromArgs arity a
_) = String :* (String :* (String :* (Options :* FromArgs arity a)))
p
    {-# INLINE parseFromTaggedObject' #-}
instance {-# OVERLAPPING #-} FromTaggedObject' arity U1 False where
    
    parseFromTaggedObject' :: forall a.
(String :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Tagged False (Parser (U1 a))
parseFromTaggedObject' String :* (String :* (String :* (Options :* FromArgs arity a)))
_ Object
_ = Parser (U1 a) -> Tagged False (Parser (U1 a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (U1 a -> Parser (U1 a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure U1 a
forall k (p :: k). U1 p
U1)
    {-# INLINE parseFromTaggedObject' #-}
class ConsFromJSON arity f where
    consParseJSON
        :: ConName :* TypeName :* Options :* FromArgs arity a
        -> Value -> Parser (f a)
class ConsFromJSON' arity f isRecord where
    consParseJSON'
        :: ConName :* TypeName :* Options :* FromArgs arity a
        -> Value -> Tagged isRecord (Parser (f a))
instance ( IsRecord            f isRecord
         , ConsFromJSON' arity f isRecord
         ) => ConsFromJSON arity f where
    consParseJSON :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
consParseJSON String :* (String :* (Options :* FromArgs arity a))
p =
      (Tagged isRecord (Parser (f a)) -> Parser (f a)
forall {a}. Tagged isRecord (Parser (f a)) -> Parser (f a)
forall {k} (s :: k) b. Tagged s b -> b
unTagged :: Tagged isRecord (Parser (f a)) -> Parser (f a))
          (Tagged isRecord (Parser (f a)) -> Parser (f a))
-> (Value -> Tagged isRecord (Parser (f a)))
-> Value
-> Parser (f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged isRecord (Parser (f a))
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged isRecord (Parser (f a))
forall {k} arity (f :: * -> *) (isRecord :: k) a.
ConsFromJSON' arity f isRecord =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged isRecord (Parser (f a))
consParseJSON' String :* (String :* (Options :* FromArgs arity a))
p
    {-# INLINE consParseJSON #-}
instance {-# OVERLAPPING #-}
         ( GFromJSON arity a, RecordFromJSON arity (S1 s a)
         ) => ConsFromJSON' arity (S1 s a) True where
    consParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged True (Parser (S1 s a a))
consParseJSON' p :: String :* (String :* (Options :* FromArgs arity a))
p@(String
cname :* String
tname :* Options
opts :* FromArgs arity a
fargs)
        | Options -> Bool
unwrapUnaryRecords Options
opts = Parser (S1 s a a) -> Tagged True (Parser (S1 s a a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (S1 s a a) -> Tagged True (Parser (S1 s a a)))
-> (Value -> Parser (S1 s a a))
-> Value
-> Tagged True (Parser (S1 s a a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a a -> S1 s a a) -> Parser (a a) -> Parser (S1 s a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> S1 s a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (a a) -> Parser (S1 s a a))
-> (Value -> Parser (a a)) -> Value -> Parser (S1 s a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> FromArgs arity a -> Value -> Parser (a a)
forall a. Options -> FromArgs arity a -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs arity a
fargs
        | Bool
otherwise = Parser (S1 s a a) -> Tagged True (Parser (S1 s a a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (S1 s a a) -> Tagged True (Parser (S1 s a a)))
-> (Value -> Parser (S1 s a a))
-> Value
-> Tagged True (Parser (S1 s a a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (Object -> Parser (S1 s a a)) -> Value -> Parser (S1 s a a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject (String -> String -> String
showCons String
cname String
tname) ((Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (S1 s a a)
forall a.
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (M1 S s a a)
forall arity (f :: * -> *) a.
RecordFromJSON arity f =>
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
recordParseJSON (Bool
False Bool
-> (String :* (String :* (Options :* FromArgs arity a)))
-> Bool :* (String :* (String :* (Options :* FromArgs arity a)))
forall a b. a -> b -> a :* b
:* String :* (String :* (Options :* FromArgs arity a))
p))
    {-# INLINE consParseJSON' #-}
instance RecordFromJSON arity f => ConsFromJSON' arity f True where
    consParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged True (Parser (f a))
consParseJSON' p :: String :* (String :* (Options :* FromArgs arity a))
p@(String
cname :* String
tname :* Options :* FromArgs arity a
_) =
        Parser (f a) -> Tagged True (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged True (Parser (f a)))
-> (Value -> Parser (f a)) -> Value -> Tagged True (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (Object -> Parser (f a)) -> Value -> Parser (f a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject (String -> String -> String
showCons String
cname String
tname) ((Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
forall a.
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
forall arity (f :: * -> *) a.
RecordFromJSON arity f =>
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
recordParseJSON (Bool
False Bool
-> (String :* (String :* (Options :* FromArgs arity a)))
-> Bool :* (String :* (String :* (Options :* FromArgs arity a)))
forall a b. a -> b -> a :* b
:* String :* (String :* (Options :* FromArgs arity a))
p))
    {-# INLINE consParseJSON' #-}
instance {-# OVERLAPPING #-}
         ConsFromJSON' arity U1 False where
    
    consParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged False (Parser (U1 a))
consParseJSON' (String
cname :* String
tname :* Options :* FromArgs arity a
_) Value
v =
        Parser (U1 a) -> Tagged False (Parser (U1 a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (U1 a) -> Tagged False (Parser (U1 a)))
-> (Parser (U1 a) -> Parser (U1 a))
-> Parser (U1 a)
-> Tagged False (Parser (U1 a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Parser (U1 a) -> Parser (U1 a)
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Parser (U1 a) -> Tagged False (Parser (U1 a)))
-> Parser (U1 a) -> Tagged False (Parser (U1 a))
forall a b. (a -> b) -> a -> b
$ case Value
v of
            Array Array
a | Array -> Bool
forall a. Vector a -> Bool
V.null Array
a -> U1 a -> Parser (U1 a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure U1 a
forall k (p :: k). U1 p
U1
                    | Bool
otherwise -> Array -> Parser (U1 a)
forall {m :: * -> *} {a} {a}. MonadFail m => Vector a -> m a
fail_ Array
a
            Value
_ -> String -> Value -> Parser (U1 a)
forall a. String -> Value -> Parser a
typeMismatch String
"Array" Value
v
      where
        fail_ :: Vector a -> m a
fail_ Vector a
a = String -> m a
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m a) -> String -> m a
forall a b. (a -> b) -> a -> b
$
            String
"expected an empty Array, but encountered an Array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++
            Int -> String
forall a. Show a => a -> String
show (Vector a -> Int
forall a. Vector a -> Int
V.length Vector a
a)
    {-# INLINE consParseJSON' #-}
instance {-# OVERLAPPING #-}
         GFromJSON arity f => ConsFromJSON' arity (S1 s f) False where
    consParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged False (Parser (S1 s f a))
consParseJSON' (String
_ :* String
_ :* Options
opts :* FromArgs arity a
fargs) =
        Parser (S1 s f a) -> Tagged False (Parser (S1 s f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (S1 s f a) -> Tagged False (Parser (S1 s f a)))
-> (Value -> Parser (S1 s f a))
-> Value
-> Tagged False (Parser (S1 s f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f a -> S1 s f a) -> Parser (f a) -> Parser (S1 s f a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f a -> S1 s f a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (f a) -> Parser (S1 s f a))
-> (Value -> Parser (f a)) -> Value -> Parser (S1 s f a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> FromArgs arity a -> Value -> Parser (f a)
forall a. Options -> FromArgs arity a -> Value -> Parser (f a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs arity a
fargs
    {-# INLINE consParseJSON' #-}
instance (ProductFromJSON arity f, ProductSize f
         ) => ConsFromJSON' arity f False where
    consParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Tagged False (Parser (f a))
consParseJSON' String :* (String :* (Options :* FromArgs arity a))
p = Parser (f a) -> Tagged False (Parser (f a))
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser (f a) -> Tagged False (Parser (f a)))
-> (Value -> Parser (f a)) -> Value -> Tagged False (Parser (f a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
forall (f :: * -> *) arity a.
(ProductFromJSON arity f, ProductSize f) =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
productParseJSON0 String :* (String :* (Options :* FromArgs arity a))
p
    {-# INLINE consParseJSON' #-}
class FieldNames f where
    fieldNames :: f a -> [String] -> [String]
instance (FieldNames a, FieldNames b) => FieldNames (a :*: b) where
    fieldNames :: forall (a :: k). (:*:) a b a -> [String] -> [String]
fieldNames (:*:) a b a
_ =
      a Any -> [String] -> [String]
forall (a :: k). a a -> [String] -> [String]
forall {k} (f :: k -> *) (a :: k).
FieldNames f =>
f a -> [String] -> [String]
fieldNames (a x
forall {x :: k}. a x
forall a. HasCallStack => a
undefined :: a x) ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
      b Any -> [String] -> [String]
forall (a :: k). b a -> [String] -> [String]
forall {k} (f :: k -> *) (a :: k).
FieldNames f =>
f a -> [String] -> [String]
fieldNames (b y
forall {y :: k}. b y
forall a. HasCallStack => a
undefined :: b y)
    {-# INLINE fieldNames #-}
instance (Selector s) => FieldNames (S1 s f) where
    fieldNames :: forall (a :: k). S1 s f a -> [String] -> [String]
fieldNames S1 s f a
_ = (M1 Any s Any Any -> String
forall {k} (s :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Selector s =>
t s f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t s f a -> String
selName (M1 _i s _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i s _f _p
forall a. HasCallStack => a
undefined :: M1 _i s _f _p) String -> [String] -> [String]
forall a. a -> [a] -> [a]
:)
    {-# INLINE fieldNames #-}
class RecordFromJSON arity f where
    recordParseJSON
        :: Bool :* ConName :* TypeName :* Options :* FromArgs arity a
        -> Object -> Parser (f a)
instance ( FieldNames f
         , RecordFromJSON' arity f
         ) => RecordFromJSON arity f where
    recordParseJSON :: forall a.
(Bool :* (String :* (String :* (Options :* FromArgs arity a))))
-> Object -> Parser (f a)
recordParseJSON (Bool
fromTaggedSum :* p :: String :* (String :* (Options :* FromArgs arity a))
p@(String
cname :* String
tname :* Options
opts :* FromArgs arity a
_)) =
        \Object
obj -> Object -> Parser ()
checkUnknown Object
obj Parser () -> Parser (f a) -> Parser (f a)
forall a b. Parser a -> Parser b -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (f a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (f a)
forall arity (f :: * -> *) a.
RecordFromJSON' arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (f a)
recordParseJSON' String :* (String :* (Options :* FromArgs arity a))
p Object
obj
        where
            knownFields :: KM.KeyMap ()
            knownFields :: KeyMap ()
knownFields = [(Key, ())] -> KeyMap ()
forall v. [(Key, v)] -> KeyMap v
KM.fromList ([(Key, ())] -> KeyMap ()) -> [(Key, ())] -> KeyMap ()
forall a b. (a -> b) -> a -> b
$ (String -> (Key, ())) -> [String] -> [(Key, ())]
forall a b. (a -> b) -> [a] -> [b]
map ((,()) (Key -> (Key, ())) -> (String -> Key) -> String -> (Key, ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Key
Key.fromString) ([String] -> [(Key, ())]) -> [String] -> [(Key, ())]
forall a b. (a -> b) -> a -> b
$
                [SumEncoding -> String
tagFieldName (Options -> SumEncoding
sumEncoding Options
opts) | Bool
fromTaggedSum] [String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<>
                (Options -> String -> String
fieldLabelModifier Options
opts (String -> String) -> [String] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f Any -> [String] -> [String]
forall a. f a -> [String] -> [String]
forall {k} (f :: k -> *) (a :: k).
FieldNames f =>
f a -> [String] -> [String]
fieldNames (f a
forall {a}. f a
forall a. HasCallStack => a
undefined :: f a) [])
            checkUnknown :: Object -> Parser ()
checkUnknown =
                if Bool -> Bool
not (Options -> Bool
rejectUnknownFields Options
opts)
                then \Object
_ -> () -> Parser ()
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
                else \Object
obj -> case Object -> [Key]
forall v. KeyMap v -> [Key]
KM.keys (Object -> KeyMap () -> Object
forall v v'. KeyMap v -> KeyMap v' -> KeyMap v
KM.difference Object
obj KeyMap ()
knownFields) of
                    [] -> () -> Parser ()
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
                    [Key]
unknownFields -> String -> String -> Parser () -> Parser ()
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Parser () -> Parser ()) -> Parser () -> Parser ()
forall a b. (a -> b) -> a -> b
$
                        String -> Parser ()
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"unknown fields: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [Key] -> String
forall a. Show a => a -> String
show [Key]
unknownFields)
    {-# INLINE recordParseJSON #-}
class RecordFromJSON' arity f where
    recordParseJSON'
        :: ConName :* TypeName :* Options :* FromArgs arity a
        -> Object -> Parser (f a)
instance ( RecordFromJSON' arity a
         , RecordFromJSON' arity b
         ) => RecordFromJSON' arity (a :*: b) where
    recordParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser ((:*:) a b a)
recordParseJSON' String :* (String :* (Options :* FromArgs arity a))
p Object
obj =
        a a -> b a -> (:*:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
(:*:) (a a -> b a -> (:*:) a b a)
-> Parser (a a) -> Parser (b a -> (:*:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (a a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (a a)
forall arity (f :: * -> *) a.
RecordFromJSON' arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (f a)
recordParseJSON' String :* (String :* (Options :* FromArgs arity a))
p Object
obj
              Parser (b a -> (:*:) a b a) -> Parser (b a) -> Parser ((:*:) a b a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (b a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (b a)
forall arity (f :: * -> *) a.
RecordFromJSON' arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (f a)
recordParseJSON' String :* (String :* (Options :* FromArgs arity a))
p Object
obj
    {-# INLINE recordParseJSON' #-}
instance {-# OVERLAPPABLE #-} (Selector s, GFromJSON arity a) =>
         RecordFromJSON' arity (S1 s a) where
    recordParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (S1 s a a)
recordParseJSON' (String
cname :* String
tname :* Options
opts :* FromArgs arity a
fargs) Object
obj = do
        Value
fv <- String -> String -> Parser Value -> Parser Value
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Object
obj Object -> Key -> Parser Value
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
label)
        a a -> S1 s a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (a a -> S1 s a a) -> Parser (a a) -> Parser (S1 s a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Options -> FromArgs arity a -> Value -> Parser (a a)
forall a. Options -> FromArgs arity a -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs arity a
fargs Value
fv Parser (a a) -> JSONPathElement -> Parser (a a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
label
      where
        label :: Key
label = String -> Key
Key.fromString (String -> Key) -> String -> Key
forall a b. (a -> b) -> a -> b
$ Options -> String -> String
fieldLabelModifier Options
opts String
sname
        sname :: String
sname = M1 Any s Any Any -> String
forall {k} (s :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Selector s =>
t s f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t s f a -> String
selName (M1 _i s _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i s _f _p
forall a. HasCallStack => a
undefined :: M1 _i s _f _p)
    {-# INLINE recordParseJSON' #-}
instance {-# INCOHERENT #-} (Selector s, FromJSON a) =>
         RecordFromJSON' arity (S1 s (K1 i (Maybe a))) where
    recordParseJSON' :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Object -> Parser (S1 s (K1 i (Maybe a)) a)
recordParseJSON' (String
_ :* String
_ :* Options
opts :* FromArgs arity a
_) Object
obj = K1 i (Maybe a) a -> M1 S s (K1 i (Maybe a)) a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (K1 i (Maybe a) a -> M1 S s (K1 i (Maybe a)) a)
-> (Maybe a -> K1 i (Maybe a) a)
-> Maybe a
-> M1 S s (K1 i (Maybe a)) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe a -> K1 i (Maybe a) a
forall k i c (p :: k). c -> K1 i c p
K1 (Maybe a -> M1 S s (K1 i (Maybe a)) a)
-> Parser (Maybe a) -> Parser (M1 S s (K1 i (Maybe a)) a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Key -> Parser (Maybe a)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
label
      where
        label :: Key
label = String -> Key
Key.fromString (String -> Key) -> String -> Key
forall a b. (a -> b) -> a -> b
$ Options -> String -> String
fieldLabelModifier Options
opts String
sname
        sname :: String
sname = M1 Any s Any Any -> String
forall {k} (s :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Selector s =>
t s f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t s f a -> String
selName (M1 _i s _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i s _f _p
forall a. HasCallStack => a
undefined :: M1 _i s _f _p)
    {-# INLINE recordParseJSON' #-}
#if !MIN_VERSION_base(4,16,0)
instance {-# INCOHERENT #-} (Selector s, FromJSON a) =>
         RecordFromJSON' arity (S1 s (K1 i (Semigroup.Option a))) where
    recordParseJSON' p obj = wrap <$> recordParseJSON' p obj
      where
        wrap :: S1 s (K1 i (Maybe a)) p -> S1 s (K1 i (Semigroup.Option a)) p
        wrap (M1 (K1 a)) = M1 (K1 (Semigroup.Option a))
    {-# INLINE recordParseJSON' #-}
#endif
productParseJSON0
    :: forall f arity a. (ProductFromJSON arity f, ProductSize f)
    => ConName :* TypeName :* Options :* FromArgs arity a
    -> Value -> Parser (f a)
    
    
    
productParseJSON0 :: forall (f :: * -> *) arity a.
(ProductFromJSON arity f, ProductSize f) =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
productParseJSON0 p :: String :* (String :* (Options :* FromArgs arity a))
p@(String
cname :* String
tname :* Options
_ :* FromArgs arity a
_) =
    String -> (Array -> Parser (f a)) -> Value -> Parser (f a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray (String -> String -> String
showCons String
cname String
tname) ((Array -> Parser (f a)) -> Value -> Parser (f a))
-> (Array -> Parser (f a)) -> Value -> Parser (f a)
forall a b. (a -> b) -> a -> b
$ \Array
arr ->
        let lenArray :: Int
lenArray = Array -> Int
forall a. Vector a -> Int
V.length Array
arr
            lenProduct :: Int
lenProduct = (Tagged2 f Int -> Int
forall (s :: * -> *) b. Tagged2 s b -> b
unTagged2 :: Tagged2 f Int -> Int)
                         Tagged2 f Int
forall (f :: * -> *). ProductSize f => Tagged2 f Int
productSize in
        if Int
lenArray Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lenProduct
        then (String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (f a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (f a)
forall arity (f :: * -> *) a.
ProductFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (f a)
productParseJSON String :* (String :* (Options :* FromArgs arity a))
p Array
arr Int
0 Int
lenProduct
        else String -> String -> Parser (f a) -> Parser (f a)
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Parser (f a) -> Parser (f a)) -> Parser (f a) -> Parser (f a)
forall a b. (a -> b) -> a -> b
$
             String -> Parser (f a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (f a)) -> String -> Parser (f a)
forall a b. (a -> b) -> a -> b
$ String
"expected an Array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
lenProduct String -> String -> String
forall a. [a] -> [a] -> [a]
++
                    String
", but encountered an Array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
lenArray
class ProductFromJSON arity f where
    productParseJSON :: ConName :* TypeName :* Options :* FromArgs arity a
                 -> Array -> Int -> Int
                 -> Parser (f a)
instance ( ProductFromJSON    arity a
         , ProductFromJSON    arity b
         ) => ProductFromJSON arity (a :*: b) where
    productParseJSON :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser ((:*:) a b a)
productParseJSON String :* (String :* (Options :* FromArgs arity a))
p Array
arr Int
ix Int
len =
        a a -> b a -> (:*:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
(:*:) (a a -> b a -> (:*:) a b a)
-> Parser (a a) -> Parser (b a -> (:*:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (a a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (a a)
forall arity (f :: * -> *) a.
ProductFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (f a)
productParseJSON String :* (String :* (Options :* FromArgs arity a))
p Array
arr Int
ix  Int
lenL
              Parser (b a -> (:*:) a b a) -> Parser (b a) -> Parser ((:*:) a b a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (b a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (b a)
forall arity (f :: * -> *) a.
ProductFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (f a)
productParseJSON String :* (String :* (Options :* FromArgs arity a))
p Array
arr Int
ixR Int
lenR
        where
          lenL :: Int
lenL = Int
len Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`unsafeShiftR` Int
1
          ixR :: Int
ixR  = Int
ix Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
lenL
          lenR :: Int
lenR = Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
lenL
instance (GFromJSON arity a) => ProductFromJSON arity (S1 s a) where
    productParseJSON :: forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Array -> Int -> Int -> Parser (S1 s a a)
productParseJSON (String
_ :* String
_ :* Options
opts :* FromArgs arity a
fargs) Array
arr Int
ix Int
_ =
        a a -> M1 S s a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (a a -> M1 S s a a) -> Parser (a a) -> Parser (M1 S s a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Options -> FromArgs arity a -> Value -> Parser (a a)
forall a. Options -> FromArgs arity a -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
GFromJSON arity f =>
Options -> FromArgs arity a -> Value -> Parser (f a)
gParseJSON Options
opts FromArgs arity a
fargs (Array -> Int -> Value
forall a. Vector a -> Int -> a
V.unsafeIndex Array
arr Int
ix) Parser (a a) -> JSONPathElement -> Parser (a a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Int -> JSONPathElement
Index Int
ix
    {-# INLINE productParseJSON #-}
class FromPair arity f where
    
    parsePair :: Key :* TypeName :* Options :* FromArgs arity a
              -> Value
              -> Maybe (Parser (f a))
instance ( FromPair arity a
         , FromPair arity b
         ) => FromPair arity (a :+: b) where
    parsePair :: forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser ((:+:) a b a))
parsePair Key :* (String :* (Options :* FromArgs arity a))
p Value
pair =
        ((a a -> (:+:) a b a) -> Parser (a a) -> Parser ((:+:) a b a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (Parser (a a) -> Parser ((:+:) a b a))
-> Maybe (Parser (a a)) -> Maybe (Parser ((:+:) a b a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (a a))
forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (a a))
forall arity (f :: * -> *) a.
FromPair arity f =>
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
parsePair Key :* (String :* (Options :* FromArgs arity a))
p Value
pair) Maybe (Parser ((:+:) a b a))
-> Maybe (Parser ((:+:) a b a)) -> Maybe (Parser ((:+:) a b a))
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
        ((b a -> (:+:) a b a) -> Parser (b a) -> Parser ((:+:) a b a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap b a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (Parser (b a) -> Parser ((:+:) a b a))
-> Maybe (Parser (b a)) -> Maybe (Parser ((:+:) a b a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (b a))
forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (b a))
forall arity (f :: * -> *) a.
FromPair arity f =>
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (f a))
parsePair Key :* (String :* (Options :* FromArgs arity a))
p Value
pair)
    {-# INLINE parsePair #-}
instance ( Constructor c
         , ConsFromJSON arity a
         ) => FromPair arity (C1 c a) where
    parsePair :: forall a.
(Key :* (String :* (Options :* FromArgs arity a)))
-> Value -> Maybe (Parser (C1 c a a))
parsePair (Key
tag :* p :: String :* (Options :* FromArgs arity a)
p@(String
_ :* Options
opts :* FromArgs arity a
_)) Value
v
        | Key
tag Key -> Key -> Bool
forall a. Eq a => a -> a -> Bool
== Key
tag' = Parser (C1 c a a) -> Maybe (Parser (C1 c a a))
forall a. a -> Maybe a
Just (Parser (C1 c a a) -> Maybe (Parser (C1 c a a)))
-> Parser (C1 c a a) -> Maybe (Parser (C1 c a a))
forall a b. (a -> b) -> a -> b
$ a a -> C1 c a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (a a -> C1 c a a) -> Parser (a a) -> Parser (C1 c a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall arity (f :: * -> *) a.
ConsFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
consParseJSON (String
cname String
-> (String :* (Options :* FromArgs arity a))
-> String :* (String :* (Options :* FromArgs arity a))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity a)
p) Value
v
        | Bool
otherwise   = Maybe (Parser (C1 c a a))
forall a. Maybe a
Nothing
      where
        tag' :: Key
tag' = String -> Key
Key.fromString (String -> Key) -> String -> Key
forall a b. (a -> b) -> a -> b
$ Options -> String -> String
constructorTagModifier Options
opts String
cname
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _a _p
forall {k} {_i} {_a :: k -> *} {_p :: k}. M1 _i c _a _p
forall a. HasCallStack => a
undefined :: M1 _i c _a _p)
    {-# INLINE parsePair #-}
class FromUntaggedValue arity f where
    parseUntaggedValue :: TypeName :* Options :* FromArgs arity a
                       -> Value
                       -> Parser (f a)
instance
    ( FromUntaggedValue    arity a
    , FromUntaggedValue    arity b
    ) => FromUntaggedValue arity (a :+: b)
  where
    parseUntaggedValue :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Parser ((:+:) a b a)
parseUntaggedValue String :* (Options :* FromArgs arity a)
p Value
value =
        a a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (a a -> (:+:) a b a) -> Parser (a a) -> Parser ((:+:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String :* (Options :* FromArgs arity a)) -> Value -> Parser (a a)
forall a.
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (a a)
forall arity (f :: * -> *) a.
FromUntaggedValue arity f =>
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
parseUntaggedValue String :* (Options :* FromArgs arity a)
p Value
value Parser ((:+:) a b a)
-> Parser ((:+:) a b a) -> Parser ((:+:) a b a)
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
        b a -> (:+:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (b a -> (:+:) a b a) -> Parser (b a) -> Parser ((:+:) a b a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String :* (Options :* FromArgs arity a)) -> Value -> Parser (b a)
forall a.
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (b a)
forall arity (f :: * -> *) a.
FromUntaggedValue arity f =>
(String :* (Options :* FromArgs arity a)) -> Value -> Parser (f a)
parseUntaggedValue String :* (Options :* FromArgs arity a)
p Value
value
    {-# INLINE parseUntaggedValue #-}
instance {-# OVERLAPPABLE #-}
    ( ConsFromJSON arity a
    , Constructor c
    ) => FromUntaggedValue arity (C1 c a)
  where
    parseUntaggedValue :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Parser (C1 c a a)
parseUntaggedValue String :* (Options :* FromArgs arity a)
p = (a a -> C1 c a a) -> Parser (a a) -> Parser (C1 c a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a a -> C1 c a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (Parser (a a) -> Parser (C1 c a a))
-> (Value -> Parser (a a)) -> Value -> Parser (C1 c a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall a.
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (a a)
forall arity (f :: * -> *) a.
ConsFromJSON arity f =>
(String :* (String :* (Options :* FromArgs arity a)))
-> Value -> Parser (f a)
consParseJSON (String
cname String
-> (String :* (Options :* FromArgs arity a))
-> String :* (String :* (Options :* FromArgs arity a))
forall a b. a -> b -> a :* b
:* String :* (Options :* FromArgs arity a)
p)
      where
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
    {-# INLINE parseUntaggedValue #-}
instance {-# OVERLAPPING #-}
    ( Constructor c )
    => FromUntaggedValue arity (C1 c U1)
  where
    parseUntaggedValue :: forall a.
(String :* (Options :* FromArgs arity a))
-> Value -> Parser (C1 c U1 a)
parseUntaggedValue (String
tname :* Options
opts :* FromArgs arity a
_) Value
v =
        String -> String -> Parser (C1 c U1 a) -> Parser (C1 c U1 a)
forall a. String -> String -> Parser a -> Parser a
contextCons String
cname String
tname (Parser (C1 c U1 a) -> Parser (C1 c U1 a))
-> Parser (C1 c U1 a) -> Parser (C1 c U1 a)
forall a b. (a -> b) -> a -> b
$ case Value
v of
            String Text
tag
                | Text
tag Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
tag' -> C1 c U1 a -> Parser (C1 c U1 a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (C1 c U1 a -> Parser (C1 c U1 a))
-> C1 c U1 a -> Parser (C1 c U1 a)
forall a b. (a -> b) -> a -> b
$ U1 a -> C1 c U1 a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 U1 a
forall k (p :: k). U1 p
U1
                | Bool
otherwise -> Text -> Parser (C1 c U1 a)
fail_ Text
tag
            Value
_ -> String -> Value -> Parser (C1 c U1 a)
forall a. String -> Value -> Parser a
typeMismatch String
"String" Value
v
      where
        tag' :: Text
tag' = String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ Options -> String -> String
constructorTagModifier Options
opts String
cname
        cname :: String
cname = M1 Any c Any Any -> String
forall {k} (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
       (f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
forall k1 (t :: Meta -> (k1 -> *) -> k1 -> *) (f :: k1 -> *)
       (a :: k1).
t c f a -> String
conName (M1 _i c _f _p
forall {k} {_i} {_f :: k -> *} {_p :: k}. M1 _i c _f _p
forall a. HasCallStack => a
undefined :: M1 _i c _f _p)
        fail_ :: Text -> Parser (C1 c U1 a)
fail_ Text
tag = String -> Parser (C1 c U1 a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (C1 c U1 a)) -> String -> Parser (C1 c U1 a)
forall a b. (a -> b) -> a -> b
$
          String
"expected tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
tag' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but found tag " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
tag
    {-# INLINE parseUntaggedValue #-}
instance FromJSON2 Const where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Const a b)
liftParseJSON2 Value -> Parser a
p Value -> Parser [a]
_ Value -> Parser b
_ Value -> Parser [b]
_ = (a -> Const a b) -> Parser a -> Parser (Const a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const (Parser a -> Parser (Const a b))
-> (Value -> Parser a) -> Value -> Parser (Const a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
p
instance FromJSON a => FromJSON1 (Const a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Const a a)
liftParseJSON Value -> Parser a
_ Value -> Parser [a]
_ = (a -> Const a a) -> Parser a -> Parser (Const a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Const a a
forall {k} a (b :: k). a -> Const a b
Const (Parser a -> Parser (Const a a))
-> (Value -> Parser a) -> Value -> Parser (Const a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON a => FromJSON (Const a b) where
    parseJSON :: Value -> Parser (Const a b)
parseJSON = (a -> Const a b) -> Parser a -> Parser (Const a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const (Parser a -> Parser (Const a b))
-> (Value -> Parser a) -> Value -> Parser (Const a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (FromJSON a, FromJSONKey a) => FromJSONKey (Const a b) where
    fromJSONKey :: FromJSONKeyFunction (Const a b)
fromJSONKey = (a -> Const a b)
-> FromJSONKeyFunction a -> FromJSONKeyFunction (Const a b)
forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const FromJSONKeyFunction a
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey
instance FromJSON1 Maybe where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
liftParseJSON Value -> Parser a
_ Value -> Parser [a]
_ Value
Null = Maybe a -> Parser (Maybe a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a
forall a. Maybe a
Nothing
    liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a    = a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> Parser a -> Parser (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
instance (FromJSON a) => FromJSON (Maybe a) where
    parseJSON :: Value -> Parser (Maybe a)
parseJSON = Value -> Parser (Maybe a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON2 Either where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Either a b)
liftParseJSON2 Value -> Parser a
pA Value -> Parser [a]
_ Value -> Parser b
pB Value -> Parser [b]
_ (Object (Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList -> [(Key
key, Value
value)]))
        | Key
key Key -> Key -> Bool
forall a. Eq a => a -> a -> Bool
== Key
left  = a -> Either a b
forall a b. a -> Either a b
Left  (a -> Either a b) -> Parser a -> Parser (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
pA Value
value Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
left
        | Key
key Key -> Key -> Bool
forall a. Eq a => a -> a -> Bool
== Key
right = b -> Either a b
forall a b. b -> Either a b
Right (b -> Either a b) -> Parser b -> Parser (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser b
pB Value
value Parser b -> JSONPathElement -> Parser b
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
right
      where
        left, right :: Key
        left :: Key
left  = Key
"Left"
        right :: Key
right = Key
"Right"
    liftParseJSON2 Value -> Parser a
_ Value -> Parser [a]
_ Value -> Parser b
_ Value -> Parser [b]
_ Value
_ = String -> Parser (Either a b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (Either a b)) -> String -> Parser (Either a b)
forall a b. (a -> b) -> a -> b
$
        String
"expected an object with a single property " String -> String -> String
forall a. [a] -> [a] -> [a]
++
        String
"where the property key should be either " String -> String -> String
forall a. [a] -> [a] -> [a]
++
        String
"\"Left\" or \"Right\""
instance (FromJSON a) => FromJSON1 (Either a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Either a a)
liftParseJSON = (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (Either a a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Either a b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b) => FromJSON (Either a b) where
    parseJSON :: Value -> Parser (Either a b)
parseJSON = Value -> Parser (Either a b)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance FromJSON Void where
    parseJSON :: Value -> Parser Void
parseJSON Value
_ = String -> Parser Void
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Cannot parse Void"
instance FromJSONKey Void where
    fromJSONKey :: FromJSONKeyFunction Void
fromJSONKey = (Text -> Parser Void) -> FromJSONKeyFunction Void
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Void) -> FromJSONKeyFunction Void)
-> (Text -> Parser Void) -> FromJSONKeyFunction Void
forall a b. (a -> b) -> a -> b
$ \Text
_ -> String -> Parser Void
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Cannot parse Void"
instance FromJSON Bool where
    parseJSON :: Value -> Parser Bool
parseJSON (Bool Bool
b) = Bool -> Parser Bool
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
b
    parseJSON Value
v = String -> Value -> Parser Bool
forall a. String -> Value -> Parser a
typeMismatch String
"Bool" Value
v
instance FromJSONKey Bool where
    fromJSONKey :: FromJSONKeyFunction Bool
fromJSONKey = (Text -> Parser Bool) -> FromJSONKeyFunction Bool
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Bool) -> FromJSONKeyFunction Bool)
-> (Text -> Parser Bool) -> FromJSONKeyFunction Bool
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text
t of
        Text
"true"  -> Bool -> Parser Bool
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
        Text
"false" -> Bool -> Parser Bool
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
        Text
_       -> String -> Parser Bool
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Bool) -> String -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String
"cannot parse key " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
t String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into Bool"
instance FromJSON Ordering where
  parseJSON :: Value -> Parser Ordering
parseJSON = String -> (Text -> Parser Ordering) -> Value -> Parser Ordering
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Ordering" ((Text -> Parser Ordering) -> Value -> Parser Ordering)
-> (Text -> Parser Ordering) -> Value -> Parser Ordering
forall a b. (a -> b) -> a -> b
$ \Text
s ->
    case Text
s of
      Text
"LT" -> Ordering -> Parser Ordering
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return Ordering
LT
      Text
"EQ" -> Ordering -> Parser Ordering
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return Ordering
EQ
      Text
"GT" -> Ordering -> Parser Ordering
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return Ordering
GT
      Text
_ -> String -> Parser Ordering
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Ordering) -> String -> Parser Ordering
forall a b. (a -> b) -> a -> b
$ String
"parsing Ordering failed, unexpected " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
s String -> String -> String
forall a. [a] -> [a] -> [a]
++
                  String
" (expected \"LT\", \"EQ\", or \"GT\")"
instance FromJSON () where
    parseJSON :: Value -> Parser ()
parseJSON Value
_ = () -> Parser ()
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
instance FromJSON Char where
    parseJSON :: Value -> Parser Char
parseJSON = String -> (Text -> Parser Char) -> Value -> Parser Char
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Char" Text -> Parser Char
parseChar
    parseJSONList :: Value -> Parser String
parseJSONList (String Text
s) = String -> Parser String
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> String
T.unpack Text
s)
    parseJSONList Value
v = String -> Value -> Parser String
forall a. String -> Value -> Parser a
typeMismatch String
"String" Value
v
parseChar :: Text -> Parser Char
parseChar :: Text -> Parser Char
parseChar Text
t =
    if Text -> Int -> Ordering
T.compareLength Text
t Int
1 Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
== Ordering
EQ
      then Char -> Parser Char
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Char -> Parser Char) -> Char -> Parser Char
forall a b. (a -> b) -> a -> b
$ HasCallStack => Text -> Char
Text -> Char
T.head Text
t
      else String -> Parser Char -> Parser Char
forall a. String -> Parser a -> Parser a
prependContext String
"Char" (Parser Char -> Parser Char) -> Parser Char -> Parser Char
forall a b. (a -> b) -> a -> b
$ String -> Parser Char
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"expected a string of length 1"
instance FromJSON Double where
    parseJSON :: Value -> Parser Double
parseJSON = String -> Value -> Parser Double
forall a. RealFloat a => String -> Value -> Parser a
parseRealFloat String
"Double"
instance FromJSONKey Double where
    fromJSONKey :: FromJSONKeyFunction Double
fromJSONKey = (Text -> Parser Double) -> FromJSONKeyFunction Double
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Double) -> FromJSONKeyFunction Double)
-> (Text -> Parser Double) -> FromJSONKeyFunction Double
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text
t of
        Text
"NaN"   -> Double -> Parser Double
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Double
0Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
0)
        Text
"+inf"  -> Double -> Parser Double
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Double
1Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
0)
        Text
"-inf"  -> Double -> Parser Double
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Double -> Double
forall a. Num a => a -> a
negate Double
1Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
0)
        Text
_       -> Scientific -> Double
forall a. RealFloat a => Scientific -> a
Scientific.toRealFloat (Scientific -> Double) -> Parser Scientific -> Parser Double
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parser Scientific
parseScientificText Text
t
instance FromJSON Float where
    parseJSON :: Value -> Parser Float
parseJSON = String -> Value -> Parser Float
forall a. RealFloat a => String -> Value -> Parser a
parseRealFloat String
"Float"
instance FromJSONKey Float where
    fromJSONKey :: FromJSONKeyFunction Float
fromJSONKey = (Text -> Parser Float) -> FromJSONKeyFunction Float
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Float) -> FromJSONKeyFunction Float)
-> (Text -> Parser Float) -> FromJSONKeyFunction Float
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text
t of
        Text
"NaN"  -> Float -> Parser Float
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Float
0Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
0)
        Text
"+inf" -> Float -> Parser Float
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
0)
        Text
"-inf" -> Float -> Parser Float
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Float -> Float
forall a. Num a => a -> a
negate Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
0)
        Text
_      -> Scientific -> Float
forall a. RealFloat a => Scientific -> a
Scientific.toRealFloat (Scientific -> Float) -> Parser Scientific -> Parser Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parser Scientific
parseScientificText Text
t
instance (FromJSON a, Integral a) => FromJSON (Ratio a) where
    parseJSON :: Value -> Parser (Ratio a)
parseJSON (Number Scientific
x)
      | Int
exp10 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
1024
      , Int
exp10 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= -Int
1024 = Ratio a -> Parser (Ratio a)
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Ratio a -> Parser (Ratio a)) -> Ratio a -> Parser (Ratio a)
forall a b. (a -> b) -> a -> b
$! Scientific -> Ratio a
forall a b. (Real a, Fractional b) => a -> b
realToFrac Scientific
x
      | Bool
otherwise      = String -> Parser (Ratio a) -> Parser (Ratio a)
forall a. String -> Parser a -> Parser a
prependContext String
"Ratio" (Parser (Ratio a) -> Parser (Ratio a))
-> Parser (Ratio a) -> Parser (Ratio a)
forall a b. (a -> b) -> a -> b
$ String -> Parser (Ratio a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
msg
      where
        exp10 :: Int
exp10 = Scientific -> Int
base10Exponent Scientific
x
        msg :: String
msg = String
"found a number with exponent " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
exp10
           String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", but it must not be greater than 1024 or less than -1024"
    parseJSON Value
o = Value -> Parser (Ratio a)
objParser Value
o
      where
        objParser :: Value -> Parser (Ratio a)
objParser = String -> (Object -> Parser (Ratio a)) -> Value -> Parser (Ratio a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Rational" ((Object -> Parser (Ratio a)) -> Value -> Parser (Ratio a))
-> (Object -> Parser (Ratio a)) -> Value -> Parser (Ratio a)
forall a b. (a -> b) -> a -> b
$ \Object
obj -> do
            a
numerator <- Object
obj Object -> Key -> Parser a
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"numerator"
            a
denominator <- Object
obj Object -> Key -> Parser a
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"denominator"
            if a
denominator a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
0
            then String -> Parser (Ratio a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Ratio denominator was 0"
            else Ratio a -> Parser (Ratio a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ratio a -> Parser (Ratio a)) -> Ratio a -> Parser (Ratio a)
forall a b. (a -> b) -> a -> b
$ a
numerator a -> a -> Ratio a
forall a. Integral a => a -> a -> Ratio a
% a
denominator
instance HasResolution a => FromJSON (Fixed a) where
    parseJSON :: Value -> Parser (Fixed a)
parseJSON = String -> Parser (Fixed a) -> Parser (Fixed a)
forall a. String -> Parser a -> Parser a
prependContext String
"Fixed" (Parser (Fixed a) -> Parser (Fixed a))
-> (Value -> Parser (Fixed a)) -> Value -> Parser (Fixed a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> Parser (Fixed a)) -> Value -> Parser (Fixed a)
forall a. (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific' (Fixed a -> Parser (Fixed a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Fixed a -> Parser (Fixed a))
-> (Scientific -> Fixed a) -> Scientific -> Parser (Fixed a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scientific -> Fixed a
forall a b. (Real a, Fractional b) => a -> b
realToFrac)
instance FromJSON Int where
    parseJSON :: Value -> Parser Int
parseJSON = String -> Value -> Parser Int
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Int"
instance FromJSONKey Int where
    fromJSONKey :: FromJSONKeyFunction Int
fromJSONKey = (Text -> Parser Int) -> FromJSONKeyFunction Int
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Int) -> FromJSONKeyFunction Int)
-> (Text -> Parser Int) -> FromJSONKeyFunction Int
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Int
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Int"
instance FromJSON Integer where
    parseJSON :: Value -> Parser Integer
parseJSON = String -> Value -> Parser Integer
forall a. Integral a => String -> Value -> Parser a
parseIntegral String
"Integer"
instance FromJSONKey Integer where
    fromJSONKey :: FromJSONKeyFunction Integer
fromJSONKey = (Text -> Parser Integer) -> FromJSONKeyFunction Integer
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Integer) -> FromJSONKeyFunction Integer)
-> (Text -> Parser Integer) -> FromJSONKeyFunction Integer
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Integer
forall a. Integral a => String -> Text -> Parser a
parseIntegralText String
"Integer"
instance FromJSON Natural where
    parseJSON :: Value -> Parser Natural
parseJSON Value
value = do
        Integer
integer <- String -> Value -> Parser Integer
forall a. Integral a => String -> Value -> Parser a
parseIntegral String
"Natural" Value
value
        Integer -> Parser Natural
parseNatural Integer
integer
instance FromJSONKey Natural where
    fromJSONKey :: FromJSONKeyFunction Natural
fromJSONKey = (Text -> Parser Natural) -> FromJSONKeyFunction Natural
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Natural) -> FromJSONKeyFunction Natural)
-> (Text -> Parser Natural) -> FromJSONKeyFunction Natural
forall a b. (a -> b) -> a -> b
$ \Text
text -> do
        Integer
integer <- String -> Text -> Parser Integer
forall a. Integral a => String -> Text -> Parser a
parseIntegralText String
"Natural" Text
text
        Integer -> Parser Natural
parseNatural Integer
integer
parseNatural :: Integer -> Parser Natural
parseNatural :: Integer -> Parser Natural
parseNatural Integer
integer =
    if Integer
integer Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< Integer
0 then
        String -> Parser Natural
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Natural) -> String -> Parser Natural
forall a b. (a -> b) -> a -> b
$ String
"parsing Natural failed, unexpected negative number " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Integer -> String
forall a. Show a => a -> String
show Integer
integer
    else
        Natural -> Parser Natural
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Natural -> Parser Natural) -> Natural -> Parser Natural
forall a b. (a -> b) -> a -> b
$ Integer -> Natural
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
integer
instance FromJSON Int8 where
    parseJSON :: Value -> Parser Int8
parseJSON = String -> Value -> Parser Int8
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Int8"
instance FromJSONKey Int8 where
    fromJSONKey :: FromJSONKeyFunction Int8
fromJSONKey = (Text -> Parser Int8) -> FromJSONKeyFunction Int8
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Int8) -> FromJSONKeyFunction Int8)
-> (Text -> Parser Int8) -> FromJSONKeyFunction Int8
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Int8
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Int8"
instance FromJSON Int16 where
    parseJSON :: Value -> Parser Int16
parseJSON = String -> Value -> Parser Int16
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Int16"
instance FromJSONKey Int16 where
    fromJSONKey :: FromJSONKeyFunction Int16
fromJSONKey = (Text -> Parser Int16) -> FromJSONKeyFunction Int16
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Int16) -> FromJSONKeyFunction Int16)
-> (Text -> Parser Int16) -> FromJSONKeyFunction Int16
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Int16
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Int16"
instance FromJSON Int32 where
    parseJSON :: Value -> Parser Int32
parseJSON = String -> Value -> Parser Int32
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Int32"
instance FromJSONKey Int32 where
    fromJSONKey :: FromJSONKeyFunction Int32
fromJSONKey = (Text -> Parser Int32) -> FromJSONKeyFunction Int32
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Int32) -> FromJSONKeyFunction Int32)
-> (Text -> Parser Int32) -> FromJSONKeyFunction Int32
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Int32
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Int32"
instance FromJSON Int64 where
    parseJSON :: Value -> Parser Int64
parseJSON = String -> Value -> Parser Int64
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Int64"
instance FromJSONKey Int64 where
    fromJSONKey :: FromJSONKeyFunction Int64
fromJSONKey = (Text -> Parser Int64) -> FromJSONKeyFunction Int64
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Int64) -> FromJSONKeyFunction Int64)
-> (Text -> Parser Int64) -> FromJSONKeyFunction Int64
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Int64
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Int64"
instance FromJSON Word where
    parseJSON :: Value -> Parser Word
parseJSON = String -> Value -> Parser Word
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Word"
instance FromJSONKey Word where
    fromJSONKey :: FromJSONKeyFunction Word
fromJSONKey = (Text -> Parser Word) -> FromJSONKeyFunction Word
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Word) -> FromJSONKeyFunction Word)
-> (Text -> Parser Word) -> FromJSONKeyFunction Word
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Word
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Word"
instance FromJSON Word8 where
    parseJSON :: Value -> Parser Word8
parseJSON = String -> Value -> Parser Word8
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Word8"
instance FromJSONKey Word8 where
    fromJSONKey :: FromJSONKeyFunction Word8
fromJSONKey = (Text -> Parser Word8) -> FromJSONKeyFunction Word8
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Word8) -> FromJSONKeyFunction Word8)
-> (Text -> Parser Word8) -> FromJSONKeyFunction Word8
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Word8
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Word8"
instance FromJSON Word16 where
    parseJSON :: Value -> Parser Word16
parseJSON = String -> Value -> Parser Word16
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Word16"
instance FromJSONKey Word16 where
    fromJSONKey :: FromJSONKeyFunction Word16
fromJSONKey = (Text -> Parser Word16) -> FromJSONKeyFunction Word16
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Word16) -> FromJSONKeyFunction Word16)
-> (Text -> Parser Word16) -> FromJSONKeyFunction Word16
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Word16
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Word16"
instance FromJSON Word32 where
    parseJSON :: Value -> Parser Word32
parseJSON = String -> Value -> Parser Word32
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Word32"
instance FromJSONKey Word32 where
    fromJSONKey :: FromJSONKeyFunction Word32
fromJSONKey = (Text -> Parser Word32) -> FromJSONKeyFunction Word32
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Word32) -> FromJSONKeyFunction Word32)
-> (Text -> Parser Word32) -> FromJSONKeyFunction Word32
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Word32
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Word32"
instance FromJSON Word64 where
    parseJSON :: Value -> Parser Word64
parseJSON = String -> Value -> Parser Word64
forall a. (Bounded a, Integral a) => String -> Value -> Parser a
parseBoundedIntegral String
"Word64"
instance FromJSONKey Word64 where
    fromJSONKey :: FromJSONKeyFunction Word64
fromJSONKey = (Text -> Parser Word64) -> FromJSONKeyFunction Word64
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Word64) -> FromJSONKeyFunction Word64)
-> (Text -> Parser Word64) -> FromJSONKeyFunction Word64
forall a b. (a -> b) -> a -> b
$ String -> Text -> Parser Word64
forall a. (Bounded a, Integral a) => String -> Text -> Parser a
parseBoundedIntegralText String
"Word64"
instance FromJSON CTime where
    parseJSON :: Value -> Parser CTime
parseJSON = (Int64 -> CTime) -> Parser Int64 -> Parser CTime
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int64 -> CTime
CTime (Parser Int64 -> Parser CTime)
-> (Value -> Parser Int64) -> Value -> Parser CTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser Int64
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON Text where
    parseJSON :: Value -> Parser Text
parseJSON = String -> (Text -> Parser Text) -> Value -> Parser Text
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Text" Text -> Parser Text
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
instance FromJSONKey Text where
    fromJSONKey :: FromJSONKeyFunction Text
fromJSONKey = FromJSONKeyFunction Text
forall a. Coercible Text a => FromJSONKeyFunction a
fromJSONKeyCoerce
instance FromJSON LT.Text where
    parseJSON :: Value -> Parser Text
parseJSON = String -> (Text -> Parser Text) -> Value -> Parser Text
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Lazy Text" ((Text -> Parser Text) -> Value -> Parser Text)
-> (Text -> Parser Text) -> Value -> Parser Text
forall a b. (a -> b) -> a -> b
$ Text -> Parser Text
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> Parser Text) -> (Text -> Text) -> Text -> Parser Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
LT.fromStrict
instance FromJSONKey LT.Text where
    fromJSONKey :: FromJSONKeyFunction Text
fromJSONKey = (Text -> Text) -> FromJSONKeyFunction Text
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText Text -> Text
LT.fromStrict
instance FromJSON ST.ShortText where
    parseJSON :: Value -> Parser ShortText
parseJSON = String -> (Text -> Parser ShortText) -> Value -> Parser ShortText
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ShortText" ((Text -> Parser ShortText) -> Value -> Parser ShortText)
-> (Text -> Parser ShortText) -> Value -> Parser ShortText
forall a b. (a -> b) -> a -> b
$ ShortText -> Parser ShortText
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ShortText -> Parser ShortText)
-> (Text -> ShortText) -> Text -> Parser ShortText
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ShortText
ST.fromText
instance FromJSONKey ST.ShortText where
    fromJSONKey :: FromJSONKeyFunction ShortText
fromJSONKey = (Text -> ShortText) -> FromJSONKeyFunction ShortText
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText Text -> ShortText
ST.fromText
instance FromJSON Version where
    parseJSON :: Value -> Parser Version
parseJSON = String -> (Text -> Parser Version) -> Value -> Parser Version
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Version" Text -> Parser Version
parseVersionText
instance FromJSONKey Version where
    fromJSONKey :: FromJSONKeyFunction Version
fromJSONKey = (Text -> Parser Version) -> FromJSONKeyFunction Version
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser Text -> Parser Version
parseVersionText
parseVersionText :: Text -> Parser Version
parseVersionText :: Text -> Parser Version
parseVersionText = [(Version, String)] -> Parser Version
forall {m :: * -> *} {a} {a}. MonadFail m => [(a, [a])] -> m a
go ([(Version, String)] -> Parser Version)
-> (Text -> [(Version, String)]) -> Text -> Parser Version
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReadP Version -> ReadS Version
forall a. ReadP a -> ReadS a
readP_to_S ReadP Version
parseVersion ReadS Version -> (Text -> String) -> Text -> [(Version, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
unpack
  where
    go :: [(a, [a])] -> m a
go [(a
v,[])] = a -> m a
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
v
    go ((a, [a])
_ : [(a, [a])]
xs) = [(a, [a])] -> m a
go [(a, [a])]
xs
    go [(a, [a])]
_        = String -> m a
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"parsing Version failed"
instance FromJSON1 NonEmpty where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (NonEmpty a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String
-> (Array -> Parser (NonEmpty a)) -> Value -> Parser (NonEmpty a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"NonEmpty" ((Array -> Parser (NonEmpty a)) -> Value -> Parser (NonEmpty a))
-> (Array -> Parser (NonEmpty a)) -> Value -> Parser (NonEmpty a)
forall a b. (a -> b) -> a -> b
$
        (Parser [a] -> ([a] -> Parser (NonEmpty a)) -> Parser (NonEmpty a)
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [a] -> Parser (NonEmpty a)
forall {m :: * -> *} {a}. MonadFail m => [a] -> m (NonEmpty a)
ne) (Parser [a] -> Parser (NonEmpty a))
-> (Array -> Parser [a]) -> Array -> Parser (NonEmpty a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Parser a] -> Parser [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser a] -> Parser [a])
-> (Array -> [Parser a]) -> Array -> Parser [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Value -> Parser a) -> [Int] -> [Value] -> [Parser a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p) [Int
0..] ([Value] -> [Parser a])
-> (Array -> [Value]) -> Array -> [Parser a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList
      where
        ne :: [a] -> m (NonEmpty a)
ne []     = String -> m (NonEmpty a)
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"parsing NonEmpty failed, unexpected empty list"
        ne (a
x:[a]
xs) = NonEmpty a -> m (NonEmpty a)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a
x a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
:| [a]
xs)
instance (FromJSON a) => FromJSON (NonEmpty a) where
    parseJSON :: Value -> Parser (NonEmpty a)
parseJSON = Value -> Parser (NonEmpty a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON Scientific where
    parseJSON :: Value -> Parser Scientific
parseJSON = String
-> (Scientific -> Parser Scientific) -> Value -> Parser Scientific
forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
withScientific String
"Scientific" Scientific -> Parser Scientific
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
instance FromJSON1 DList.DList where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (DList a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String -> (Array -> Parser (DList a)) -> Value -> Parser (DList a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"DList" ((Array -> Parser (DList a)) -> Value -> Parser (DList a))
-> (Array -> Parser (DList a)) -> Value -> Parser (DList a)
forall a b. (a -> b) -> a -> b
$
      ([a] -> DList a) -> Parser [a] -> Parser (DList a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> DList a
forall a. [a] -> DList a
DList.fromList (Parser [a] -> Parser (DList a))
-> (Array -> Parser [a]) -> Array -> Parser (DList a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
      [Parser a] -> Parser [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser a] -> Parser [a])
-> (Array -> [Parser a]) -> Array -> Parser [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Value -> Parser a) -> [Int] -> [Value] -> [Parser a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p) [Int
0..] ([Value] -> [Parser a])
-> (Array -> [Value]) -> Array -> [Parser a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList
instance (FromJSON a) => FromJSON (DList.DList a) where
    parseJSON :: Value -> Parser (DList a)
parseJSON = Value -> Parser (DList a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
#if MIN_VERSION_dlist(1,0,0)
instance FromJSON1 DNE.DNonEmpty where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (DNonEmpty a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String
-> (Array -> Parser (DNonEmpty a)) -> Value -> Parser (DNonEmpty a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"DNonEmpty" ((Array -> Parser (DNonEmpty a)) -> Value -> Parser (DNonEmpty a))
-> (Array -> Parser (DNonEmpty a)) -> Value -> Parser (DNonEmpty a)
forall a b. (a -> b) -> a -> b
$
        (Parser [a] -> ([a] -> Parser (DNonEmpty a)) -> Parser (DNonEmpty a)
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [a] -> Parser (DNonEmpty a)
forall {m :: * -> *} {a}. MonadFail m => [a] -> m (DNonEmpty a)
ne) (Parser [a] -> Parser (DNonEmpty a))
-> (Array -> Parser [a]) -> Array -> Parser (DNonEmpty a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Parser a] -> Parser [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser a] -> Parser [a])
-> (Array -> [Parser a]) -> Array -> Parser [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Value -> Parser a) -> [Int] -> [Value] -> [Parser a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p) [Int
0..] ([Value] -> [Parser a])
-> (Array -> [Value]) -> Array -> [Parser a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList
      where
        ne :: [a] -> m (DNonEmpty a)
ne []     = String -> m (DNonEmpty a)
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"parsing DNonEmpty failed, unexpected empty list"
        ne (a
x:[a]
xs) = DNonEmpty a -> m (DNonEmpty a)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NonEmpty a -> DNonEmpty a
forall a. NonEmpty a -> DNonEmpty a
DNE.fromNonEmpty (a
x a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
:| [a]
xs))
instance (FromJSON a) => FromJSON (DNE.DNonEmpty a) where
    parseJSON :: Value -> Parser (DNonEmpty a)
parseJSON = Value -> Parser (DNonEmpty a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
#endif
instance FromJSON1 Solo where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Solo a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> Solo a
forall a. a -> Solo a
Solo (a -> Solo a) -> Parser a -> Parser (Solo a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Solo a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> Solo a) -> [a] -> [Solo a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Solo a
forall a. a -> Solo a
Solo ([a] -> [Solo a]) -> Parser [a] -> Parser [Solo a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Solo a) where
    parseJSON :: Value -> Parser (Solo a)
parseJSON = Value -> Parser (Solo a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Solo a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Solo a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Solo a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSONKey a) => FromJSONKey (Solo a) where
    fromJSONKey :: FromJSONKeyFunction (Solo a)
fromJSONKey     = (a -> Solo a)
-> FromJSONKeyFunction a -> FromJSONKeyFunction (Solo a)
forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Solo a
forall a. a -> Solo a
Solo FromJSONKeyFunction a
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey
    fromJSONKeyList :: FromJSONKeyFunction [Solo a]
fromJSONKeyList = ([a] -> [Solo a])
-> FromJSONKeyFunction [a] -> FromJSONKeyFunction [Solo a]
forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> Solo a) -> [a] -> [Solo a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Solo a
forall a. a -> Solo a
Solo) FromJSONKeyFunction [a]
forall a. FromJSONKey a => FromJSONKeyFunction [a]
fromJSONKeyList
instance FromJSON1 Identity where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Identity a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> Identity a
forall a. a -> Identity a
Identity (a -> Identity a) -> Parser a -> Parser (Identity a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Identity a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> Identity a) -> [a] -> [Identity a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Identity a
forall a. a -> Identity a
Identity ([a] -> [Identity a]) -> Parser [a] -> Parser [Identity a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Identity a) where
    parseJSON :: Value -> Parser (Identity a)
parseJSON = Value -> Parser (Identity a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Identity a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Identity a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Identity a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSONKey a) => FromJSONKey (Identity a) where
    fromJSONKey :: FromJSONKeyFunction (Identity a)
fromJSONKey = FromJSONKeyFunction a -> FromJSONKeyFunction (Identity a)
forall a b.
Coercible a b =>
FromJSONKeyFunction a -> FromJSONKeyFunction b
coerceFromJSONKeyFunction (FromJSONKeyFunction a
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey :: FromJSONKeyFunction a)
    fromJSONKeyList :: FromJSONKeyFunction [Identity a]
fromJSONKeyList = FromJSONKeyFunction [a] -> FromJSONKeyFunction [Identity a]
forall a b.
Coercible a b =>
FromJSONKeyFunction a -> FromJSONKeyFunction b
coerceFromJSONKeyFunction (FromJSONKeyFunction [a]
forall a. FromJSONKey a => FromJSONKeyFunction [a]
fromJSONKeyList :: FromJSONKeyFunction [a])
instance (FromJSON1 f, FromJSON1 g) => FromJSON1 (Compose f g) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Compose f g a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl Value
a = f (g a) -> Compose f g a
forall {k} {k1} (f :: k -> *) (g :: k1 -> k) (a :: k1).
f (g a) -> Compose f g a
Compose (f (g a) -> Compose f g a)
-> Parser (f (g a)) -> Parser (Compose f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser (g a))
-> (Value -> Parser [g a]) -> Value -> Parser (f (g a))
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser (g a)
g Value -> Parser [g a]
gl Value
a
      where
        g :: Value -> Parser (g a)
g  = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl
        gl :: Value -> Parser [g a]
gl = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
p Value -> Parser [a]
pl
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Compose f g a]
liftParseJSONList Value -> Parser a
p Value -> Parser [a]
pl Value
a = (f (g a) -> Compose f g a) -> [f (g a)] -> [Compose f g a]
forall a b. (a -> b) -> [a] -> [b]
map f (g a) -> Compose f g a
forall {k} {k1} (f :: k -> *) (g :: k1 -> k) (a :: k1).
f (g a) -> Compose f g a
Compose ([f (g a)] -> [Compose f g a])
-> Parser [f (g a)] -> Parser [Compose f g a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser (g a))
-> (Value -> Parser [g a]) -> Value -> Parser [f (g a)]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser (g a)
g Value -> Parser [g a]
gl Value
a
      where
        g :: Value -> Parser (g a)
g  = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl
        gl :: Value -> Parser [g a]
gl = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
p Value -> Parser [a]
pl
instance (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Compose f g a) where
    parseJSON :: Value -> Parser (Compose f g a)
parseJSON = Value -> Parser (Compose f g a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Compose f g a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Compose f g a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Compose f g a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON1 f, FromJSON1 g) => FromJSON1 (Product f g) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Product f g a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl Value
a = (f a -> g a -> Product f g a) -> (f a, g a) -> Product f g a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry f a -> g a -> Product f g a
forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Pair ((f a, g a) -> Product f g a)
-> Parser (f a, g a) -> Parser (Product f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser (f a))
-> (Value -> Parser [f a])
-> (Value -> Parser (g a))
-> (Value -> Parser [g a])
-> Value
-> Parser (f a, g a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser (f a)
px Value -> Parser [f a]
pxl Value -> Parser (g a)
py Value -> Parser [g a]
pyl Value
a
      where
        px :: Value -> Parser (f a)
px  = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl
        pxl :: Value -> Parser [f a]
pxl = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
p Value -> Parser [a]
pl
        py :: Value -> Parser (g a)
py  = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl
        pyl :: Value -> Parser [g a]
pyl = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [g a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
p Value -> Parser [a]
pl
instance (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Product f g a) where
    parseJSON :: Value -> Parser (Product f g a)
parseJSON = Value -> Parser (Product f g a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance (FromJSON1 f, FromJSON1 g) => FromJSON1 (Sum f g) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Sum f g a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl (Object (Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList -> [(Key
key, Value
value)]))
        | Key
key Key -> Key -> Bool
forall a. Eq a => a -> a -> Bool
== Key
inl = f a -> Sum f g a
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (f a -> Sum f g a) -> Parser (f a) -> Parser (Sum f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl Value
value Parser (f a) -> JSONPathElement -> Parser (f a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
inl
        | Key
key Key -> Key -> Bool
forall a. Eq a => a -> a -> Bool
== Key
inr = g a -> Sum f g a
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). g a -> Sum f g a
InR (g a -> Sum f g a) -> Parser (g a) -> Parser (Sum f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl Value
value Parser (g a) -> JSONPathElement -> Parser (g a)
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
inr
      where
        inl, inr :: Key
        inl :: Key
inl = Key
"InL"
        inr :: Key
inr = Key
"InR"
    liftParseJSON Value -> Parser a
_ Value -> Parser [a]
_ Value
_ = String -> Parser (Sum f g a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (Sum f g a)) -> String -> Parser (Sum f g a)
forall a b. (a -> b) -> a -> b
$
        String
"parsing Sum failed, expected an object with a single property " String -> String -> String
forall a. [a] -> [a] -> [a]
++
        String
"where the property key should be either " String -> String -> String
forall a. [a] -> [a] -> [a]
++
        String
"\"InL\" or \"InR\""
instance (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Sum f g a) where
    parseJSON :: Value -> Parser (Sum f g a)
parseJSON = Value -> Parser (Sum f g a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON1 Seq.Seq where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Seq a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String -> (Array -> Parser (Seq a)) -> Value -> Parser (Seq a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"Seq" ((Array -> Parser (Seq a)) -> Value -> Parser (Seq a))
-> (Array -> Parser (Seq a)) -> Value -> Parser (Seq a)
forall a b. (a -> b) -> a -> b
$
      ([a] -> Seq a) -> Parser [a] -> Parser (Seq a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> Seq a
forall a. [a] -> Seq a
Seq.fromList (Parser [a] -> Parser (Seq a))
-> (Array -> Parser [a]) -> Array -> Parser (Seq a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
      [Parser a] -> Parser [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser a] -> Parser [a])
-> (Array -> [Parser a]) -> Array -> Parser [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Value -> Parser a) -> [Int] -> [Value] -> [Parser a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p) [Int
0..] ([Value] -> [Parser a])
-> (Array -> [Value]) -> Array -> [Parser a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList
instance (FromJSON a) => FromJSON (Seq.Seq a) where
    parseJSON :: Value -> Parser (Seq a)
parseJSON = Value -> Parser (Seq a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance (Ord a, FromJSON a) => FromJSON (Set.Set a) where
    parseJSON :: Value -> Parser (Set a)
parseJSON = ([a] -> Set a) -> Parser [a] -> Parser (Set a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> Set a
forall a. Ord a => [a] -> Set a
Set.fromList (Parser [a] -> Parser (Set a))
-> (Value -> Parser [a]) -> Value -> Parser (Set a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON IntSet.IntSet where
    parseJSON :: Value -> Parser IntSet
parseJSON = ([Int] -> IntSet) -> Parser [Int] -> Parser IntSet
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Int] -> IntSet
IntSet.fromList (Parser [Int] -> Parser IntSet)
-> (Value -> Parser [Int]) -> Value -> Parser IntSet
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [Int]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON1 IntMap.IntMap where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (IntMap a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl = ([(Int, a)] -> IntMap a) -> Parser [(Int, a)] -> Parser (IntMap a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(Int, a)] -> IntMap a
forall a. [(Int, a)] -> IntMap a
IntMap.fromList (Parser [(Int, a)] -> Parser (IntMap a))
-> (Value -> Parser [(Int, a)]) -> Value -> Parser (IntMap a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser (Int, a))
-> (Value -> Parser [(Int, a)]) -> Value -> Parser [(Int, a)]
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser (Int, a)
p' Value -> Parser [(Int, a)]
pl'
      where
        p' :: Value -> Parser (Int, a)
p'  = (Value -> Parser Int)
-> (Value -> Parser [Int])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (Int, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2     Value -> Parser Int
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [Int]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList Value -> Parser a
p Value -> Parser [a]
pl
        pl' :: Value -> Parser [(Int, a)]
pl' = (Value -> Parser Int)
-> (Value -> Parser [Int])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser [(Int, a)]
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser [(a, b)]
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser [f a b]
liftParseJSONList2 Value -> Parser Int
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [Int]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList Value -> Parser a
p Value -> Parser [a]
pl
instance FromJSON a => FromJSON (IntMap.IntMap a) where
    parseJSON :: Value -> Parser (IntMap a)
parseJSON = ([(Int, a)] -> IntMap a) -> Parser [(Int, a)] -> Parser (IntMap a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(Int, a)] -> IntMap a
forall a. [(Int, a)] -> IntMap a
IntMap.fromList (Parser [(Int, a)] -> Parser (IntMap a))
-> (Value -> Parser [(Int, a)]) -> Value -> Parser (IntMap a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [(Int, a)]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (FromJSONKey k, Ord k) => FromJSON1 (M.Map k) where
    liftParseJSON :: forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (M.Map k a)
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Map k a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = case FromJSONKeyFunction k
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey of
        FromJSONKeyFunction k
FromJSONKeyCoerce -> String -> (Object -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Map ~Text" ((Object -> Parser (Map k a)) -> Value -> Parser (Map k a))
-> (Object -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a b. (a -> b) -> a -> b
$ case Maybe (Coercion Key Text)
Key.coercionToText of
            Maybe (Coercion Key Text)
Nothing       -> (Text -> k) -> Object -> Parser (Map k a)
text Text -> k
forall a b. Coercible a b => a -> b
coerce
            Just Coercion Key Text
Coercion -> case Maybe (Coercion (Map Key Any) (KeyMap Any))
forall v. Maybe (Coercion (Map Key v) (KeyMap v))
KM.coercionToMap of
                Maybe (Coercion (Map Key Any) (KeyMap Any))
Nothing       -> (Text -> k) -> Object -> Parser (Map k a)
text Text -> k
forall a b. Coercible a b => a -> b
coerce
                Just Coercion (Map Key Any) (KeyMap Any)
Coercion -> Coercible Key k => Parser (Map Key a) -> Parser (Map k a)
Parser (Map Key a) -> Parser (Map k a)
uc (Parser (Map Key a) -> Parser (Map k a))
-> (Object -> Parser (Map Key a)) -> Object -> Parser (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a) -> Map Key Value -> Parser (Map Key a)
forall (t :: * -> *) k a b.
Applicative t =>
(k -> a -> t b) -> Map k a -> t (Map k b)
M.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k) (Map Key Value -> Parser (Map Key a))
-> (Object -> Map Key Value) -> Object -> Parser (Map Key a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> Map Key Value
forall v. KeyMap v -> Map Key v
KM.toMap
        FromJSONKeyText Text -> k
f -> String -> (Object -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Map" ((Text -> k) -> Object -> Parser (Map k a)
text Text -> k
f)
        FromJSONKeyTextParser Text -> Parser k
f -> String -> (Object -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Map" ((Object -> Parser (Map k a)) -> Value -> Parser (Map k a))
-> (Object -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a b. (a -> b) -> a -> b
$
            (Key -> Value -> Parser (Map k a) -> Parser (Map k a))
-> Parser (Map k a) -> Object -> Parser (Map k a)
forall v a. (Key -> v -> a -> a) -> a -> KeyMap v -> a
KM.foldrWithKey
                (\Key
k Value
v Parser (Map k a)
m -> k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert (k -> a -> Map k a -> Map k a)
-> Parser k -> Parser (a -> Map k a -> Map k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parser k
f (Key -> Text
Key.toText Key
k) Parser k -> JSONPathElement -> Parser k
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k Parser (a -> Map k a -> Map k a)
-> Parser a -> Parser (Map k a -> Map k a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k Parser (Map k a -> Map k a) -> Parser (Map k a) -> Parser (Map k a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Map k a)
m)
                (Map k a -> Parser (Map k a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map k a
forall k a. Map k a
M.empty)
        FromJSONKeyValue Value -> Parser k
f -> String -> (Array -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"Map" ((Array -> Parser (Map k a)) -> Value -> Parser (Map k a))
-> (Array -> Parser (Map k a)) -> Value -> Parser (Map k a)
forall a b. (a -> b) -> a -> b
$ \Array
arr ->
            ([(k, a)] -> Map k a) -> Parser [(k, a)] -> Parser (Map k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> Map k a
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList (Parser [(k, a)] -> Parser (Map k a))
-> (Array -> Parser [(k, a)]) -> Array -> Parser (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Parser (k, a)] -> Parser [(k, a)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser (k, a)] -> Parser [(k, a)])
-> (Array -> [Parser (k, a)]) -> Array -> Parser [(k, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                (Int -> Value -> Parser (k, a))
-> [Int] -> [Value] -> [Parser (k, a)]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser k)
-> (Value -> Parser a) -> Int -> Value -> Parser (k, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser b) -> Int -> Value -> Parser (a, b)
parseIndexedJSONPair Value -> Parser k
f Value -> Parser a
p) [Int
0..] ([Value] -> [Parser (k, a)])
-> (Array -> [Value]) -> Array -> [Parser (k, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList (Array -> Parser (Map k a)) -> Array -> Parser (Map k a)
forall a b. (a -> b) -> a -> b
$ Array
arr
      where
        uc :: Coercible Key k => Parser (M.Map Key a) -> Parser (M.Map k a)
        uc :: Coercible Key k => Parser (Map Key a) -> Parser (Map k a)
uc = Parser (Map Key a) -> Parser (Map k a)
forall a b. a -> b
unsafeCoerce
        text :: (Text -> k) -> Object -> Parser (Map k a)
text Text -> k
f = case Maybe (Coercion (Map Key Any) (KeyMap Any))
forall v. Maybe (Coercion (Map Key v) (KeyMap v))
KM.coercionToMap of
            Maybe (Coercion (Map Key Any) (KeyMap Any))
Nothing       -> (Text -> k) -> Object -> Parser (Map k a)
basic Text -> k
f
            Just Coercion (Map Key Any) (KeyMap Any)
Coercion -> (Map Key a -> Map k a) -> Parser (Map Key a) -> Parser (Map k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key -> k) -> Map Key a -> Map k a
forall k2 k1 v. Ord k2 => (k1 -> k2) -> Map k1 v -> Map k2 v
mapKeyO (Text -> k
f (Text -> k) -> (Key -> Text) -> Key -> k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Text
Key.toText)) (Parser (Map Key a) -> Parser (Map k a))
-> (Object -> Parser (Map Key a)) -> Object -> Parser (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a) -> Map Key Value -> Parser (Map Key a)
forall (t :: * -> *) k a b.
Applicative t =>
(k -> a -> t b) -> Map k a -> t (Map k b)
M.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k) (Map Key Value -> Parser (Map Key a))
-> (Object -> Map Key Value) -> Object -> Parser (Map Key a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> Map Key Value
forall v. KeyMap v -> Map Key v
KM.toMap
        {-# INLINE text #-}
        basic :: (Text -> k) -> Object -> Parser (Map k a)
basic Text -> k
f = (KeyMap a -> Map k a) -> Parser (KeyMap a) -> Parser (Map k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key -> a -> Map k a -> Map k a) -> Map k a -> KeyMap a -> Map k a
forall v a. (Key -> v -> a -> a) -> a -> KeyMap v -> a
KM.foldrWithKey (k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert (k -> a -> Map k a -> Map k a)
-> (Key -> k) -> Key -> a -> Map k a -> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> k
f (Text -> k) -> (Key -> Text) -> Key -> k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Text
Key.toText) Map k a
forall k a. Map k a
M.empty) (Parser (KeyMap a) -> Parser (Map k a))
-> (Object -> Parser (KeyMap a)) -> Object -> Parser (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a) -> Object -> Parser (KeyMap a)
forall (f :: * -> *) v1 v2.
Applicative f =>
(Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)
KM.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k)
        {-# INLINE basic #-}
instance (FromJSONKey k, Ord k, FromJSON v) => FromJSON (M.Map k v) where
    parseJSON :: Value -> Parser (Map k v)
parseJSON = Value -> Parser (Map k v)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON1 Tree.Tree where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Tree a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
pl = Value -> Parser (Tree a)
go
      where
        go :: Value -> Parser (Tree a)
go Value
v = (a -> [Tree a] -> Tree a) -> (a, [Tree a]) -> Tree a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry a -> [Tree a] -> Tree a
forall a. a -> [Tree a] -> Tree a
Tree.Node ((a, [Tree a]) -> Tree a)
-> Parser (a, [Tree a]) -> Parser (Tree a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser [Tree a])
-> (Value -> Parser [[Tree a]])
-> Value
-> Parser (a, [Tree a])
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
p Value -> Parser [a]
pl Value -> Parser [Tree a]
p' Value -> Parser [[Tree a]]
pl' Value
v
        p' :: Value -> Parser [Tree a]
p' = (Value -> Parser (Tree a))
-> (Value -> Parser [Tree a]) -> Value -> Parser [Tree a]
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser (Tree a)
go ((Value -> Parser (Tree a)) -> Value -> Parser [Tree a]
forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser Value -> Parser (Tree a)
go)
        pl' :: Value -> Parser [[Tree a]]
pl'= (Value -> Parser (Tree a))
-> (Value -> Parser [Tree a]) -> Value -> Parser [[Tree a]]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [[a]]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser (Tree a)
go ((Value -> Parser (Tree a)) -> Value -> Parser [Tree a]
forall a. (Value -> Parser a) -> Value -> Parser [a]
listParser Value -> Parser (Tree a)
go)
instance (FromJSON v) => FromJSON (Tree.Tree v) where
    parseJSON :: Value -> Parser (Tree v)
parseJSON = Value -> Parser (Tree v)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON UUID.UUID where
    parseJSON :: Value -> Parser UUID
parseJSON = String -> (Text -> Parser UUID) -> Value -> Parser UUID
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"UUID" ((Text -> Parser UUID) -> Value -> Parser UUID)
-> (Text -> Parser UUID) -> Value -> Parser UUID
forall a b. (a -> b) -> a -> b
$
        Parser UUID -> (UUID -> Parser UUID) -> Maybe UUID -> Parser UUID
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Parser UUID
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"invalid UUID") UUID -> Parser UUID
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe UUID -> Parser UUID)
-> (Text -> Maybe UUID) -> Text -> Parser UUID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe UUID
UUID.fromText
instance FromJSONKey UUID.UUID where
    fromJSONKey :: FromJSONKeyFunction UUID
fromJSONKey = (Text -> Parser UUID) -> FromJSONKeyFunction UUID
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser UUID) -> FromJSONKeyFunction UUID)
-> (Text -> Parser UUID) -> FromJSONKeyFunction UUID
forall a b. (a -> b) -> a -> b
$
        Parser UUID -> (UUID -> Parser UUID) -> Maybe UUID -> Parser UUID
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Parser UUID
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"invalid UUID") UUID -> Parser UUID
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe UUID -> Parser UUID)
-> (Text -> Maybe UUID) -> Text -> Parser UUID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe UUID
UUID.fromText
instance FromJSON1 Vector where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Vector a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String
-> (Array -> Parser (Vector a)) -> Value -> Parser (Vector a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"Vector" ((Array -> Parser (Vector a)) -> Value -> Parser (Vector a))
-> (Array -> Parser (Vector a)) -> Value -> Parser (Vector a)
forall a b. (a -> b) -> a -> b
$
        ((Int, Value) -> Parser a)
-> Vector (Int, Value) -> Parser (Vector a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Vector a -> m (Vector b)
V.mapM ((Int -> Value -> Parser a) -> (Int, Value) -> Parser a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Int -> Value -> Parser a) -> (Int, Value) -> Parser a)
-> (Int -> Value -> Parser a) -> (Int, Value) -> Parser a
forall a b. (a -> b) -> a -> b
$ (Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
p) (Vector (Int, Value) -> Parser (Vector a))
-> (Array -> Vector (Int, Value)) -> Array -> Parser (Vector a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> Vector (Int, Value)
forall a. Vector a -> Vector (Int, a)
V.indexed
instance (FromJSON a) => FromJSON (Vector a) where
    parseJSON :: Value -> Parser (Vector a)
parseJSON = Value -> Parser (Vector a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
vectorParseJSON :: (FromJSON a, VG.Vector w a) => String -> Value -> Parser (w a)
vectorParseJSON :: forall a (w :: * -> *).
(FromJSON a, Vector w a) =>
String -> Value -> Parser (w a)
vectorParseJSON String
s = String -> (Array -> Parser (w a)) -> Value -> Parser (w a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
s ((Array -> Parser (w a)) -> Value -> Parser (w a))
-> (Array -> Parser (w a)) -> Value -> Parser (w a)
forall a b. (a -> b) -> a -> b
$ (Vector a -> w a) -> Parser (Vector a) -> Parser (w a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Vector a -> w a
forall (v :: * -> *) a (w :: * -> *).
(Vector v a, Vector w a) =>
v a -> w a
V.convert (Parser (Vector a) -> Parser (w a))
-> (Array -> Parser (Vector a)) -> Array -> Parser (w a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Int, Value) -> Parser a)
-> Vector (Int, Value) -> Parser (Vector a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Vector a -> m (Vector b)
V.mapM ((Int -> Value -> Parser a) -> (Int, Value) -> Parser a
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Int -> Value -> Parser a) -> (Int, Value) -> Parser a)
-> (Int -> Value -> Parser a) -> (Int, Value) -> Parser a
forall a b. (a -> b) -> a -> b
$ (Value -> Parser a) -> Int -> Value -> Parser a
forall a. (Value -> Parser a) -> Int -> Value -> Parser a
parseIndexedJSON Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON) (Vector (Int, Value) -> Parser (Vector a))
-> (Array -> Vector (Int, Value)) -> Array -> Parser (Vector a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> Vector (Int, Value)
forall a. Vector a -> Vector (Int, a)
V.indexed
instance (Storable a, FromJSON a) => FromJSON (VS.Vector a) where
    parseJSON :: Value -> Parser (Vector a)
parseJSON = String -> Value -> Parser (Vector a)
forall a (w :: * -> *).
(FromJSON a, Vector w a) =>
String -> Value -> Parser (w a)
vectorParseJSON String
"Data.Vector.Storable.Vector"
instance (VP.Prim a, FromJSON a) => FromJSON (VP.Vector a) where
    parseJSON :: Value -> Parser (Vector a)
parseJSON = String -> Value -> Parser (Vector a)
forall a (w :: * -> *).
(FromJSON a, Vector w a) =>
String -> Value -> Parser (w a)
vectorParseJSON String
"Data.Vector.Primitive.Vector"
instance (VG.Vector VU.Vector a, FromJSON a) => FromJSON (VU.Vector a) where
    parseJSON :: Value -> Parser (Vector a)
parseJSON = String -> Value -> Parser (Vector a)
forall a (w :: * -> *).
(FromJSON a, Vector w a) =>
String -> Value -> Parser (w a)
vectorParseJSON String
"Data.Vector.Unboxed.Vector"
instance (Eq a, Hashable a, FromJSON a) => FromJSON (HashSet.HashSet a) where
    parseJSON :: Value -> Parser (HashSet a)
parseJSON = ([a] -> HashSet a) -> Parser [a] -> Parser (HashSet a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HashSet.fromList (Parser [a] -> Parser (HashSet a))
-> (Value -> Parser [a]) -> Value -> Parser (HashSet a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (FromJSONKey k, Eq k, Hashable k) => FromJSON1 (H.HashMap k) where
    liftParseJSON :: forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (H.HashMap k a)
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (HashMap k a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = case FromJSONKeyFunction k
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey of
        FromJSONKeyFunction k
FromJSONKeyCoerce -> String
-> (Object -> Parser (HashMap k a))
-> Value
-> Parser (HashMap k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"HashMap ~Text" ((Object -> Parser (HashMap k a)) -> Value -> Parser (HashMap k a))
-> (Object -> Parser (HashMap k a))
-> Value
-> Parser (HashMap k a)
forall a b. (a -> b) -> a -> b
$ case Maybe (Coercion Key Text)
Key.coercionToText of
            Maybe (Coercion Key Text)
Nothing       -> (Text -> k) -> Object -> Parser (HashMap k a)
text Text -> k
forall a b. Coercible a b => a -> b
coerce
            Just Coercion Key Text
Coercion -> case Maybe (Coercion (HashMap Key Any) (KeyMap Any))
forall v. Maybe (Coercion (HashMap Key v) (KeyMap v))
KM.coercionToHashMap of
                Maybe (Coercion (HashMap Key Any) (KeyMap Any))
Nothing       -> (Text -> k) -> Object -> Parser (HashMap k a)
text Text -> k
forall a b. Coercible a b => a -> b
coerce
                Just Coercion (HashMap Key Any) (KeyMap Any)
Coercion -> Coercible Key k => Parser (HashMap Key a) -> Parser (HashMap k a)
Parser (HashMap Key a) -> Parser (HashMap k a)
uc (Parser (HashMap Key a) -> Parser (HashMap k a))
-> (Object -> Parser (HashMap Key a))
-> Object
-> Parser (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a)
-> HashMap Key Value -> Parser (HashMap Key a)
forall (f :: * -> *) k v1 v2.
Applicative f =>
(k -> v1 -> f v2) -> HashMap k v1 -> f (HashMap k v2)
H.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k) (HashMap Key Value -> Parser (HashMap Key a))
-> (Object -> HashMap Key Value)
-> Object
-> Parser (HashMap Key a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> HashMap Key Value
forall v. KeyMap v -> HashMap Key v
KM.toHashMap
        FromJSONKeyText Text -> k
f -> String
-> (Object -> Parser (HashMap k a))
-> Value
-> Parser (HashMap k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"HashMap" ((Text -> k) -> Object -> Parser (HashMap k a)
text Text -> k
f)
        FromJSONKeyTextParser Text -> Parser k
f -> String
-> (Object -> Parser (HashMap k a))
-> Value
-> Parser (HashMap k a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"HashMap" ((Object -> Parser (HashMap k a)) -> Value -> Parser (HashMap k a))
-> (Object -> Parser (HashMap k a))
-> Value
-> Parser (HashMap k a)
forall a b. (a -> b) -> a -> b
$
            (Key -> Value -> Parser (HashMap k a) -> Parser (HashMap k a))
-> Parser (HashMap k a) -> Object -> Parser (HashMap k a)
forall v a. (Key -> v -> a -> a) -> a -> KeyMap v -> a
KM.foldrWithKey
                (\Key
k Value
v Parser (HashMap k a)
m -> k -> a -> HashMap k a -> HashMap k a
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
H.insert (k -> a -> HashMap k a -> HashMap k a)
-> Parser k -> Parser (a -> HashMap k a -> HashMap k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parser k
f (Key -> Text
Key.toText Key
k) Parser k -> JSONPathElement -> Parser k
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k Parser (a -> HashMap k a -> HashMap k a)
-> Parser a -> Parser (HashMap k a -> HashMap k a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k Parser (HashMap k a -> HashMap k a)
-> Parser (HashMap k a) -> Parser (HashMap k a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (HashMap k a)
m)
                (HashMap k a -> Parser (HashMap k a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure HashMap k a
forall k v. HashMap k v
H.empty)
        FromJSONKeyValue Value -> Parser k
f -> String
-> (Array -> Parser (HashMap k a)) -> Value -> Parser (HashMap k a)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"Map" ((Array -> Parser (HashMap k a)) -> Value -> Parser (HashMap k a))
-> (Array -> Parser (HashMap k a)) -> Value -> Parser (HashMap k a)
forall a b. (a -> b) -> a -> b
$ \Array
arr ->
            ([(k, a)] -> HashMap k a)
-> Parser [(k, a)] -> Parser (HashMap k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> HashMap k a
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
H.fromList (Parser [(k, a)] -> Parser (HashMap k a))
-> (Array -> Parser [(k, a)]) -> Array -> Parser (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Parser (k, a)] -> Parser [(k, a)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
Tr.sequence ([Parser (k, a)] -> Parser [(k, a)])
-> (Array -> [Parser (k, a)]) -> Array -> Parser [(k, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                (Int -> Value -> Parser (k, a))
-> [Int] -> [Value] -> [Parser (k, a)]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Value -> Parser k)
-> (Value -> Parser a) -> Int -> Value -> Parser (k, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser b) -> Int -> Value -> Parser (a, b)
parseIndexedJSONPair Value -> Parser k
f Value -> Parser a
p) [Int
0..] ([Value] -> [Parser (k, a)])
-> (Array -> [Value]) -> Array -> [Parser (k, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array -> [Value]
forall a. Vector a -> [a]
V.toList (Array -> Parser (HashMap k a)) -> Array -> Parser (HashMap k a)
forall a b. (a -> b) -> a -> b
$ Array
arr
      where
        uc :: Coercible Key k => Parser (H.HashMap Key a) -> Parser (H.HashMap k a)
        uc :: Coercible Key k => Parser (HashMap Key a) -> Parser (HashMap k a)
uc = Parser (HashMap Key a) -> Parser (HashMap k a)
forall a b. a -> b
unsafeCoerce
        text :: (Text -> k) -> Object -> Parser (HashMap k a)
text Text -> k
f = case Maybe (Coercion (HashMap Key Any) (KeyMap Any))
forall v. Maybe (Coercion (HashMap Key v) (KeyMap v))
KM.coercionToHashMap of
            Maybe (Coercion (HashMap Key Any) (KeyMap Any))
Nothing       -> (Text -> k) -> Object -> Parser (HashMap k a)
basic Text -> k
f
            Just Coercion (HashMap Key Any) (KeyMap Any)
Coercion -> (HashMap Key a -> HashMap k a)
-> Parser (HashMap Key a) -> Parser (HashMap k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key -> k) -> HashMap Key a -> HashMap k a
forall k2 k1 v.
(Eq k2, Hashable k2) =>
(k1 -> k2) -> HashMap k1 v -> HashMap k2 v
mapKey (Text -> k
f (Text -> k) -> (Key -> Text) -> Key -> k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Text
Key.toText)) (Parser (HashMap Key a) -> Parser (HashMap k a))
-> (Object -> Parser (HashMap Key a))
-> Object
-> Parser (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a)
-> HashMap Key Value -> Parser (HashMap Key a)
forall (f :: * -> *) k v1 v2.
Applicative f =>
(k -> v1 -> f v2) -> HashMap k v1 -> f (HashMap k v2)
H.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k) (HashMap Key Value -> Parser (HashMap Key a))
-> (Object -> HashMap Key Value)
-> Object
-> Parser (HashMap Key a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> HashMap Key Value
forall v. KeyMap v -> HashMap Key v
KM.toHashMap
        {-# INLINE text #-}
        basic :: (Text -> k) -> Object -> Parser (HashMap k a)
basic Text -> k
f = (KeyMap a -> HashMap k a)
-> Parser (KeyMap a) -> Parser (HashMap k a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key -> a -> HashMap k a -> HashMap k a)
-> HashMap k a -> KeyMap a -> HashMap k a
forall v a. (Key -> v -> a -> a) -> a -> KeyMap v -> a
KM.foldrWithKey (k -> a -> HashMap k a -> HashMap k a
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
H.insert (k -> a -> HashMap k a -> HashMap k a)
-> (Key -> k) -> Key -> a -> HashMap k a -> HashMap k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> k
f (Text -> k) -> (Key -> Text) -> Key -> k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> Text
Key.toText) HashMap k a
forall k v. HashMap k v
H.empty) (Parser (KeyMap a) -> Parser (HashMap k a))
-> (Object -> Parser (KeyMap a)) -> Object -> Parser (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key -> Value -> Parser a) -> Object -> Parser (KeyMap a)
forall (f :: * -> *) v1 v2.
Applicative f =>
(Key -> v1 -> f v2) -> KeyMap v1 -> f (KeyMap v2)
KM.traverseWithKey (\Key
k Value
v -> Value -> Parser a
p Value
v Parser a -> JSONPathElement -> Parser a
forall a. Parser a -> JSONPathElement -> Parser a
<?> Key -> JSONPathElement
Key Key
k)
        {-# INLINE basic #-}
instance (FromJSON v, FromJSONKey k, Eq k, Hashable k) => FromJSON (H.HashMap k v) where
    parseJSON :: Value -> Parser (HashMap k v)
parseJSON = Value -> Parser (HashMap k v)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON Key where
    parseJSON :: Value -> Parser Key
parseJSON = String -> (Text -> Parser Key) -> Value -> Parser Key
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Key" (Key -> Parser Key
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Key -> Parser Key) -> (Text -> Key) -> Text -> Parser Key
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Key
Key.fromText)
instance FromJSONKey Key where
    fromJSONKey :: FromJSONKeyFunction Key
fromJSONKey = case Maybe (Coercion Key Text) -> Maybe (Coercion Key Text)
forall a. a -> a
oldGHC Maybe (Coercion Key Text)
Key.coercionToText of
        Just Coercion Key Text
Coercion -> FromJSONKeyFunction Key
forall a. Coercible Text a => FromJSONKeyFunction a
FromJSONKeyCoerce
        Maybe (Coercion Key Text)
Nothing       -> (Text -> Key) -> FromJSONKeyFunction Key
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText Text -> Key
Key.fromText
      where
#if __GLASGOW_HASKELL__ < 804
        
        oldGHC = fmap Data.Type.Coercion.sym
#else
        oldGHC :: a -> a
oldGHC = a -> a
forall a. a -> a
id
#endif
instance FromJSON1 KM.KeyMap where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (KeyMap a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = String
-> (Object -> Parser (KeyMap a)) -> Value -> Parser (KeyMap a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"KeyMap" ((Object -> Parser (KeyMap a)) -> Value -> Parser (KeyMap a))
-> (Object -> Parser (KeyMap a)) -> Value -> Parser (KeyMap a)
forall a b. (a -> b) -> a -> b
$ \Object
obj ->
        (Value -> Parser a) -> Object -> Parser (KeyMap a)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> KeyMap a -> f (KeyMap b)
traverse Value -> Parser a
p Object
obj
instance FromJSON v => FromJSON (KM.KeyMap v) where
    parseJSON :: Value -> Parser (KeyMap v)
parseJSON = Value -> Parser (KeyMap v)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON Value where
    parseJSON :: Value -> Parser Value
parseJSON = Value -> Parser Value
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
instance FromJSON DotNetTime where
    parseJSON :: Value -> Parser DotNetTime
parseJSON = String -> (Text -> Parser DotNetTime) -> Value -> Parser DotNetTime
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"DotNetTime" ((Text -> Parser DotNetTime) -> Value -> Parser DotNetTime)
-> (Text -> Parser DotNetTime) -> Value -> Parser DotNetTime
forall a b. (a -> b) -> a -> b
$ \Text
t ->
        let (Text
s,Text
m) = Int -> Text -> (Text, Text)
T.splitAt (Text -> Int
T.length Text
t Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
5) Text
t
            t' :: Text
t'    = [Text] -> Text
T.concat [Text
s,Text
".",Text
m]
        in case Bool -> TimeLocale -> String -> String -> Maybe UTCTime
forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> String -> String -> m t
parseTimeM Bool
True TimeLocale
defaultTimeLocale String
"/Date(%s%Q)/" (Text -> String
unpack Text
t') of
             Just UTCTime
d -> DotNetTime -> Parser DotNetTime
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (UTCTime -> DotNetTime
DotNetTime UTCTime
d)
             Maybe UTCTime
_      -> String -> Parser DotNetTime
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"could not parse .NET time"
instance FromJSON a => FromJSON (PM.Array a) where
  
  
  parseJSON :: Value -> Parser (Array a)
parseJSON = ([a] -> Array a) -> Parser [a] -> Parser (Array a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> Array a
[Item (Array a)] -> Array a
forall l. IsList l => [Item l] -> l
Exts.fromList (Parser [a] -> Parser (Array a))
-> (Value -> Parser [a]) -> Value -> Parser (Array a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON a => FromJSON (PM.SmallArray a) where
  parseJSON :: Value -> Parser (SmallArray a)
parseJSON = ([a] -> SmallArray a) -> Parser [a] -> Parser (SmallArray a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> SmallArray a
[Item (SmallArray a)] -> SmallArray a
forall l. IsList l => [Item l] -> l
Exts.fromList (Parser [a] -> Parser (SmallArray a))
-> (Value -> Parser [a]) -> Value -> Parser (SmallArray a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (PM.Prim a,FromJSON a) => FromJSON (PM.PrimArray a) where
  parseJSON :: Value -> Parser (PrimArray a)
parseJSON = ([a] -> PrimArray a) -> Parser [a] -> Parser (PrimArray a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> PrimArray a
[Item (PrimArray a)] -> PrimArray a
forall l. IsList l => [Item l] -> l
Exts.fromList (Parser [a] -> Parser (PrimArray a))
-> (Value -> Parser [a]) -> Value -> Parser (PrimArray a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser [a]
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON Day where
    parseJSON :: Value -> Parser Day
parseJSON = String -> (Text -> Parser Day) -> Value -> Parser Day
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Day" (Parser Day -> Text -> Parser Day
forall a. Parser a -> Text -> Parser a
Time.run Parser Day
Time.day)
instance FromJSONKey Day where
    fromJSONKey :: FromJSONKeyFunction Day
fromJSONKey = (Text -> Parser Day) -> FromJSONKeyFunction Day
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser Day -> Text -> Parser Day
forall a. Parser a -> Text -> Parser a
Time.run Parser Day
Time.day)
instance FromJSON TimeOfDay where
    parseJSON :: Value -> Parser TimeOfDay
parseJSON = String -> (Text -> Parser TimeOfDay) -> Value -> Parser TimeOfDay
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"TimeOfDay" (Parser TimeOfDay -> Text -> Parser TimeOfDay
forall a. Parser a -> Text -> Parser a
Time.run Parser TimeOfDay
Time.timeOfDay)
instance FromJSONKey TimeOfDay where
    fromJSONKey :: FromJSONKeyFunction TimeOfDay
fromJSONKey = (Text -> Parser TimeOfDay) -> FromJSONKeyFunction TimeOfDay
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser TimeOfDay -> Text -> Parser TimeOfDay
forall a. Parser a -> Text -> Parser a
Time.run Parser TimeOfDay
Time.timeOfDay)
instance FromJSON LocalTime where
    parseJSON :: Value -> Parser LocalTime
parseJSON = String -> (Text -> Parser LocalTime) -> Value -> Parser LocalTime
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"LocalTime" (Parser LocalTime -> Text -> Parser LocalTime
forall a. Parser a -> Text -> Parser a
Time.run Parser LocalTime
Time.localTime)
instance FromJSONKey LocalTime where
    fromJSONKey :: FromJSONKeyFunction LocalTime
fromJSONKey = (Text -> Parser LocalTime) -> FromJSONKeyFunction LocalTime
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser LocalTime -> Text -> Parser LocalTime
forall a. Parser a -> Text -> Parser a
Time.run Parser LocalTime
Time.localTime)
instance FromJSON ZonedTime where
    parseJSON :: Value -> Parser ZonedTime
parseJSON = String -> (Text -> Parser ZonedTime) -> Value -> Parser ZonedTime
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ZonedTime" (Parser ZonedTime -> Text -> Parser ZonedTime
forall a. Parser a -> Text -> Parser a
Time.run Parser ZonedTime
Time.zonedTime)
instance FromJSONKey ZonedTime where
    fromJSONKey :: FromJSONKeyFunction ZonedTime
fromJSONKey = (Text -> Parser ZonedTime) -> FromJSONKeyFunction ZonedTime
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser ZonedTime -> Text -> Parser ZonedTime
forall a. Parser a -> Text -> Parser a
Time.run Parser ZonedTime
Time.zonedTime)
instance FromJSON UTCTime where
    parseJSON :: Value -> Parser UTCTime
parseJSON = String -> (Text -> Parser UTCTime) -> Value -> Parser UTCTime
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"UTCTime" (Parser UTCTime -> Text -> Parser UTCTime
forall a. Parser a -> Text -> Parser a
Time.run Parser UTCTime
Time.utcTime)
instance FromJSONKey UTCTime where
    fromJSONKey :: FromJSONKeyFunction UTCTime
fromJSONKey = (Text -> Parser UTCTime) -> FromJSONKeyFunction UTCTime
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser UTCTime -> Text -> Parser UTCTime
forall a. Parser a -> Text -> Parser a
Time.run Parser UTCTime
Time.utcTime)
instance FromJSON NominalDiffTime where
    parseJSON :: Value -> Parser NominalDiffTime
parseJSON = String
-> (Scientific -> Parser NominalDiffTime)
-> Value
-> Parser NominalDiffTime
forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific String
"NominalDiffTime" ((Scientific -> Parser NominalDiffTime)
 -> Value -> Parser NominalDiffTime)
-> (Scientific -> Parser NominalDiffTime)
-> Value
-> Parser NominalDiffTime
forall a b. (a -> b) -> a -> b
$ NominalDiffTime -> Parser NominalDiffTime
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NominalDiffTime -> Parser NominalDiffTime)
-> (Scientific -> NominalDiffTime)
-> Scientific
-> Parser NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scientific -> NominalDiffTime
forall a b. (Real a, Fractional b) => a -> b
realToFrac
instance FromJSON DiffTime where
    parseJSON :: Value -> Parser DiffTime
parseJSON = String
-> (Scientific -> Parser DiffTime) -> Value -> Parser DiffTime
forall a. String -> (Scientific -> Parser a) -> Value -> Parser a
withBoundedScientific String
"DiffTime" ((Scientific -> Parser DiffTime) -> Value -> Parser DiffTime)
-> (Scientific -> Parser DiffTime) -> Value -> Parser DiffTime
forall a b. (a -> b) -> a -> b
$ DiffTime -> Parser DiffTime
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DiffTime -> Parser DiffTime)
-> (Scientific -> DiffTime) -> Scientific -> Parser DiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scientific -> DiffTime
forall a b. (Real a, Fractional b) => a -> b
realToFrac
instance FromJSON SystemTime where
    parseJSON :: Value -> Parser SystemTime
parseJSON Value
v = String -> Parser SystemTime -> Parser SystemTime
forall a. String -> Parser a -> Parser a
prependContext String
"SystemTime" (Parser SystemTime -> Parser SystemTime)
-> Parser SystemTime -> Parser SystemTime
forall a b. (a -> b) -> a -> b
$ do
        Nano
n <- Value -> Parser Nano
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
        let n' :: Integer
n' = Nano -> Integer
forall b. Integral b => Nano -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor (Nano
n Nano -> Nano -> Nano
forall a. Num a => a -> a -> a
* Integer -> Nano
forall a. Num a => Integer -> a
fromInteger (Nano -> Integer
forall k (a :: k) (p :: k -> *). HasResolution a => p a -> Integer
forall (p :: * -> *). p E9 -> Integer
resolution Nano
n) :: Nano)
        let (Integer
secs, Integer
nano) = Integer
n' Integer -> Integer -> (Integer, Integer)
forall a. Integral a => a -> a -> (a, a)
`divMod` Nano -> Integer
forall k (a :: k) (p :: k -> *). HasResolution a => p a -> Integer
forall (p :: * -> *). p E9 -> Integer
resolution Nano
n
        SystemTime -> Parser SystemTime
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int64 -> Word32 -> SystemTime
MkSystemTime (Integer -> Int64
forall a. Num a => Integer -> a
fromInteger Integer
secs) (Integer -> Word32
forall a. Num a => Integer -> a
fromInteger Integer
nano))
instance FromJSON CalendarDiffTime where
    parseJSON :: Value -> Parser CalendarDiffTime
parseJSON = String
-> (Object -> Parser CalendarDiffTime)
-> Value
-> Parser CalendarDiffTime
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"CalendarDiffTime" ((Object -> Parser CalendarDiffTime)
 -> Value -> Parser CalendarDiffTime)
-> (Object -> Parser CalendarDiffTime)
-> Value
-> Parser CalendarDiffTime
forall a b. (a -> b) -> a -> b
$ \Object
obj -> Integer -> NominalDiffTime -> CalendarDiffTime
CalendarDiffTime
        (Integer -> NominalDiffTime -> CalendarDiffTime)
-> Parser Integer -> Parser (NominalDiffTime -> CalendarDiffTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"months"
        Parser (NominalDiffTime -> CalendarDiffTime)
-> Parser NominalDiffTime -> Parser CalendarDiffTime
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
obj Object -> Key -> Parser NominalDiffTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"time"
instance FromJSON CalendarDiffDays where
    parseJSON :: Value -> Parser CalendarDiffDays
parseJSON = String
-> (Object -> Parser CalendarDiffDays)
-> Value
-> Parser CalendarDiffDays
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"CalendarDiffDays" ((Object -> Parser CalendarDiffDays)
 -> Value -> Parser CalendarDiffDays)
-> (Object -> Parser CalendarDiffDays)
-> Value
-> Parser CalendarDiffDays
forall a b. (a -> b) -> a -> b
$ \Object
obj -> Integer -> Integer -> CalendarDiffDays
CalendarDiffDays
        (Integer -> Integer -> CalendarDiffDays)
-> Parser Integer -> Parser (Integer -> CalendarDiffDays)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"months"
        Parser (Integer -> CalendarDiffDays)
-> Parser Integer -> Parser CalendarDiffDays
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
obj Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"days"
instance FromJSON DayOfWeek where
    parseJSON :: Value -> Parser DayOfWeek
parseJSON = String -> (Text -> Parser DayOfWeek) -> Value -> Parser DayOfWeek
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"DaysOfWeek" Text -> Parser DayOfWeek
parseDayOfWeek
parseDayOfWeek :: T.Text -> Parser DayOfWeek
parseDayOfWeek :: Text -> Parser DayOfWeek
parseDayOfWeek Text
t = case Text -> Text
T.toLower Text
t of
    Text
"monday"    -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Monday
    Text
"tuesday"   -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Tuesday
    Text
"wednesday" -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Wednesday
    Text
"thursday"  -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Thursday
    Text
"friday"    -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Friday
    Text
"saturday"  -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Saturday
    Text
"sunday"    -> DayOfWeek -> Parser DayOfWeek
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DayOfWeek
Sunday
    Text
_           -> String -> Parser DayOfWeek
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Invalid week day"
instance FromJSONKey DayOfWeek where
    fromJSONKey :: FromJSONKeyFunction DayOfWeek
fromJSONKey = (Text -> Parser DayOfWeek) -> FromJSONKeyFunction DayOfWeek
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser Text -> Parser DayOfWeek
parseDayOfWeek
instance FromJSON QuarterOfYear where
    parseJSON :: Value -> Parser QuarterOfYear
parseJSON = String
-> (Text -> Parser QuarterOfYear) -> Value -> Parser QuarterOfYear
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"DaysOfWeek" Text -> Parser QuarterOfYear
parseQuarterOfYear
parseQuarterOfYear :: T.Text -> Parser QuarterOfYear
parseQuarterOfYear :: Text -> Parser QuarterOfYear
parseQuarterOfYear Text
t = case Text -> Text
T.toLower Text
t of
    Text
"q1" -> QuarterOfYear -> Parser QuarterOfYear
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return QuarterOfYear
Q1
    Text
"q2" -> QuarterOfYear -> Parser QuarterOfYear
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return QuarterOfYear
Q2
    Text
"q3" -> QuarterOfYear -> Parser QuarterOfYear
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return QuarterOfYear
Q3
    Text
"q4" -> QuarterOfYear -> Parser QuarterOfYear
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return QuarterOfYear
Q4
    Text
_    -> String -> Parser QuarterOfYear
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Invalid quarter of year"
instance FromJSONKey QuarterOfYear where
    fromJSONKey :: FromJSONKeyFunction QuarterOfYear
fromJSONKey = (Text -> Parser QuarterOfYear) -> FromJSONKeyFunction QuarterOfYear
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser Text -> Parser QuarterOfYear
parseQuarterOfYear
instance FromJSON Quarter where
    parseJSON :: Value -> Parser Quarter
parseJSON = String -> (Text -> Parser Quarter) -> Value -> Parser Quarter
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Quarter" (Parser Quarter -> Text -> Parser Quarter
forall a. Parser a -> Text -> Parser a
Time.run Parser Quarter
Time.quarter)
instance FromJSONKey Quarter where
    fromJSONKey :: FromJSONKeyFunction Quarter
fromJSONKey = (Text -> Parser Quarter) -> FromJSONKeyFunction Quarter
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser Quarter -> Text -> Parser Quarter
forall a. Parser a -> Text -> Parser a
Time.run Parser Quarter
Time.quarter)
instance FromJSON Month where
    parseJSON :: Value -> Parser Month
parseJSON = String -> (Text -> Parser Month) -> Value -> Parser Month
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Month" (Parser Month -> Text -> Parser Month
forall a. Parser a -> Text -> Parser a
Time.run Parser Month
Time.month)
instance FromJSONKey Month where
    fromJSONKey :: FromJSONKeyFunction Month
fromJSONKey = (Text -> Parser Month) -> FromJSONKeyFunction Month
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser (Parser Month -> Text -> Parser Month
forall a. Parser a -> Text -> Parser a
Time.run Parser Month
Time.month)
instance FromJSON1 Monoid.Dual where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Dual a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = (a -> Dual a) -> Parser a -> Parser (Dual a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Dual a
forall a. a -> Dual a
Monoid.Dual (Parser a -> Parser (Dual a))
-> (Value -> Parser a) -> Value -> Parser (Dual a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
p
instance FromJSON a => FromJSON (Monoid.Dual a) where
    parseJSON :: Value -> Parser (Dual a)
parseJSON = Value -> Parser (Dual a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON1 Monoid.First where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (First a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
p' = (Maybe a -> First a) -> Parser (Maybe a) -> Parser (First a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe a -> First a
forall a. Maybe a -> First a
Monoid.First (Parser (Maybe a) -> Parser (First a))
-> (Value -> Parser (Maybe a)) -> Value -> Parser (First a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
p'
instance FromJSON a => FromJSON (Monoid.First a) where
    parseJSON :: Value -> Parser (First a)
parseJSON = Value -> Parser (First a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON1 Monoid.Last where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Last a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
p' = (Maybe a -> Last a) -> Parser (Maybe a) -> Parser (Last a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe a -> Last a
forall a. Maybe a -> Last a
Monoid.Last (Parser (Maybe a) -> Parser (Last a))
-> (Value -> Parser (Maybe a)) -> Value -> Parser (Last a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
p'
instance FromJSON a => FromJSON (Monoid.Last a) where
    parseJSON :: Value -> Parser (Last a)
parseJSON = Value -> Parser (Last a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSON1 Semigroup.Min where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Min a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> Min a
forall a. a -> Min a
Semigroup.Min (a -> Min a) -> Parser a -> Parser (Min a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Min a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> Min a) -> [a] -> [Min a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Min a
forall a. a -> Min a
Semigroup.Min ([a] -> [Min a]) -> Parser [a] -> Parser [Min a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Semigroup.Min a) where
    parseJSON :: Value -> Parser (Min a)
parseJSON = Value -> Parser (Min a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Min a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Min a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Min a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance FromJSON1 Semigroup.Max where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Max a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> Max a
forall a. a -> Max a
Semigroup.Max (a -> Max a) -> Parser a -> Parser (Max a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Max a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> Max a) -> [a] -> [Max a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Max a
forall a. a -> Max a
Semigroup.Max ([a] -> [Max a]) -> Parser [a] -> Parser [Max a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Semigroup.Max a) where
    parseJSON :: Value -> Parser (Max a)
parseJSON = Value -> Parser (Max a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Max a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Max a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Max a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance FromJSON1 Semigroup.First where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (First a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> First a
forall a. a -> First a
Semigroup.First (a -> First a) -> Parser a -> Parser (First a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [First a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> First a) -> [a] -> [First a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> First a
forall a. a -> First a
Semigroup.First ([a] -> [First a]) -> Parser [a] -> Parser [First a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Semigroup.First a) where
    parseJSON :: Value -> Parser (First a)
parseJSON = Value -> Parser (First a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [First a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [First a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [First a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance FromJSON1 Semigroup.Last where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Last a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> Last a
forall a. a -> Last a
Semigroup.Last (a -> Last a) -> Parser a -> Parser (Last a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Last a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> Last a) -> [a] -> [Last a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Last a
forall a. a -> Last a
Semigroup.Last ([a] -> [Last a]) -> Parser [a] -> Parser [Last a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Semigroup.Last a) where
    parseJSON :: Value -> Parser (Last a)
parseJSON = Value -> Parser (Last a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [Last a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Last a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [Last a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance FromJSON1 Semigroup.WrappedMonoid where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (WrappedMonoid a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ Value
a = a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
Semigroup.WrapMonoid (a -> WrappedMonoid a) -> Parser a -> Parser (WrappedMonoid a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
p Value
a
    liftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [WrappedMonoid a]
liftParseJSONList Value -> Parser a
_ Value -> Parser [a]
p Value
a = (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
Semigroup.WrapMonoid ([a] -> [WrappedMonoid a])
-> Parser [a] -> Parser [WrappedMonoid a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser [a]
p Value
a
instance (FromJSON a) => FromJSON (Semigroup.WrappedMonoid a) where
    parseJSON :: Value -> Parser (WrappedMonoid a)
parseJSON = Value -> Parser (WrappedMonoid a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
    parseJSONList :: Value -> Parser [WrappedMonoid a]
parseJSONList = (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [WrappedMonoid a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [WrappedMonoid a]
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [f a]
liftParseJSONList Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
#if !MIN_VERSION_base(4,16,0)
instance FromJSON1 Semigroup.Option where
    liftParseJSON p p' = fmap Semigroup.Option . liftParseJSON p p'
instance FromJSON a => FromJSON (Semigroup.Option a) where
    parseJSON = parseJSON1
#endif
instance FromJSON1 f => FromJSON (F.Fix f) where
    parseJSON :: Value -> Parser (Fix f)
parseJSON = Value -> Parser (Fix f)
go where go :: Value -> Parser (Fix f)
go = (f (Fix f) -> Fix f) -> Parser (f (Fix f)) -> Parser (Fix f)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
F.Fix (Parser (f (Fix f)) -> Parser (Fix f))
-> (Value -> Parser (f (Fix f))) -> Value -> Parser (Fix f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser (Fix f))
-> (Value -> Parser [Fix f]) -> Value -> Parser (f (Fix f))
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser (Fix f)
go Value -> Parser [Fix f]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON1 f, Functor f) => FromJSON (F.Mu f) where
    parseJSON :: Value -> Parser (Mu f)
parseJSON = (Fix f -> Mu f) -> Parser (Fix f) -> Parser (Mu f)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Fix f -> f (Fix f)) -> Fix f -> Mu f
forall (f :: * -> *) a. Functor f => (a -> f a) -> a -> Mu f
F.unfoldMu Fix f -> f (Fix f)
forall (f :: * -> *). Fix f -> f (Fix f)
F.unFix) (Parser (Fix f) -> Parser (Mu f))
-> (Value -> Parser (Fix f)) -> Value -> Parser (Mu f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (Fix f)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (FromJSON1 f, Functor f) => FromJSON (F.Nu f) where
    parseJSON :: Value -> Parser (Nu f)
parseJSON = (Fix f -> Nu f) -> Parser (Fix f) -> Parser (Nu f)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Fix f -> f (Fix f)) -> Fix f -> Nu f
forall a (f :: * -> *). (a -> f a) -> a -> Nu f
F.unfoldNu Fix f -> f (Fix f)
forall (f :: * -> *). Fix f -> f (Fix f)
F.unFix) (Parser (Fix f) -> Parser (Nu f))
-> (Value -> Parser (Fix f)) -> Value -> Parser (Nu f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (Fix f)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance (FromJSON a, FromJSON b) => FromJSON (S.These a b) where
    parseJSON :: Value -> Parser (These a b)
parseJSON = (These a b -> These a b)
-> Parser (These a b) -> Parser (These a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap These a b -> These a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (These a b) -> Parser (These a b))
-> (Value -> Parser (These a b)) -> Value -> Parser (These a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (These a b)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON2 S.These where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (These a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs = (These a b -> These a b)
-> Parser (These a b) -> Parser (These a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap These a b -> These a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (These a b) -> Parser (These a b))
-> (Value -> Parser (These a b)) -> Value -> Parser (These a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (These a b)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (These a b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs
instance FromJSON a => FromJSON1 (S.These a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (These a a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas = (These a a -> These a a)
-> Parser (These a a) -> Parser (These a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap These a a -> These a a
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (These a a) -> Parser (These a a))
-> (Value -> Parser (These a a)) -> Value -> Parser (These a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (These a a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (These a a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas
instance (FromJSON a, FromJSON b) => FromJSON (S.Pair a b) where
    parseJSON :: Value -> Parser (Pair a b)
parseJSON = ((a, b) -> Pair a b) -> Parser (a, b) -> Parser (Pair a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (a, b) -> Pair a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (a, b) -> Parser (Pair a b))
-> (Value -> Parser (a, b)) -> Value -> Parser (Pair a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (a, b)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON2 S.Pair where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Pair a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs = ((a, b) -> Pair a b) -> Parser (a, b) -> Parser (Pair a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (a, b) -> Pair a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (a, b) -> Parser (Pair a b))
-> (Value -> Parser (a, b)) -> Value -> Parser (Pair a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs
instance FromJSON a => FromJSON1 (S.Pair a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Pair a a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas = ((a, a) -> Pair a a) -> Parser (a, a) -> Parser (Pair a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (a, a) -> Pair a a
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (a, a) -> Parser (Pair a a))
-> (Value -> Parser (a, a)) -> Value -> Parser (Pair a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas
instance (FromJSON a, FromJSON b) => FromJSON (S.Either a b) where
    parseJSON :: Value -> Parser (Either a b)
parseJSON = (Either a b -> Either a b)
-> Parser (Either a b) -> Parser (Either a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either a b -> Either a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (Either a b) -> Parser (Either a b))
-> (Value -> Parser (Either a b)) -> Value -> Parser (Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (Either a b)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON2 S.Either where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Either a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs = (Either a b -> Either a b)
-> Parser (Either a b) -> Parser (Either a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either a b -> Either a b
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (Either a b) -> Parser (Either a b))
-> (Value -> Parser (Either a b)) -> Value -> Parser (Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Either a b)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Either a b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
pas Value -> Parser b
pb Value -> Parser [b]
pbs
instance FromJSON a => FromJSON1 (S.Either a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Either a a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas = (Either a a -> Either a a)
-> Parser (Either a a) -> Parser (Either a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either a a -> Either a a
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (Either a a) -> Parser (Either a a))
-> (Value -> Parser (Either a a)) -> Value -> Parser (Either a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Either a a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Either a a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas
instance FromJSON a => FromJSON (S.Maybe a) where
    parseJSON :: Value -> Parser (Maybe a)
parseJSON = (Maybe a -> Maybe a) -> Parser (Maybe a) -> Parser (Maybe a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe a -> Maybe a
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (Maybe a) -> Parser (Maybe a))
-> (Value -> Parser (Maybe a)) -> Value -> Parser (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser (Maybe a)
forall a. FromJSON a => Value -> Parser a
parseJSON
instance FromJSON1 S.Maybe where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas = (Maybe a -> Maybe a) -> Parser (Maybe a) -> Parser (Maybe a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe a -> Maybe a
forall lazy strict. Strict lazy strict => lazy -> strict
S.toStrict (Parser (Maybe a) -> Parser (Maybe a))
-> (Value -> Parser (Maybe a)) -> Value -> Parser (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Maybe a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
pa Value -> Parser [a]
pas
instance FromJSON1 Proxy where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Proxy a)
liftParseJSON Value -> Parser a
_ Value -> Parser [a]
_ Value
_ = Proxy a -> Parser (Proxy a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Proxy a
forall {k} (t :: k). Proxy t
Proxy
instance FromJSON (Proxy a) where
    parseJSON :: Value -> Parser (Proxy a)
parseJSON Value
_ = Proxy a -> Parser (Proxy a)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Proxy a
forall {k} (t :: k). Proxy t
Proxy
instance FromJSON2 Tagged where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (Tagged a b)
liftParseJSON2 Value -> Parser a
_ Value -> Parser [a]
_ Value -> Parser b
p Value -> Parser [b]
_ = (b -> Tagged a b) -> Parser b -> Parser (Tagged a b)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap b -> Tagged a b
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser b -> Parser (Tagged a b))
-> (Value -> Parser b) -> Value -> Parser (Tagged a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser b
p
instance FromJSON1 (Tagged a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (Tagged a a)
liftParseJSON Value -> Parser a
p Value -> Parser [a]
_ = (a -> Tagged a a) -> Parser a -> Parser (Tagged a a)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Tagged a a
forall {k} (s :: k) b. b -> Tagged s b
Tagged (Parser a -> Parser (Tagged a a))
-> (Value -> Parser a) -> Value -> Parser (Tagged a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser a
p
instance FromJSON b => FromJSON (Tagged a b) where
    parseJSON :: Value -> Parser (Tagged a b)
parseJSON = Value -> Parser (Tagged a b)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance FromJSONKey b => FromJSONKey (Tagged a b) where
    fromJSONKey :: FromJSONKeyFunction (Tagged a b)
fromJSONKey = FromJSONKeyFunction b -> FromJSONKeyFunction (Tagged a b)
forall a b.
Coercible a b =>
FromJSONKeyFunction a -> FromJSONKeyFunction b
coerceFromJSONKeyFunction (FromJSONKeyFunction b
forall a. FromJSONKey a => FromJSONKeyFunction a
fromJSONKey :: FromJSONKeyFunction b)
    fromJSONKeyList :: FromJSONKeyFunction [Tagged a b]
fromJSONKeyList = (([b] -> [Tagged a b])
-> FromJSONKeyFunction [b] -> FromJSONKeyFunction [Tagged a b]
forall a b.
(a -> b) -> FromJSONKeyFunction a -> FromJSONKeyFunction b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([b] -> [Tagged a b])
 -> FromJSONKeyFunction [b] -> FromJSONKeyFunction [Tagged a b])
-> ((b -> Tagged a b) -> [b] -> [Tagged a b])
-> (b -> Tagged a b)
-> FromJSONKeyFunction [b]
-> FromJSONKeyFunction [Tagged a b]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (b -> Tagged a b) -> [b] -> [Tagged a b]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap) b -> Tagged a b
forall {k} (s :: k) b. b -> Tagged s b
Tagged FromJSONKeyFunction [b]
forall a. FromJSONKey a => FromJSONKeyFunction [a]
fromJSONKeyList
instance (FromJSON a, FromJSON b) => FromJSON (These a b) where
    parseJSON :: Value -> Parser (These a b)
parseJSON = String
-> (Object -> Parser (These a b)) -> Value -> Parser (These a b)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"These a b" ([(Key, Value)] -> Parser (These a b)
forall {a} {a} {a}.
(Eq a, IsString a, FromJSON a, FromJSON a) =>
[(a, Value)] -> Parser (These a a)
p ([(Key, Value)] -> Parser (These a b))
-> (Object -> [(Key, Value)]) -> Object -> Parser (These a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList)
      where
        p :: [(a, Value)] -> Parser (These a a)
p [(a
"This", Value
a), (a
"That", Value
b)] = a -> a -> These a a
forall a b. a -> b -> These a b
These (a -> a -> These a a) -> Parser a -> Parser (a -> These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a Parser (a -> These a a) -> Parser a -> Parser (These a a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
b
        p [(a
"That", Value
b), (a
"This", Value
a)] = a -> a -> These a a
forall a b. a -> b -> These a b
These (a -> a -> These a a) -> Parser a -> Parser (a -> These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a Parser (a -> These a a) -> Parser a -> Parser (These a a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
b
        p [(a
"This", Value
a)] = a -> These a a
forall a b. a -> These a b
This (a -> These a a) -> Parser a -> Parser (These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a
        p [(a
"That", Value
b)] = a -> These a a
forall a b. b -> These a b
That (a -> These a a) -> Parser a -> Parser (These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
b
        p [(a, Value)]
_  = String -> Parser (These a a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Expected object with 'This' and 'That' keys only"
instance FromJSON a => FromJSON1 (These a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (These a a)
liftParseJSON Value -> Parser a
pb Value -> Parser [a]
_ = String
-> (Object -> Parser (These a a)) -> Value -> Parser (These a a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"These a b" ([(Key, Value)] -> Parser (These a a)
p ([(Key, Value)] -> Parser (These a a))
-> (Object -> [(Key, Value)]) -> Object -> Parser (These a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList)
      where
        p :: [(Key, Value)] -> Parser (These a a)
p [(Key
"This", Value
a), (Key
"That", Value
b)] = a -> a -> These a a
forall a b. a -> b -> These a b
These (a -> a -> These a a) -> Parser a -> Parser (a -> These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a Parser (a -> These a a) -> Parser a -> Parser (These a a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
pb Value
b
        p [(Key
"That", Value
b), (Key
"This", Value
a)] = a -> a -> These a a
forall a b. a -> b -> These a b
These (a -> a -> These a a) -> Parser a -> Parser (a -> These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a Parser (a -> These a a) -> Parser a -> Parser (These a a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser a
pb Value
b
        p [(Key
"This", Value
a)] = a -> These a a
forall a b. a -> These a b
This (a -> These a a) -> Parser a -> Parser (These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
a
        p [(Key
"That", Value
b)] = a -> These a a
forall a b. b -> These a b
That (a -> These a a) -> Parser a -> Parser (These a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
pb Value
b
        p [(Key, Value)]
_  = String -> Parser (These a a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Expected object with 'This' and 'That' keys only"
instance FromJSON2 These where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (These a b)
liftParseJSON2 Value -> Parser a
pa Value -> Parser [a]
_ Value -> Parser b
pb Value -> Parser [b]
_ = String
-> (Object -> Parser (These a b)) -> Value -> Parser (These a b)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"These a b" ([(Key, Value)] -> Parser (These a b)
p ([(Key, Value)] -> Parser (These a b))
-> (Object -> [(Key, Value)]) -> Object -> Parser (These a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList)
      where
        p :: [(Key, Value)] -> Parser (These a b)
p [(Key
"This", Value
a), (Key
"That", Value
b)] = a -> b -> These a b
forall a b. a -> b -> These a b
These (a -> b -> These a b) -> Parser a -> Parser (b -> These a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
pa Value
a Parser (b -> These a b) -> Parser b -> Parser (These a b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser b
pb Value
b
        p [(Key
"That", Value
b), (Key
"This", Value
a)] = a -> b -> These a b
forall a b. a -> b -> These a b
These (a -> b -> These a b) -> Parser a -> Parser (b -> These a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
pa Value
a Parser (b -> These a b) -> Parser b -> Parser (These a b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser b
pb Value
b
        p [(Key
"This", Value
a)] = a -> These a b
forall a b. a -> These a b
This (a -> These a b) -> Parser a -> Parser (These a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
pa Value
a
        p [(Key
"That", Value
b)] = b -> These a b
forall a b. b -> These a b
That (b -> These a b) -> Parser b -> Parser (These a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser b
pb Value
b
        p [(Key, Value)]
_  = String -> Parser (These a b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Expected object with 'This' and 'That' keys only"
instance (FromJSON1 f, FromJSON1 g) => FromJSON1 (These1 f g) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (These1 f g a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl = String
-> (Object -> Parser (These1 f g a))
-> Value
-> Parser (These1 f g a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"These1" ([(Key, Value)] -> Parser (These1 f g a)
p ([(Key, Value)] -> Parser (These1 f g a))
-> (Object -> [(Key, Value)]) -> Object -> Parser (These1 f g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> [(Key, Value)]
forall v. KeyMap v -> [(Key, v)]
KM.toList)
      where
        p :: [(Key, Value)] -> Parser (These1 f g a)
p [(Key
"This", Value
a), (Key
"That", Value
b)] = f a -> g a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. f a -> g a -> These1 f g a
These1 (f a -> g a -> These1 f g a)
-> Parser (f a) -> Parser (g a -> These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
a Parser (g a -> These1 f g a)
-> Parser (g a) -> Parser (These1 f g a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
b
        p [(Key
"That", Value
b), (Key
"This", Value
a)] = f a -> g a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. f a -> g a -> These1 f g a
These1 (f a -> g a -> These1 f g a)
-> Parser (f a) -> Parser (g a -> These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
a Parser (g a -> These1 f g a)
-> Parser (g a) -> Parser (These1 f g a)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
b
        p [(Key
"This", Value
a)] = f a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. f a -> These1 f g a
This1 (f a -> These1 f g a) -> Parser (f a) -> Parser (These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
a
        p [(Key
"That", Value
b)] = g a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. g a -> These1 f g a
That1 (g a -> These1 f g a) -> Parser (g a) -> Parser (These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (g a)
forall (f :: * -> *) a.
FromJSON1 f =>
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (f a)
liftParseJSON Value -> Parser a
px Value -> Parser [a]
pl Value
b
        p [(Key, Value)]
_  = String -> Parser (These1 f g a)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Expected object with 'This' and 'That' keys only"
instance (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (These1 f g a) where
    parseJSON :: Value -> Parser (These1 f g a)
parseJSON = Value -> Parser (These1 f g a)
forall (f :: * -> *) a.
(FromJSON1 f, FromJSON a) =>
Value -> Parser (f a)
parseJSON1
instance (FromJSON a, FromJSON b) => FromJSONKey (a,b)
instance (FromJSON a, FromJSON b, FromJSON c) => FromJSONKey (a,b,c)
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSONKey (a,b,c,d)
instance FromJSONKey Char where
    fromJSONKey :: FromJSONKeyFunction Char
fromJSONKey = (Text -> Parser Char) -> FromJSONKeyFunction Char
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser Text -> Parser Char
parseChar
    fromJSONKeyList :: FromJSONKeyFunction String
fromJSONKeyList = (Text -> String) -> FromJSONKeyFunction String
forall a. (Text -> a) -> FromJSONKeyFunction a
FromJSONKeyText Text -> String
T.unpack
instance (FromJSONKey a, FromJSON a) => FromJSONKey [a] where
    fromJSONKey :: FromJSONKeyFunction [a]
fromJSONKey = FromJSONKeyFunction [a]
forall a. FromJSONKey a => FromJSONKeyFunction [a]
fromJSONKeyList
instance FromJSON2 (,) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
liftParseJSON2 Value -> Parser a
pA Value -> Parser [a]
_ Value -> Parser b
pB Value -> Parser [b]
_ = String -> (Array -> Parser (a, b)) -> Value -> Parser (a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b)" ((Array -> Parser (a, b)) -> Value -> Parser (a, b))
-> (Array -> Parser (a, b)) -> Value -> Parser (a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2
            then (,)
                (a -> b -> (a, b)) -> Parser a -> Parser (b -> (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pA Int
0 Array
t
                Parser (b -> (a, b)) -> Parser b -> Parser (a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pB Int
1 Array
t
            else String -> Parser (a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b)) -> String -> Parser (a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 2"
instance (FromJSON a) => FromJSON1 ((,) a) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, a)
liftParseJSON = (Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [a]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b) => FromJSON (a, b) where
    parseJSON :: Value -> Parser (a, b)
parseJSON = Value -> Parser (a, b)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a) => FromJSON2 ((,,) a) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, a, b)
liftParseJSON2 Value -> Parser a
pB Value -> Parser [a]
_ Value -> Parser b
pC Value -> Parser [b]
_ = String -> (Array -> Parser (a, a, b)) -> Value -> Parser (a, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c)" ((Array -> Parser (a, a, b)) -> Value -> Parser (a, a, b))
-> (Array -> Parser (a, a, b)) -> Value -> Parser (a, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
3
            then (,,)
                (a -> a -> b -> (a, a, b))
-> Parser a -> Parser (a -> b -> (a, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser (a -> b -> (a, a, b)) -> Parser a -> Parser (b -> (a, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pB Int
1 Array
t
                Parser (b -> (a, a, b)) -> Parser b -> Parser (a, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pC Int
2 Array
t
            else String -> Parser (a, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, a, b)) -> String -> Parser (a, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 3"
instance (FromJSON a, FromJSON b) => FromJSON1 ((,,) a b) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, b, a)
liftParseJSON = (Value -> Parser b)
-> (Value -> Parser [b])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [b]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c) => FromJSON (a, b, c) where
    parseJSON :: Value -> Parser (a, b, c)
parseJSON = Value -> Parser (a, b, c)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b) => FromJSON2 ((,,,) a b) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, a, b)
liftParseJSON2 Value -> Parser a
pC Value -> Parser [a]
_ Value -> Parser b
pD Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, a, b)) -> Value -> Parser (a, b, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d)" ((Array -> Parser (a, b, a, b)) -> Value -> Parser (a, b, a, b))
-> (Array -> Parser (a, b, a, b)) -> Value -> Parser (a, b, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
4
            then (,,,)
                (a -> b -> a -> b -> (a, b, a, b))
-> Parser a -> Parser (b -> a -> b -> (a, b, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser (b -> a -> b -> (a, b, a, b))
-> Parser b -> Parser (a -> b -> (a, b, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser (a -> b -> (a, b, a, b))
-> Parser a -> Parser (b -> (a, b, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pC Int
2 Array
t
                Parser (b -> (a, b, a, b)) -> Parser b -> Parser (a, b, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pD Int
3 Array
t
            else String -> Parser (a, b, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, a, b)) -> String -> Parser (a, b, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 4"
instance (FromJSON a, FromJSON b, FromJSON c) => FromJSON1 ((,,,) a b c) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, b, c, a)
liftParseJSON = (Value -> Parser c)
-> (Value -> Parser [c])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [c]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON (a, b, c, d) where
    parseJSON :: Value -> Parser (a, b, c, d)
parseJSON = Value -> Parser (a, b, c, d)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c) => FromJSON2 ((,,,,) a b c) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, a, b)
liftParseJSON2 Value -> Parser a
pD Value -> Parser [a]
_ Value -> Parser b
pE Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, a, b))
-> Value
-> Parser (a, b, c, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e)" ((Array -> Parser (a, b, c, a, b))
 -> Value -> Parser (a, b, c, a, b))
-> (Array -> Parser (a, b, c, a, b))
-> Value
-> Parser (a, b, c, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
5
            then (,,,,)
                (a -> b -> c -> a -> b -> (a, b, c, a, b))
-> Parser a -> Parser (b -> c -> a -> b -> (a, b, c, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser (b -> c -> a -> b -> (a, b, c, a, b))
-> Parser b -> Parser (c -> a -> b -> (a, b, c, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser (c -> a -> b -> (a, b, c, a, b))
-> Parser c -> Parser (a -> b -> (a, b, c, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser (a -> b -> (a, b, c, a, b))
-> Parser a -> Parser (b -> (a, b, c, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pD Int
3 Array
t
                Parser (b -> (a, b, c, a, b)) -> Parser b -> Parser (a, b, c, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pE Int
4 Array
t
            else String -> Parser (a, b, c, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, a, b))
-> String -> Parser (a, b, c, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 5"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON1 ((,,,,) a b c d) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, b, c, d, a)
liftParseJSON = (Value -> Parser d)
-> (Value -> Parser [d])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [d]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSON (a, b, c, d, e) where
    parseJSON :: Value -> Parser (a, b, c, d, e)
parseJSON = Value -> Parser (a, b, c, d, e)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON2 ((,,,,,) a b c d) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, a, b)
liftParseJSON2 Value -> Parser a
pE Value -> Parser [a]
_ Value -> Parser b
pF Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, a, b))
-> Value
-> Parser (a, b, c, d, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f)" ((Array -> Parser (a, b, c, d, a, b))
 -> Value -> Parser (a, b, c, d, a, b))
-> (Array -> Parser (a, b, c, d, a, b))
-> Value
-> Parser (a, b, c, d, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
6
            then (,,,,,)
                (a -> b -> c -> d -> a -> b -> (a, b, c, d, a, b))
-> Parser a -> Parser (b -> c -> d -> a -> b -> (a, b, c, d, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser (b -> c -> d -> a -> b -> (a, b, c, d, a, b))
-> Parser b -> Parser (c -> d -> a -> b -> (a, b, c, d, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser (c -> d -> a -> b -> (a, b, c, d, a, b))
-> Parser c -> Parser (d -> a -> b -> (a, b, c, d, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser (d -> a -> b -> (a, b, c, d, a, b))
-> Parser d -> Parser (a -> b -> (a, b, c, d, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser (a -> b -> (a, b, c, d, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pE Int
4 Array
t
                Parser (b -> (a, b, c, d, a, b))
-> Parser b -> Parser (a, b, c, d, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pF Int
5 Array
t
            else String -> Parser (a, b, c, d, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, a, b))
-> String -> Parser (a, b, c, d, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 6"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSON1 ((,,,,,) a b c d e) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, b, c, d, e, a)
liftParseJSON = (Value -> Parser e)
-> (Value -> Parser [e])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [e]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f) => FromJSON (a, b, c, d, e, f) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f)
parseJSON = Value -> Parser (a, b, c, d, e, f)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSON2 ((,,,,,,) a b c d e) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, a, b)
liftParseJSON2 Value -> Parser a
pF Value -> Parser [a]
_ Value -> Parser b
pG Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, a, b))
-> Value
-> Parser (a, b, c, d, e, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g)" ((Array -> Parser (a, b, c, d, e, a, b))
 -> Value -> Parser (a, b, c, d, e, a, b))
-> (Array -> Parser (a, b, c, d, e, a, b))
-> Value
-> Parser (a, b, c, d, e, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7
            then (,,,,,,)
                (a -> b -> c -> d -> e -> a -> b -> (a, b, c, d, e, a, b))
-> Parser a
-> Parser (b -> c -> d -> e -> a -> b -> (a, b, c, d, e, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser (b -> c -> d -> e -> a -> b -> (a, b, c, d, e, a, b))
-> Parser b
-> Parser (c -> d -> e -> a -> b -> (a, b, c, d, e, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser (c -> d -> e -> a -> b -> (a, b, c, d, e, a, b))
-> Parser c -> Parser (d -> e -> a -> b -> (a, b, c, d, e, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser (d -> e -> a -> b -> (a, b, c, d, e, a, b))
-> Parser d -> Parser (e -> a -> b -> (a, b, c, d, e, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser (e -> a -> b -> (a, b, c, d, e, a, b))
-> Parser e -> Parser (a -> b -> (a, b, c, d, e, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser (a -> b -> (a, b, c, d, e, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pF Int
5 Array
t
                Parser (b -> (a, b, c, d, e, a, b))
-> Parser b -> Parser (a, b, c, d, e, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pG Int
6 Array
t
            else String -> Parser (a, b, c, d, e, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, a, b))
-> String -> Parser (a, b, c, d, e, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 7"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f) => FromJSON1 ((,,,,,,) a b c d e f) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (a, b, c, d, e, f, a)
liftParseJSON = (Value -> Parser f)
-> (Value -> Parser [f])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [f]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g) => FromJSON (a, b, c, d, e, f, g) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g)
parseJSON = Value -> Parser (a, b, c, d, e, f, g)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f) => FromJSON2 ((,,,,,,,) a b c d e f) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, a, b)
liftParseJSON2 Value -> Parser a
pG Value -> Parser [a]
_ Value -> Parser b
pH Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, a, b))
-> Value
-> Parser (a, b, c, d, e, f, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h)" ((Array -> Parser (a, b, c, d, e, f, a, b))
 -> Value -> Parser (a, b, c, d, e, f, a, b))
-> (Array -> Parser (a, b, c, d, e, f, a, b))
-> Value
-> Parser (a, b, c, d, e, f, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
8
            then (,,,,,,,)
                (a -> b -> c -> d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser a
-> Parser
     (b -> c -> d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b -> c -> d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser b
-> Parser (c -> d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser (c -> d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser c
-> Parser (d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser (d -> e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser d
-> Parser (e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser (e -> f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser e -> Parser (f -> a -> b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser (f -> a -> b -> (a, b, c, d, e, f, a, b))
-> Parser f -> Parser (a -> b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, f, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pG Int
6 Array
t
                Parser (b -> (a, b, c, d, e, f, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pH Int
7 Array
t
            else String -> Parser (a, b, c, d, e, f, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, a, b))
-> String -> Parser (a, b, c, d, e, f, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 8"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g) => FromJSON1 ((,,,,,,,) a b c d e f g) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, a)
liftParseJSON = (Value -> Parser g)
-> (Value -> Parser [g])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [g]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h) => FromJSON (a, b, c, d, e, f, g, h) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g) => FromJSON2 ((,,,,,,,,) a b c d e f g) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, a, b)
liftParseJSON2 Value -> Parser a
pH Value -> Parser [a]
_ Value -> Parser b
pI Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i)" ((Array -> Parser (a, b, c, d, e, f, g, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
9
            then (,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> a
 -> b
 -> (a, b, c, d, e, f, g, a, b))
-> Parser a
-> Parser
     (b
      -> c -> d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c -> d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser b
-> Parser
     (c -> d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c -> d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser c
-> Parser
     (d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser (d -> e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser d
-> Parser (e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser (e -> f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser e
-> Parser (f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser (f -> g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser f -> Parser (g -> a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser (g -> a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser g -> Parser (a -> b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, f, g, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pH Int
7 Array
t
                Parser (b -> (a, b, c, d, e, f, g, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pI Int
8 Array
t
            else String -> Parser (a, b, c, d, e, f, g, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, a, b))
-> String -> Parser (a, b, c, d, e, f, g, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 9"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h) => FromJSON1 ((,,,,,,,,) a b c d e f g h) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, a)
liftParseJSON = (Value -> Parser h)
-> (Value -> Parser [h])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [h]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i) => FromJSON (a, b, c, d, e, f, g, h, i) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h) => FromJSON2 ((,,,,,,,,,) a b c d e f g h) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, a, b)
liftParseJSON2 Value -> Parser a
pI Value -> Parser [a]
_ Value -> Parser b
pJ Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j)" ((Array -> Parser (a, b, c, d, e, f, g, h, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
10
            then (,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, a, b))
-> Parser c
-> Parser
     (d -> e -> f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d -> e -> f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser d
-> Parser
     (e -> f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e -> f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser e
-> Parser (f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser (f -> g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser f
-> Parser (g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser (g -> h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser g
-> Parser (h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser (h -> a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser h -> Parser (a -> b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, f, g, h, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pI Int
8 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pJ Int
9 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 10"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i) => FromJSON1 ((,,,,,,,,,) a b c d e f g h i) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a)
liftParseJSON = (Value -> Parser i)
-> (Value -> Parser [i])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [i]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j) => FromJSON (a, b, c, d, e, f, g, h, i, j) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i) => FromJSON2 ((,,,,,,,,,,) a b c d e f g h i) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a, b)
liftParseJSON2 Value -> Parser a
pJ Value -> Parser [a]
_ Value -> Parser b
pK Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j, k)" ((Array -> Parser (a, b, c, d, e, f, g, h, i, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, i, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
11
            then (,,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> i
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser c
-> Parser
     (d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser d
-> Parser
     (e
      -> f -> g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e
   -> f -> g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser e
-> Parser
     (f -> g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser
  (f -> g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser f
-> Parser
     (g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser (g -> h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser g
-> Parser (h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser (h -> i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser h
-> Parser (i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser (i -> a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser i -> Parser (a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser i) -> Int -> Array -> Parser i
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Int
8 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, f, g, h, i, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pJ Int
9 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, i, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pK Int
10 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, i, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 11"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j) => FromJSON1 ((,,,,,,,,,,) a b c d e f g h i j) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a)
liftParseJSON = (Value -> Parser j)
-> (Value -> Parser [j])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser j
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [j]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k) => FromJSON (a, b, c, d, e, f, g, h, i, j, k) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j, k)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j, k)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j) => FromJSON2 ((,,,,,,,,,,,) a b c d e f g h i j) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
liftParseJSON2 Value -> Parser a
pK Value -> Parser [a]
_ Value -> Parser b
pL Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j, k, l)" ((Array -> Parser (a, b, c, d, e, f, g, h, i, j, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, i, j, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
12
            then (,,,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> i
 -> j
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser c
-> Parser
     (d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser d
-> Parser
     (e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser e
-> Parser
     (f
      -> g
      -> h
      -> i
      -> j
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser
  (f
   -> g
   -> h
   -> i
   -> j
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser f
-> Parser
     (g
      -> h -> i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser
  (g
   -> h -> i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser g
-> Parser
     (h -> i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser
  (h -> i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser h
-> Parser
     (i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser (i -> j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser i
-> Parser (j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser i) -> Int -> Array -> Parser i
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Int
8 Array
t
                Parser (j -> a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser j
-> Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser j) -> Int -> Array -> Parser j
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser j
forall a. FromJSON a => Value -> Parser a
parseJSON Int
9 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser a -> Parser (b -> (a, b, c, d, e, f, g, h, i, j, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pK Int
10 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, i, j, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pL Int
11 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, i, j, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 12"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k) => FromJSON1 ((,,,,,,,,,,,) a b c d e f g h i j k) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a)
liftParseJSON = (Value -> Parser k)
-> (Value -> Parser [k])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser k
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [k]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k) => FromJSON2 ((,,,,,,,,,,,,) a b c d e f g h i j k) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
liftParseJSON2 Value -> Parser a
pL Value -> Parser [a]
_ Value -> Parser b
pM Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j, k, l, m)" ((Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
13
            then (,,,,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> i
 -> j
 -> k
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser c
-> Parser
     (d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser d
-> Parser
     (e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser e
-> Parser
     (f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser
  (f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser f
-> Parser
     (g
      -> h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser
  (g
   -> h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser g
-> Parser
     (h
      -> i
      -> j
      -> k
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser
  (h
   -> i
   -> j
   -> k
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser h
-> Parser
     (i -> j -> k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser
  (i -> j -> k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser i
-> Parser
     (j -> k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser i) -> Int -> Array -> Parser i
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Int
8 Array
t
                Parser
  (j -> k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser j
-> Parser (k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser j) -> Int -> Array -> Parser j
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser j
forall a. FromJSON a => Value -> Parser a
parseJSON Int
9 Array
t
                Parser (k -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser k
-> Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser k) -> Int -> Array -> Parser k
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser k
forall a. FromJSON a => Value -> Parser a
parseJSON Int
10 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser a
-> Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pL Int
11 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pM Int
12 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 13"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l) => FromJSON1 ((,,,,,,,,,,,,) a b c d e f g h i j k l) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a)
liftParseJSON = (Value -> Parser l)
-> (Value -> Parser [l])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser l
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [l]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l) => FromJSON2 ((,,,,,,,,,,,,,) a b c d e f g h i j k l) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
liftParseJSON2 Value -> Parser a
pM Value -> Parser [a]
_ Value -> Parser b
pN Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j, k, l, m, n)" ((Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
14
            then (,,,,,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> i
 -> j
 -> k
 -> l
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser c
-> Parser
     (d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser d
-> Parser
     (e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser e
-> Parser
     (f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser
  (f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser f
-> Parser
     (g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser
  (g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser g
-> Parser
     (h
      -> i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser
  (h
   -> i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser h
-> Parser
     (i
      -> j
      -> k
      -> l
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser
  (i
   -> j
   -> k
   -> l
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser i
-> Parser
     (j
      -> k -> l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser i) -> Int -> Array -> Parser i
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Int
8 Array
t
                Parser
  (j
   -> k -> l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser j
-> Parser
     (k -> l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser j) -> Int -> Array -> Parser j
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser j
forall a. FromJSON a => Value -> Parser a
parseJSON Int
9 Array
t
                Parser
  (k -> l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser k
-> Parser
     (l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser k) -> Int -> Array -> Parser k
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser k
forall a. FromJSON a => Value -> Parser a
parseJSON Int
10 Array
t
                Parser (l -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser l
-> Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser l) -> Int -> Array -> Parser l
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser l
forall a. FromJSON a => Value -> Parser a
parseJSON Int
11 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser a
-> Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pM Int
12 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pN Int
13 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 14"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m) => FromJSON1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a)
liftParseJSON = (Value -> Parser m)
-> (Value -> Parser [m])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser m
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [m]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m, FromJSON n) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m) => FromJSON2 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m) where
    liftParseJSON2 :: forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
liftParseJSON2 Value -> Parser a
pN Value -> Parser [a]
_ Value -> Parser b
pO Value -> Parser [b]
_ = String
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall a. String -> (Array -> Parser a) -> Value -> Parser a
withArray String
"(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)" ((Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
 -> Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> (Array -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall a b. (a -> b) -> a -> b
$ \Array
t ->
        let n :: Int
n = Array -> Int
forall a. Vector a -> Int
V.length Array
t
        in if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
15
            then (,,,,,,,,,,,,,,)
                (a
 -> b
 -> c
 -> d
 -> e
 -> f
 -> g
 -> h
 -> i
 -> j
 -> k
 -> l
 -> m
 -> a
 -> b
 -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser a
-> Parser
     (b
      -> c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Int
0 Array
t
                Parser
  (b
   -> c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser b
-> Parser
     (c
      -> d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
forall a. FromJSON a => Value -> Parser a
parseJSON Int
1 Array
t
                Parser
  (c
   -> d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser c
-> Parser
     (d
      -> e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser c) -> Int -> Array -> Parser c
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser c
forall a. FromJSON a => Value -> Parser a
parseJSON Int
2 Array
t
                Parser
  (d
   -> e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser d
-> Parser
     (e
      -> f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser d) -> Int -> Array -> Parser d
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser d
forall a. FromJSON a => Value -> Parser a
parseJSON Int
3 Array
t
                Parser
  (e
   -> f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser e
-> Parser
     (f
      -> g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser e) -> Int -> Array -> Parser e
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser e
forall a. FromJSON a => Value -> Parser a
parseJSON Int
4 Array
t
                Parser
  (f
   -> g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser f
-> Parser
     (g
      -> h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser f) -> Int -> Array -> Parser f
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser f
forall a. FromJSON a => Value -> Parser a
parseJSON Int
5 Array
t
                Parser
  (g
   -> h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser g
-> Parser
     (h
      -> i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser g) -> Int -> Array -> Parser g
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser g
forall a. FromJSON a => Value -> Parser a
parseJSON Int
6 Array
t
                Parser
  (h
   -> i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser h
-> Parser
     (i
      -> j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser h) -> Int -> Array -> Parser h
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser h
forall a. FromJSON a => Value -> Parser a
parseJSON Int
7 Array
t
                Parser
  (i
   -> j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser i
-> Parser
     (j
      -> k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser i) -> Int -> Array -> Parser i
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser i
forall a. FromJSON a => Value -> Parser a
parseJSON Int
8 Array
t
                Parser
  (j
   -> k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser j
-> Parser
     (k
      -> l
      -> m
      -> a
      -> b
      -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser j) -> Int -> Array -> Parser j
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser j
forall a. FromJSON a => Value -> Parser a
parseJSON Int
9 Array
t
                Parser
  (k
   -> l
   -> m
   -> a
   -> b
   -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser k
-> Parser
     (l -> m -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser k) -> Int -> Array -> Parser k
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser k
forall a. FromJSON a => Value -> Parser a
parseJSON Int
10 Array
t
                Parser
  (l -> m -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser l
-> Parser
     (m -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser l) -> Int -> Array -> Parser l
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser l
forall a. FromJSON a => Value -> Parser a
parseJSON Int
11 Array
t
                Parser
  (m -> a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser m
-> Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser m) -> Int -> Array -> Parser m
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser m
forall a. FromJSON a => Value -> Parser a
parseJSON Int
12 Array
t
                Parser (a -> b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser a
-> Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser a) -> Int -> Array -> Parser a
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser a
pN Int
13 Array
t
                Parser (b -> (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> Parser b -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Value -> Parser b) -> Int -> Array -> Parser b
forall a. (Value -> Parser a) -> Int -> Array -> Parser a
parseJSONElemAtIndex Value -> Parser b
pO Int
14 Array
t
            else String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b))
-> String -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall a b. (a -> b) -> a -> b
$ String
"cannot unpack array of length " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" into a tuple of length 15"
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m, FromJSON n) => FromJSON1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) where
    liftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n, a)
liftParseJSON = (Value -> Parser n)
-> (Value -> Parser [n])
-> (Value -> Parser a)
-> (Value -> Parser [a])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n, a)
forall a b.
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, a, b)
forall (f :: * -> * -> *) a b.
FromJSON2 f =>
(Value -> Parser a)
-> (Value -> Parser [a])
-> (Value -> Parser b)
-> (Value -> Parser [b])
-> Value
-> Parser (f a b)
liftParseJSON2 Value -> Parser n
forall a. FromJSON a => Value -> Parser a
parseJSON Value -> Parser [n]
forall a. FromJSON a => Value -> Parser [a]
parseJSONList
instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m, FromJSON n, FromJSON o) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) where
    parseJSON :: Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
parseJSON = Value -> Parser (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
forall (f :: * -> * -> *) a b.
(FromJSON2 f, FromJSON a, FromJSON b) =>
Value -> Parser (f a b)
parseJSON2