{-# LANGUAGE OverloadedStrings #-} module SimpleParser.Examples.Json ( Json (..) , JsonF (..) , JsonParserC , JsonParserM , jsonParser , recJsonParser ) where import Control.Monad (void) import Data.Foldable (asum) import Data.Scientific (Scientific) import Data.Sequence (Seq) import Data.Text (Text) import Data.Void (Void) import SimpleParser (Parser, Stream (..), TextLabel, TextualChunked (..), TextualStream, betweenParser, commitParser, escapedStringParser, lexemeParser, matchChunk, matchToken, onEmptyParser, 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 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' recJsonParser :: JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) recJsonParser :: JsonParserM s a -> JsonParserM s (JsonF a) recJsonParser JsonParserM s a root = JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) -> JsonParserM s (JsonF a) forall l s e a. Parser l s e a -> Parser l s e a -> Parser l s e a onEmptyParser ([JsonParserM s (JsonF a)] -> JsonParserM s (JsonF a) forall (t :: * -> *) (f :: * -> *) a. (Foldable t, Alternative f) => t (f a) -> f a asum [JsonParserM s (JsonF a)] opts) (String -> JsonParserM s (JsonF a) forall (m :: * -> *) a. MonadFail m => String -> m a fail String "failed to parse json document") where pairP :: JsonParserM s (Text, a) pairP = JsonParserM s a -> JsonParserM s (Text, a) forall s a. JsonParserC s => JsonParserM s a -> JsonParserM s (Text, a) objectPairP JsonParserM s a root opts :: [JsonParserM s (JsonF a)] opts = [ 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 a -> ParserT l s e m a commitParser ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBraceP (JsonParserM s (Text, a) -> JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s (Text, a) -> JsonParserM s (JsonF a) objectP JsonParserM s (Text, a) pairP) , 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 a -> ParserT l s e m a commitParser ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openBracketP (JsonParserM s a -> JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s a -> JsonParserM s (JsonF a) arrayP JsonParserM s a root) , 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 a -> ParserT l s e m a commitParser ParserT TextLabel s Void Identity () forall s. JsonParserC s => JsonParserM s () openQuoteP JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) stringP , 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 a -> ParserT l s e m a commitParser (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)) JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) numP , 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 a -> ParserT l s e m a commitParser (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)) JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) boolP , 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 a -> ParserT l s e m a commitParser (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')) JsonParserM s (JsonF a) forall s a. JsonParserC s => JsonParserM s (JsonF a) nullP ] 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))