{-# LANGUAGE PostfixOperators #-} module Parsers.Json (json, nil, number, bool, string, array, object) where import Parser(Parser(parse), exactly) import ParserCombinators (IsMatch(..), (<|>), (>>>), (|*), (|?), maybeWithin) import Parsers.Number (double) import Parsers.Collections (listOf, mapOf) import Parsers.Char (char, doubleQuote, colon) import Parsers.String (withinDoubleQuotes, spacing) import SyntaxTrees.Json (JsExpression(..)) nil :: Parser JsExpression nil :: Parser JsExpression nil = JsExpression JsNull JsExpression -> Parser [Char] -> Parser JsExpression forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ [Char] -> Parser [Char] forall a. IsMatch a => a -> Parser a is [Char] "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 [Char] -> Parser Bool forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ [Char] -> Parser [Char] forall a. IsMatch a => a -> Parser a is [Char] "true") Parser Bool -> Parser Bool -> Parser Bool forall a. Parser a -> Parser a -> Parser a <|> (Bool False Bool -> Parser [Char] -> Parser Bool forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ [Char] -> Parser [Char] forall a. IsMatch a => a -> Parser a is [Char] "false") string :: Parser JsExpression string :: Parser JsExpression string = [Char] -> JsExpression JsString ([Char] -> JsExpression) -> Parser [Char] -> Parser JsExpression forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser [Char] 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 [Char] JsExpression -> JsExpression JsObject (Map [Char] JsExpression -> JsExpression) -> Parser (Map [Char] JsExpression) -> Parser JsExpression forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Char -> Parser [Char] -> Parser JsExpression -> Parser (Map [Char] JsExpression) forall b a c. Ord b => Parser a -> Parser b -> Parser c -> Parser (Map b c) mapOf Parser Char colon Parser [Char] 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 -> Parser JsExpression forall a. Parser a -> Parser a exactly Parser JsExpression bool Parser JsExpression -> Parser JsExpression -> Parser JsExpression forall a. Parser a -> Parser a -> Parser a <|> Parser JsExpression -> Parser JsExpression forall a. Parser a -> Parser a exactly Parser JsExpression nil Parser JsExpression -> Parser JsExpression -> Parser JsExpression forall a. Parser a -> Parser a -> Parser a <|> Parser JsExpression -> Parser JsExpression forall a. Parser a -> Parser a exactly 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 json :: Parser JsExpression json :: Parser JsExpression json = Parser [Char] -> Parser JsExpression -> Parser JsExpression forall a b. Parser a -> Parser b -> Parser b maybeWithin Parser [Char] 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 text :: Parser String text :: Parser [Char] text = Parser [Char] -> Parser [Char] 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 [Char] forall a. Parser a -> Parser [a] |*)