on master help sign in
Add labels to json object and list parsing
commit43f92d00e4a6952a3137a283cb2d92a73d332a49 authorFintanH <fintan.halpenny@gmail.com> dateWed 17 Apr 2019, 22:19 (7 years ago) parentd95d985
1 file changed+5−5
Data/Aeson/Parser/Internal.hs+5−5
Data/Aeson/Parser/Internal.hs+5−5
@@ -123,9 +123,9 @@ objectValues str val = do
123123 -- Why use acc pattern here, you may ask? because 'H.fromList' use 'unsafeInsert'
124124 -- and it's much faster because it's doing in place update to the 'HashMap'!
125125 loop acc = do
126− k <- str <* skipSpace <* char ':'
127− v <- val <* skipSpace
128− ch <- A.satisfy $ \w -> w == COMMA || w == CLOSE_CURLY
126+ k <- (str A.<?> "expected object key") <* skipSpace <* (char ':' A.<?> "expecting ':'")
127+ v <- (val A.<?> "expected object value") <* skipSpace
128+ ch <- (A.satisfy $ \w -> w == COMMA || w == CLOSE_CURLY) A.<?> "expecting ',' or '}'"
129129 let acc' = (k, v) : acc
130130 if ch == COMMA
131131 then skipSpace >> loop acc'
@@ -149,8 +149,8 @@ arrayValues val = do
149149 else loop [] 1
150150 where
151151 loop acc !len = do
152− v <- val <* skipSpace
153− ch <- A.satisfy $ \w -> w == COMMA || w == CLOSE_SQUARE
152+ v <- (val A.<?> "expected json list value") <* skipSpace
153+ ch <- (A.satisfy $ \w -> w == COMMA || w == CLOSE_SQUARE) A.<?> "expecting ',' or ']'"
154154 if ch == COMMA
155155 then skipSpace >> loop (v:acc) (len+1)
156156 else return (Vector.reverse (Vector.fromListN len (v:acc)))