module Bookhound.Format.Parsers.Json (json, nil, number, bool, string, array, object) where import Bookhound.Parser (Parser, withError) import Bookhound.ParserCombinators (IsMatch (..), maybeWithin, (<|>), (|*)) import Bookhound.Parsers.Char (colon, doubleQuote) import Bookhound.Parsers.Collections (listOf, mapOf) import Bookhound.Parsers.Number (double) import Bookhound.Parsers.String (spacing, withinDoubleQuotes) import Bookhound.Format.SyntaxTrees.Json (JsonExpression (..)) json :: Parser JsonExpression json :: Parser JsonExpression json = forall a b. Parser a -> Parser b -> Parser b maybeWithin Parser String spacing Parser JsonExpression jsValue where jsValue :: Parser JsonExpression jsValue = Parser JsonExpression element forall a. Parser a -> Parser a -> Parser a <|> Parser JsonExpression container nil :: Parser JsonExpression nil :: Parser JsonExpression nil = forall a. String -> Parser a -> Parser a withError String "Json Null" forall a b. (a -> b) -> a -> b $ JsonExpression JsNull forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ forall a. IsMatch a => a -> Parser a is String "null" number :: Parser JsonExpression number :: Parser JsonExpression number = forall a. String -> Parser a -> Parser a withError String "Json Number" forall a b. (a -> b) -> a -> b $ Double -> JsonExpression JsNumber forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Double double bool :: Parser JsonExpression bool :: Parser JsonExpression bool = forall a. String -> Parser a -> Parser a withError String "Json Bool" forall a b. (a -> b) -> a -> b $ Bool -> JsonExpression JsBool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Bool True forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ forall a. IsMatch a => a -> Parser a is String "true" forall a. Parser a -> Parser a -> Parser a <|> Bool False forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ forall a. IsMatch a => a -> Parser a is String "false") string :: Parser JsonExpression string :: Parser JsonExpression string = forall a. String -> Parser a -> Parser a withError String "Json String" forall a b. (a -> b) -> a -> b $ String -> JsonExpression JsString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser String text array :: Parser JsonExpression array :: Parser JsonExpression array = forall a. String -> Parser a -> Parser a withError String "Json Array" forall a b. (a -> b) -> a -> b $ [JsonExpression] -> JsonExpression JsArray forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Parser a -> Parser [a] listOf Parser JsonExpression json object :: Parser JsonExpression object :: Parser JsonExpression object = forall a. String -> Parser a -> Parser a withError String "Json Object" forall a b. (a -> b) -> a -> b $ Map String JsonExpression -> JsonExpression JsObject forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall b a c. Ord b => Parser a -> Parser b -> Parser c -> Parser (Map b c) mapOf Parser Char colon Parser String text Parser JsonExpression json element :: Parser JsonExpression element :: Parser JsonExpression element = Parser JsonExpression number forall a. Parser a -> Parser a -> Parser a <|> Parser JsonExpression bool forall a. Parser a -> Parser a -> Parser a <|> Parser JsonExpression nil forall a. Parser a -> Parser a -> Parser a <|> Parser JsonExpression string container :: Parser JsonExpression container :: Parser JsonExpression container = Parser JsonExpression array forall a. Parser a -> Parser a -> Parser a <|> Parser JsonExpression object text :: Parser String text :: Parser String text = forall b. Parser b -> Parser b withinDoubleQuotes (forall a. IsMatch a => Parser a -> Parser a inverse Parser Char doubleQuote |*)