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