{-# LANGUAGE OverloadedStrings #-} module SimpleParser.Examples.Json ( Json (..) , JsonF (..) , JsonParserC , JsonParserM , jsonParser , recJsonParser ) where import Control.Monad (void) import Data.Scientific (Scientific) import Data.Sequence (Seq) import Data.Text (Text) import Data.Void (Void) import SimpleParser (DefaultCase (..), MatchBlock (..), MatchCase (..), Parser, PureMatchBlock, Stream (..), TextLabel, TextualChunked (..), TextualStream, betweenParser, escapedStringParser, lexemeParser, lookAheadMatch, matchChunk, matchToken, orParser, satisfyToken, scientificParser, sepByParser, signedNumStartPred, spaceParser) data JsonF a = JsonObject !(Seq (Text, a)) | JsonArray !(Seq a) | JsonString !Text | JsonBool !Bool | JsonNum !Scientific | JsonNull deriving (JsonF a -> JsonF a -> Bool (JsonF a -> JsonF a -> Bool) -> (JsonF a -> JsonF a -> Bool) -> Eq (JsonF a) forall a. Eq a => JsonF a -> JsonF a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: JsonF a -> JsonF a -> Bool $c/= :: forall a. Eq a => JsonF a -> JsonF a -> Bool == :: JsonF a -> JsonF a -> Bool $c== :: forall a. Eq a => JsonF a -> JsonF a -> Bool Eq, Int -> JsonF a -> ShowS [JsonF a] -> ShowS JsonF a -> String (Int -> JsonF a -> ShowS) -> (JsonF a -> String) -> ([JsonF a] -> ShowS) -> Show (JsonF a) forall a. Show a => Int -> JsonF a -> ShowS forall a. Show a => [JsonF a] -> ShowS forall a. Show a => JsonF a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [JsonF a] -> ShowS $cshowList :: forall a. Show a => [JsonF a] -> ShowS show :: JsonF a -> String $cshow :: forall a. Show a => JsonF a -> String showsPrec :: Int -> JsonF a -> ShowS $cshowsPrec :: forall a. Show a => Int -> JsonF a -> ShowS Show, a -> JsonF b -> JsonF a (a -> b) -> JsonF a -> JsonF b (forall a b. (a -> b) -> JsonF a -> JsonF b) -> (forall a b. a -> JsonF b -> JsonF a) -> Functor JsonF forall a b. a -> JsonF b -> JsonF a forall a b. (a -> b) -> JsonF a -> JsonF b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> JsonF b -> JsonF a $c<$ :: forall a b. a -> JsonF b -> JsonF a fmap :: (a -> b) -> JsonF a -> JsonF b $cfmap :: forall a b. (a -> b) -> JsonF a -> JsonF b Functor, JsonF a -> Bool (a -> m) -> JsonF a -> m (a -> b -> b) -> b -> JsonF a -> b (forall m. Monoid m => JsonF m -> m) -> (forall m a. Monoid m => (a -> m) -> JsonF a -> m) -> (forall m a. Monoid m => (a -> m) -> JsonF a -> m) -> (forall a b. (a -> b -> b) -> b -> JsonF a -> b) -> (forall a b. (a -> b -> b) -> b -> JsonF a -> b) -> (forall b a. (b -> a -> b) -> b -> JsonF a -> b) -> (forall b a. (b -> a -> b) -> b -> JsonF a -> b) -> (forall a. (a -> a -> a) -> JsonF a -> a) -> (forall a. (a -> a -> a) -> JsonF a -> a) -> (forall a. JsonF a -> [a]) -> (forall a. JsonF a -> Bool) -> (forall a. JsonF a -> Int) -> (forall a. Eq a => a -> JsonF a -> Bool) -> (forall a. Ord a => JsonF a -> a) -> (forall a. Ord a => JsonF a -> a) -> (forall a. Num a => JsonF a -> a) -> (forall a. Num a => JsonF a -> a) -> Foldable JsonF forall a. Eq a => a -> JsonF a -> Bool forall a. Num a => JsonF a -> a forall a. Ord a => JsonF a -> a forall m. Monoid m => JsonF m -> m forall a. JsonF a -> Bool forall a. JsonF a -> Int forall a. JsonF a -> [a] forall a. (a -> a -> a) -> JsonF a -> a forall m a. Monoid m => (a -> m) -> JsonF a -> m forall b a. (b -> a -> b) -> b -> JsonF a -> b forall a b. (a -> b -> b) -> b -> JsonF a -> b forall (t :: * -> *). (forall m. Monoid m => t m -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall m a. Monoid m => (a -> m) -> t a -> m) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall a b. (a -> b -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall b a. (b -> a -> b) -> b -> t a -> b) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. (a -> a -> a) -> t a -> a) -> (forall a. t a -> [a]) -> (forall a. t a -> Bool) -> (forall a. t a -> Int) -> (forall a. Eq a => a -> t a -> Bool) -> (forall a. Ord a => t a -> a) -> (forall a. Ord a => t a -> a) -> (forall a. Num a => t a -> a) -> (forall a. Num a => t a -> a) -> Foldable t product :: JsonF a -> a $cproduct :: forall a. Num a => JsonF a -> a sum :: JsonF a -> a $csum :: forall a. Num a => JsonF a -> a minimum :: JsonF a -> a $cminimum :: forall a. Ord a => JsonF a -> a maximum :: JsonF a -> a $cmaximum :: forall a. Ord a => JsonF a -> a elem :: a -> JsonF a -> Bool $celem :: forall a. Eq a => a -> JsonF a -> Bool length :: JsonF a -> Int $clength :: forall a. JsonF a -> Int null :: JsonF a -> Bool $cnull :: forall a. JsonF a -> Bool toList :: JsonF a -> [a] $ctoList :: forall a. JsonF a -> [a] foldl1 :: (a -> a -> a) -> JsonF a -> a $cfoldl1 :: forall a. (a -> a -> a) -> JsonF a -> a foldr1 :: (a -> a -> a) -> JsonF a -> a $cfoldr1 :: forall a. (a -> a -> a) -> JsonF a -> a foldl' :: (b -> a -> b) -> b -> JsonF a -> b $cfoldl' :: forall b a. (b -> a -> b) -> b -> JsonF a -> b foldl :: (b -> a -> b) -> b -> JsonF a -> b $cfoldl :: forall b a. (b -> a -> b) -> b -> JsonF a -> b foldr' :: (a -> b -> b) -> b -> JsonF a -> b $cfoldr' :: forall a b. (a -> b -> b) -> b -> JsonF a -> b foldr :: (a -> b -> b) -> b -> JsonF a -> b $cfoldr :: forall a b. (a -> b -> b) -> b -> JsonF a -> b foldMap' :: (a -> m) -> JsonF a -> m $cfoldMap' :: forall m a. Monoid m => (a -> m) -> JsonF a -> m foldMap :: (a -> m) -> JsonF a -> m $cfoldMap :: forall m a. Monoid m => (a -> m) -> JsonF a -> m fold :: JsonF m -> m $cfold :: forall m. Monoid m => JsonF m -> m Foldable, Functor JsonF Foldable JsonF Functor JsonF -> Foldable JsonF -> (forall (f :: * -> *) a b. Applicative f => (a -> f b) -> JsonF a -> f (JsonF b)) -> (forall (f :: * -> *) a. Applicative f => JsonF (f a) -> f (JsonF a)) -> (forall (m :: * -> *) a b. Monad m => (a -> m b) -> JsonF a -> m (JsonF b)) -> (forall (m :: * -> *) a. Monad m => JsonF (m a) -> m (JsonF a)) -> Traversable JsonF (a -> f b) -> JsonF a -> f (JsonF b) forall (t :: * -> *). Functor t -> Foldable t -> (forall (f :: * -> *) a b. Applicative f => (a -> f b) -> t a -> f (t b)) -> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a)) -> (forall (m :: * -> *) a b. Monad m => (a -> m b) -> t a -> m (t b)) -> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a)) -> Traversable t forall (m :: * -> *) a. Monad m => JsonF (m a) -> m (JsonF a) forall (f :: * -> *) a. Applicative f => JsonF (f a) -> f (JsonF a) forall (m :: * -> *) a b. Monad m => (a -> m b) -> JsonF a -> m (JsonF b) forall (f :: * -> *) a b. Applicative f => (a -> f b) -> JsonF a -> f (JsonF b) sequence :: JsonF (m a) -> m (JsonF a) $csequence :: forall (m :: * -> *) a. Monad m => JsonF (m a) -> m (JsonF a) mapM :: (a -> m b) -> JsonF a -> m (JsonF b) $cmapM :: forall (m :: * -> *) a b. Monad m => (a -> m b) -> JsonF a -> m (JsonF b) sequenceA :: JsonF (f a) -> f (JsonF a) $csequenceA :: forall (f :: * -> *) a. Applicative f => JsonF (f a) -> f (JsonF a) traverse :: (a -> f b) -> JsonF a -> f (JsonF b) $ctraverse :: forall (f :: * -> *) a b. Applicative f => (a -> f b) -> JsonF a -> f (JsonF b) $cp2Traversable :: Foldable JsonF $cp1Traversable :: Functor JsonF Traversable) newtype Json = Json { Json -> JsonF Json unJson :: JsonF Json } deriving (Json -> Json -> Bool (Json -> Json -> Bool) -> (Json -> Json -> Bool) -> Eq Json forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Json -> Json -> Bool $c/= :: Json -> Json -> Bool == :: Json -> Json -> Bool $c== :: Json -> Json -> Bool Eq, Int -> Json -> ShowS [Json] -> ShowS Json -> String (Int -> Json -> ShowS) -> (Json -> String) -> ([Json] -> ShowS) -> Show Json forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Json] -> ShowS $cshowList :: [Json] -> ShowS show :: Json -> String $cshow :: Json -> String showsPrec :: Int -> Json -> ShowS $cshowsPrec :: Int -> Json -> ShowS Show) type JsonParserC s = (TextualStream s, Eq (Chunk s)) type JsonParserB s a = PureMatchBlock TextLabel s Void a type JsonParserM s a = Parser TextLabel s Void a jsonParser :: JsonParserC s => JsonParserM s Json jsonParser :: JsonParserM s Json jsonParser = let p :: JsonParserM s Json p = (JsonF Json -> Json) -> ParserT TextLabel s Void Identity (JsonF Json) -> JsonParserM s Json forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap JsonF Json -> Json Json (JsonParserM s Json -> ParserT TextLabel s Void Identity (JsonF Json) forall s a. JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) recJsonParser JsonParserM s Json p) in JsonParserM s Json p isBoolStartPred :: Char -> Bool isBoolStartPred :: Char -> Bool isBoolStartPred Char c = Char c Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char 't' Bool -> Bool -> Bool || Char c Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char 'f' recJsonB :: JsonParserC s => JsonParserM s a -> JsonParserB s (JsonF a) recJsonB :: JsonParserM s a -> JsonParserB s (JsonF a) recJsonB JsonParserM s a root = DefaultCase TextLabel s Void Identity (JsonF a) -> [MatchCase TextLabel s Void Identity (JsonF a)] -> JsonParserB s (JsonF a) forall l s e (m :: * -> *) a. DefaultCase l s e m a -> [MatchCase l s e m a] -> MatchBlock l s e m a MatchBlock (Maybe TextLabel -> (Seq (MatchMiss TextLabel s Void) -> ParserT TextLabel s Void Identity (JsonF a)) -> DefaultCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> (Seq (MatchMiss l s e) -> ParserT l s e m a) -> DefaultCase l s e m a DefaultCase Maybe TextLabel forall a. Maybe a Nothing (ParserT TextLabel s Void Identity (JsonF a) -> Seq (MatchMiss TextLabel s Void) -> ParserT TextLabel s Void Identity (JsonF a) forall a b. a -> b -> a const (String -> ParserT TextLabel s Void Identity (JsonF a) forall (m :: * -> *) a. MonadFail m => String -> m a fail String "failed to parse json document"))) [ Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBraceP (JsonParserM s (Text, a) -> ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s (Text, a) -> JsonParserM s (JsonF a) objectP (JsonParserM s a -> JsonParserM s (Text, a) forall s a. JsonParserC s => JsonParserM s a -> JsonParserM s (Text, a) objectPairP JsonParserM s a root)) , Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBracketP (JsonParserM s a -> ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) arrayP JsonParserM s a root) , Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openQuoteP ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) stringP , Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing (ParserT TextLabel s Void Identity Char -> ParserT TextLabel s Void Identity () forall (f :: * -> *) a. Functor f => f a -> f () void (Maybe TextLabel -> (Token s -> Bool) -> ParserT TextLabel s Void Identity (Token s) forall s (m :: * -> *) l e. (Stream s, Monad m) => Maybe l -> (Token s -> Bool) -> ParserT l s e m (Token s) satisfyToken Maybe TextLabel forall a. Maybe a Nothing Char -> Bool Token s -> Bool signedNumStartPred)) ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) numP , Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing (ParserT TextLabel s Void Identity Char -> ParserT TextLabel s Void Identity () forall (f :: * -> *) a. Functor f => f a -> f () void (Maybe TextLabel -> (Token s -> Bool) -> ParserT TextLabel s Void Identity (Token s) forall s (m :: * -> *) l e. (Stream s, Monad m) => Maybe l -> (Token s -> Bool) -> ParserT l s e m (Token s) satisfyToken Maybe TextLabel forall a. Maybe a Nothing Char -> Bool Token s -> Bool isBoolStartPred)) ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) boolP , Maybe TextLabel -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (JsonF a) -> MatchCase TextLabel s Void Identity (JsonF a) forall l s e (m :: * -> *) a. Maybe l -> ParserT l s e m () -> ParserT l s e m a -> MatchCase l s e m a MatchCase Maybe TextLabel forall a. Maybe a Nothing (ParserT TextLabel s Void Identity Char -> ParserT TextLabel s Void Identity () forall (f :: * -> *) a. Functor f => f a -> f () void (Token s -> ParserT TextLabel s Void Identity (Token s) forall s (m :: * -> *) l e. (Stream s, Monad m, Eq (Token s)) => Token s -> ParserT l s e m (Token s) matchToken Char Token s 'n')) ParserT TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) nullP ] recJsonParser :: JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) recJsonParser :: JsonParserM s a -> JsonParserM s (JsonF a) recJsonParser JsonParserM s a root = MatchBlock TextLabel s Void Identity (JsonF a) -> JsonParserM s (JsonF a) forall (m :: * -> *) l s e a. Monad m => MatchBlock l s e m a -> ParserT l s e m a lookAheadMatch (JsonParserM s a -> MatchBlock TextLabel s Void Identity (JsonF a) forall s a. JsonParserC s => JsonParserM s a -> JsonParserB s (JsonF a) recJsonB JsonParserM s a root) spaceP :: JsonParserC s => JsonParserM s () spaceP :: JsonParserM s () spaceP = JsonParserM s () forall s (m :: * -> *) l e. (Stream s, Token s ~ Char, Monad m) => ParserT l s e m () spaceParser tokL :: JsonParserC s => Char -> JsonParserM s () tokL :: Char -> JsonParserM s () tokL Char c = JsonParserM s () -> JsonParserM s () -> JsonParserM s () forall (m :: * -> *) l s e a. Monad m => ParserT l s e m () -> ParserT l s e m a -> ParserT l s e m a lexemeParser JsonParserM s () forall s. JsonParserC s => JsonParserM s () spaceP (ParserT TextLabel s Void Identity Char -> JsonParserM s () forall (f :: * -> *) a. Functor f => f a -> f () void (Token s -> ParserT TextLabel s Void Identity (Token s) forall s (m :: * -> *) l e. (Stream s, Monad m, Eq (Token s)) => Token s -> ParserT l s e m (Token s) matchToken Char Token s c)) chunkL :: JsonParserC s => Text -> JsonParserM s () chunkL :: Text -> JsonParserM s () chunkL Text cs = JsonParserM s () -> JsonParserM s () -> JsonParserM s () forall (m :: * -> *) l s e a. Monad m => ParserT l s e m () -> ParserT l s e m a -> ParserT l s e m a lexemeParser JsonParserM s () forall s. JsonParserC s => JsonParserM s () spaceP (ParserT TextLabel s Void Identity (Chunk s) -> JsonParserM s () forall (f :: * -> *) a. Functor f => f a -> f () void (Chunk s -> ParserT TextLabel s Void Identity (Chunk s) forall s (m :: * -> *) l e. (Stream s, Monad m, Eq (Chunk s)) => Chunk s -> ParserT l s e m (Chunk s) matchChunk (Text -> Chunk s forall chunk. TextualChunked chunk => Text -> chunk unpackChunk Text cs))) openBraceP, closeBraceP, commaP, colonP, openBracketP, closeBracketP, closeQuoteP :: JsonParserC s => JsonParserM s () openBraceP :: JsonParserM s () openBraceP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char '{' closeBraceP :: JsonParserM s () closeBraceP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char '}' commaP :: JsonParserM s () commaP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char ',' colonP :: JsonParserM s () colonP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char ':' openBracketP :: JsonParserM s () openBracketP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char '[' closeBracketP :: JsonParserM s () closeBracketP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char ']' closeQuoteP :: JsonParserM s () closeQuoteP = Char -> JsonParserM s () forall s. JsonParserC s => Char -> JsonParserM s () tokL Char '"' openQuoteP :: JsonParserC s => JsonParserM s () openQuoteP :: JsonParserM s () openQuoteP = ParserT TextLabel s Void Identity Char -> JsonParserM s () forall (f :: * -> *) a. Functor f => f a -> f () void (Token s -> ParserT TextLabel s Void Identity (Token s) forall s (m :: * -> *) l e. (Stream s, Monad m, Eq (Token s)) => Token s -> ParserT l s e m (Token s) matchToken Char Token s '"') nullTokP, trueTokP, falseTokP :: JsonParserC s => JsonParserM s () nullTokP :: JsonParserM s () nullTokP = Text -> JsonParserM s () forall s. JsonParserC s => Text -> JsonParserM s () chunkL Text "null" trueTokP :: JsonParserM s () trueTokP = Text -> JsonParserM s () forall s. JsonParserC s => Text -> JsonParserM s () chunkL Text "true" falseTokP :: JsonParserM s () falseTokP = Text -> JsonParserM s () forall s. JsonParserC s => Text -> JsonParserM s () chunkL Text "false" rawStringP :: JsonParserC s => JsonParserM s Text rawStringP :: JsonParserM s Text rawStringP = (Chunk s -> Text) -> ParserT TextLabel s Void Identity (Chunk s) -> JsonParserM s Text forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Chunk s -> Text forall chunk. TextualChunked chunk => chunk -> Text packChunk (Char -> ParserT TextLabel s Void Identity (Chunk s) forall s (m :: * -> *) l e. (Stream s, Token s ~ Char, Monad m) => Char -> ParserT l s e m (Chunk s) escapedStringParser Char '"') stringP :: JsonParserC s => JsonParserM s (JsonF a) stringP :: JsonParserM s (JsonF a) stringP = (Text -> JsonF a) -> ParserT TextLabel s Void Identity Text -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Text -> JsonF a forall a. Text -> JsonF a JsonString ParserT TextLabel s Void Identity Text forall s. JsonParserC s => JsonParserM s Text rawStringP nullP :: JsonParserC s => JsonParserM s (JsonF a) nullP :: JsonParserM s (JsonF a) nullP = JsonF a forall a. JsonF a JsonNull JsonF a -> ParserT TextLabel s Void Identity () -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () nullTokP boolP :: JsonParserC s => JsonParserM s (JsonF a) boolP :: JsonParserM s (JsonF a) boolP = JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) forall (m :: * -> *) l s e a. Monad m => ParserT l s e m a -> ParserT l s e m a -> ParserT l s e m a orParser (Bool -> JsonF a forall a. Bool -> JsonF a JsonBool Bool True JsonF a -> ParserT TextLabel s Void Identity () -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () trueTokP) (Bool -> JsonF a forall a. Bool -> JsonF a JsonBool Bool False JsonF a -> ParserT TextLabel s Void Identity () -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () falseTokP) numP :: JsonParserC s => JsonParserM s (JsonF a) numP :: JsonParserM s (JsonF a) numP = (Scientific -> JsonF a) -> ParserT TextLabel s Void Identity Scientific -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Scientific -> JsonF a forall a. Scientific -> JsonF a JsonNum ParserT TextLabel s Void Identity Scientific forall l s (m :: * -> *) e. (EmbedTextLabel l, Stream s, Token s ~ Char, Monad m) => ParserT l s e m Scientific scientificParser objectPairP :: JsonParserC s => JsonParserM s a -> JsonParserM s (Text, a) objectPairP :: JsonParserM s a -> JsonParserM s (Text, a) objectPairP JsonParserM s a root = do Text name <- JsonParserM s Text forall s. JsonParserC s => JsonParserM s Text rawStringP JsonParserM s () forall s. JsonParserC s => JsonParserM s () colonP a value <- JsonParserM s a root (Text, a) -> JsonParserM s (Text, a) forall (f :: * -> *) a. Applicative f => a -> f a pure (Text name, a value) objectP :: JsonParserC s => JsonParserM s (Text, a) -> JsonParserM s (JsonF a) objectP :: JsonParserM s (Text, a) -> JsonParserM s (JsonF a) objectP JsonParserM s (Text, a) pairP = ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity () -> JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) forall (m :: * -> *) l s e a. Monad m => ParserT l s e m () -> ParserT l s e m () -> ParserT l s e m a -> ParserT l s e m a betweenParser ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBraceP ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () closeBraceP ((Seq (Text, a) -> JsonF a) -> ParserT TextLabel s Void Identity (Seq (Text, a)) -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Seq (Text, a) -> JsonF a forall a. Seq (Text, a) -> JsonF a JsonObject (JsonParserM s (Text, a) -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (Seq (Text, a)) forall seq elem (m :: * -> *) l s e. (Chunked seq elem, Monad m) => ParserT l s e m elem -> ParserT l s e m () -> ParserT l s e m seq sepByParser JsonParserM s (Text, a) pairP ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () commaP)) arrayP :: JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) arrayP :: JsonParserM s a -> JsonParserM s (JsonF a) arrayP JsonParserM s a root = ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity () -> JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) forall (m :: * -> *) l s e a. Monad m => ParserT l s e m () -> ParserT l s e m () -> ParserT l s e m a -> ParserT l s e m a betweenParser ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBracketP ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () closeBracketP ((Seq a -> JsonF a) -> ParserT TextLabel s Void Identity (Seq a) -> JsonParserM s (JsonF a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Seq a -> JsonF a forall a. Seq a -> JsonF a JsonArray (JsonParserM s a -> ParserT TextLabel s Void Identity () -> ParserT TextLabel s Void Identity (Seq a) forall seq elem (m :: * -> *) l s e. (Chunked seq elem, Monad m) => ParserT l s e m elem -> ParserT l s e m () -> ParserT l s e m seq sepByParser JsonParserM s a root ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () commaP))