10 | import public JSON.Parser
18 | interface Encoder v where
21 | stringify : v -> String
24 | string : String -> v
27 | double : Double -> v
30 | integer : Integer -> v
39 | object : List (String,v) -> v
52 | interface Object obj v | obj where
53 | lookup : String -> obj -> Maybe v
54 | pairs : obj -> List (String,v)
58 | interface Object obj v => Value v obj | v where
63 | typeOf : v -> String
66 | parse : Origin -> String -> Either (ParseError Void) v
69 | getObject : v -> Maybe obj
72 | getArray : v -> Maybe (List v)
75 | getBoolean : v -> Maybe Bool
78 | getDouble : v -> Maybe Double
81 | getInteger : v -> Maybe Integer
84 | getString : v -> Maybe String
90 | getArrayN : Value v obj => (n : Nat) -> v -> Maybe (Vect n v)
91 | getArrayN n x = getArray x >>= toVect n
109 | Object (List (String,JSON)) JSON where
110 | lookup = Data.List.lookup
114 | Value JSON (List (String,JSON)) where
117 | typeOf JNull = "Null"
118 | typeOf (JBool _) = "Boolean"
119 | typeOf (JDouble _) = "Double"
120 | typeOf (JInteger _) = "Integer"
121 | typeOf (JString _) = "String"
122 | typeOf (JArray _) = "Array"
123 | typeOf (JObject _) = "Object"
125 | getObject (JObject ps) = Just ps
126 | getObject _ = Nothing
128 | getDouble (JDouble v) = Just v
129 | getDouble (JInteger v) = Just (cast v)
130 | getDouble _ = Nothing
132 | getInteger (JInteger v) = Just v
133 | getInteger _ = Nothing
135 | getBoolean (JBool v) = Just v
136 | getBoolean _ = Nothing
138 | getArray (JArray v) = Just v
139 | getArray _ = Nothing
141 | getString (JString v) = Just v
142 | getString _ = Nothing
144 | isNull JNull = True