0 | module Language.JSON.Parser
2 | import Language.JSON.Data
6 | import public Language.JSON.Tokens
11 | punct : Punctuation -> Grammar state JSONToken True ()
12 | punct p = match $
JTPunct p
15 | rawString : Grammar state JSONToken True String
16 | rawString = do mstr <- match JTString
17 | the (Grammar _ _ False _) $
19 | Just str => pure str
20 | Nothing => fail "invalid string"
24 | json : Grammar state JSONToken True JSON
33 | object : Grammar state JSONToken True JSON
34 | object = do punct $
Curly Open
38 | pure $
JObject props
40 | properties : Grammar state JSONToken False (List (String, JSON))
41 | properties = sepBy (punct Comma) $
48 | array : Grammar state JSONToken True JSON
49 | array = do punct (Square Open)
52 | punct (Square Close)
55 | values : Grammar state JSONToken False (List JSON)
56 | values = sepBy (punct Comma) json
59 | string : Grammar state JSONToken True JSON
60 | string = map JString rawString
63 | boolean : Grammar state JSONToken True JSON
64 | boolean = map JBoolean $
match JTBoolean
67 | number : Grammar state JSONToken True JSON
68 | number = map JNumber $
match JTNumber
71 | null : Grammar state JSONToken True JSON
72 | null = map (const JNull) $
match JTNull
75 | parseJSON : List (WithBounds JSONToken) -> Maybe JSON
76 | parseJSON toks = case parse json $
filter (not . ignored) toks of
77 | Right (j, []) => Just j