module Bookhound.Format.SyntaxTrees.Json (JsonExpression(..)) where import Bookhound.Utils.Foldable (stringify) import Bookhound.Utils.Map (showMap) import Data.Char (toLower) import Data.Map (Map) data JsonExpression = JsNumber Double | JsBool Bool | JsString String | JsArray [JsonExpression] | JsObject (Map String JsonExpression) | JsNull deriving (JsonExpression -> JsonExpression -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: JsonExpression -> JsonExpression -> Bool $c/= :: JsonExpression -> JsonExpression -> Bool == :: JsonExpression -> JsonExpression -> Bool $c== :: JsonExpression -> JsonExpression -> Bool Eq, Eq JsonExpression JsonExpression -> JsonExpression -> Bool JsonExpression -> JsonExpression -> Ordering JsonExpression -> JsonExpression -> JsonExpression forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: JsonExpression -> JsonExpression -> JsonExpression $cmin :: JsonExpression -> JsonExpression -> JsonExpression max :: JsonExpression -> JsonExpression -> JsonExpression $cmax :: JsonExpression -> JsonExpression -> JsonExpression >= :: JsonExpression -> JsonExpression -> Bool $c>= :: JsonExpression -> JsonExpression -> Bool > :: JsonExpression -> JsonExpression -> Bool $c> :: JsonExpression -> JsonExpression -> Bool <= :: JsonExpression -> JsonExpression -> Bool $c<= :: JsonExpression -> JsonExpression -> Bool < :: JsonExpression -> JsonExpression -> Bool $c< :: JsonExpression -> JsonExpression -> Bool compare :: JsonExpression -> JsonExpression -> Ordering $ccompare :: JsonExpression -> JsonExpression -> Ordering Ord) instance Show JsonExpression where show :: JsonExpression -> String show = \case JsonExpression JsNull -> String "null" JsNumber Double n -> forall a. Show a => a -> String show Double n JsBool Bool bool -> Char -> Char toLower forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Show a => a -> String show Bool bool JsString String str -> forall a. Show a => a -> String show String str JsArray [JsonExpression] arr -> forall (m :: * -> *). Foldable m => String -> String -> String -> Int -> m String -> String stringify String ",\n" String "[\n" String "\n]" Int 2 forall a b. (a -> b) -> a -> b $ forall a. Show a => a -> String show forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [JsonExpression] arr JsObject Map String JsonExpression obj -> forall (m :: * -> *). Foldable m => String -> String -> String -> Int -> m String -> String stringify String ",\n" String "{\n" String "\n}" Int 2 forall a b. (a -> b) -> a -> b $ forall a. String -> ShowS -> (a -> String) -> Map String a -> [String] showMap String ": " forall a. a -> a id forall a. Show a => a -> String show Map String JsonExpression obj