json 0.8 → 0.9
raw patch · 4 files changed
+81/−86 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGES +3/−0
- Text/JSON/Parsec.hs +36/−42
- Text/JSON/ReadP.hs +36/−42
- json.cabal +6/−2
CHANGES view
@@ -1,3 +1,6 @@+Version 0.9+ * Merge-in contributions from Neil Mitchell to accomodate working with HEAD.+ Version 0.8 * Add `Applicative` instance for `GetJSON`
Text/JSON/Parsec.hs view
@@ -30,18 +30,18 @@ import Numeric p_value :: CharParser () JSValue-p_value = spaces *> p_jvalue+p_value = spaces **> p_jvalue tok :: CharParser () a -> CharParser () a-tok p = p <* spaces+tok p = p <** spaces p_jvalue :: CharParser () JSValue-p_jvalue = (JSNull <$ p_null)- <|> (JSBool <$> p_boolean)- <|> (JSArray <$> p_array)- <|> (JSString <$> p_js_string)- <|> (JSObject <$> p_js_object)- <|> (JSRational False <$> p_number)+p_jvalue = (JSNull <$$ p_null)+ <|> (JSBool <$$> p_boolean)+ <|> (JSArray <$$> p_array)+ <|> (JSString <$$> p_js_string)+ <|> (JSObject <$$> p_js_object)+ <|> (JSRational False <$$> p_number) <?> "JSON value" p_null :: CharParser () ()@@ -49,8 +49,8 @@ p_boolean :: CharParser () Bool p_boolean = tok- ( (True <$ string "true")- <|> (False <$ string "false")+ ( (True <$$ string "true")+ <|> (False <$$ string "false") ) p_array :: CharParser () [JSValue]@@ -62,62 +62,56 @@ where p_char = (char '\\' >> p_esc) <|> (satisfy (\x -> x /= '"' && x /= '\\')) - p_esc = ('"' <$ char '"')- <|> ('\\' <$ char '\\')- <|> ('/' <$ char '/')- <|> ('\b' <$ char 'b')- <|> ('\f' <$ char 'f')- <|> ('\n' <$ char 'n')- <|> ('\r' <$ char 'r')- <|> ('\t' <$ char 't')- <|> (char 'u' *> p_uni)+ p_esc = ('"' <$$ char '"')+ <|> ('\\' <$$ char '\\')+ <|> ('/' <$$ char '/')+ <|> ('\b' <$$ char 'b')+ <|> ('\f' <$$ char 'f')+ <|> ('\n' <$$ char 'n')+ <|> ('\r' <$$ char 'r')+ <|> ('\t' <$$ char 't')+ <|> (char 'u' **> p_uni) <?> "escape character" p_uni = check =<< count 4 (satisfy isHexDigit)- where check x | code <= max_char = pure (toEnum code)- | otherwise = empty+ where check x | code <= max_char = return (toEnum code)+ | otherwise = mzero where code = fst $ head $ readHex x max_char = fromEnum (maxBound :: Char) p_object :: CharParser () [(String,JSValue)] p_object = between (tok (char '{')) (tok (char '}')) $ p_field `sepBy` tok (char ',')- where p_field = (,) <$> (p_string <* tok (char ':')) <*> p_jvalue+ where p_field = (,) <$$> (p_string <** tok (char ':')) <**> p_jvalue p_number :: CharParser () Rational p_number = tok $ do s <- getInput case readSigned readFloat s of- [(n,s1)] -> n <$ setInput s1- _ -> empty+ [(n,s1)] -> n <$$ setInput s1+ _ -> mzero p_js_string :: CharParser () JSString-p_js_string = toJSString <$> p_string+p_js_string = toJSString <$$> p_string p_js_object :: CharParser () (JSObject JSValue)-p_js_object = toJSObject <$> p_object+p_js_object = toJSObject <$$> p_object -------------------------------------------------------------------------------- -- XXX: Because Parsec is not Applicative yet... -pure :: a -> CharParser () a-pure = return--(<*>) :: CharParser () (a -> b) -> CharParser () a -> CharParser () b-(<*>) = ap--(*>) :: CharParser () a -> CharParser () b -> CharParser () b-(*>) = (>>)+(<**>) :: CharParser () (a -> b) -> CharParser () a -> CharParser () b+(<**>) = ap -(<*) :: CharParser () a -> CharParser () b -> CharParser () a-m <* n = do x <- m; _ <- n; return x+(**>) :: CharParser () a -> CharParser () b -> CharParser () b+(**>) = (>>) -empty :: CharParser () a-empty = mzero+(<**) :: CharParser () a -> CharParser () b -> CharParser () a+m <** n = do x <- m; _ <- n; return x -(<$>) :: (a -> b) -> CharParser () a -> CharParser () b-(<$>) = fmap+(<$$>) :: (a -> b) -> CharParser () a -> CharParser () b+(<$$>) = fmap -(<$) :: a -> CharParser () b -> CharParser () a-x <$ m = m >> return x+(<$$) :: a -> CharParser () b -> CharParser () a+x <$$ m = m >> return x
Text/JSON/ReadP.hs view
@@ -30,23 +30,23 @@ import Numeric token :: ReadP a -> ReadP a-token p = skipSpaces *> p+token p = skipSpaces **> p p_value :: ReadP JSValue-p_value = (JSNull <$ p_null)- <|> (JSBool <$> p_boolean)- <|> (JSArray <$> p_array)- <|> (JSString <$> p_js_string)- <|> (JSObject <$> p_js_object)- <|> (JSRational False <$> p_number)+p_value = (JSNull <$$ p_null)+ <||> (JSBool <$$> p_boolean)+ <||> (JSArray <$$> p_array)+ <||> (JSString <$$> p_js_string)+ <||> (JSObject <$$> p_js_object)+ <||> (JSRational False <$$> p_number) p_null :: ReadP () p_null = token (string "null") >> return () p_boolean :: ReadP Bool p_boolean = token- ( (True <$ string "true")- <|> (False <$ string "false")+ ( (True <$$ string "true")+ <||> (False <$$ string "false") ) p_array :: ReadP [JSValue]@@ -56,62 +56,56 @@ p_string :: ReadP String p_string = between (token (char '"')) (char '"') (many p_char) where p_char = (char '\\' >> p_esc)- <|> (satisfy (\x -> x /= '"' && x /= '\\'))+ <||> (satisfy (\x -> x /= '"' && x /= '\\')) - p_esc = ('"' <$ char '"')- <|> ('\\' <$ char '\\')- <|> ('/' <$ char '/')- <|> ('\b' <$ char 'b')- <|> ('\f' <$ char 'f')- <|> ('\n' <$ char 'n')- <|> ('\r' <$ char 'r')- <|> ('\t' <$ char 't')- <|> (char 'u' *> p_uni)+ p_esc = ('"' <$$ char '"')+ <||> ('\\' <$$ char '\\')+ <||> ('/' <$$ char '/')+ <||> ('\b' <$$ char 'b')+ <||> ('\f' <$$ char 'f')+ <||> ('\n' <$$ char 'n')+ <||> ('\r' <$$ char 'r')+ <||> ('\t' <$$ char 't')+ <||> (char 'u' **> p_uni) p_uni = check =<< count 4 (satisfy isHexDigit)- where check x | code <= max_char = pure (toEnum code)- | otherwise = empty+ where check x | code <= max_char = return (toEnum code)+ | otherwise = pfail where code = fst $ head $ readHex x max_char = fromEnum (maxBound :: Char) p_object :: ReadP [(String,JSValue)] p_object = between (token (char '{')) (token (char '}')) $ p_field `sepBy` token (char ',')- where p_field = (,) <$> (p_string <* token (char ':')) <*> p_value+ where p_field = (,) <$$> (p_string <** token (char ':')) <**> p_value p_number :: ReadP Rational p_number = readS_to_P (readSigned readFloat) p_js_string :: ReadP JSString-p_js_string = toJSString <$> p_string+p_js_string = toJSString <$$> p_string p_js_object :: ReadP (JSObject JSValue)-p_js_object = toJSObject <$> p_object+p_js_object = toJSObject <$$> p_object -------------------------------------------------------------------------------- -- XXX: Because ReadP is not Applicative yet... -pure :: a -> ReadP a-pure = return--(<*>) :: ReadP (a -> b) -> ReadP a -> ReadP b-(<*>) = ap--(*>) :: ReadP a -> ReadP b -> ReadP b-(*>) = (>>)+(<**>) :: ReadP (a -> b) -> ReadP a -> ReadP b+(<**>) = ap -(<*) :: ReadP a -> ReadP b -> ReadP a-m <* n = do x <- m; _ <- n; return x+(**>) :: ReadP a -> ReadP b -> ReadP b+(**>) = (>>) -empty :: ReadP a-empty = pfail+(<**) :: ReadP a -> ReadP b -> ReadP a+m <** n = do x <- m; _ <- n; return x -(<|>) :: ReadP a -> ReadP a -> ReadP a-(<|>) = (+++)+(<||>) :: ReadP a -> ReadP a -> ReadP a+(<||>) = (+++) -(<$>) :: (a -> b) -> ReadP a -> ReadP b-(<$>) = fmap+(<$$>) :: (a -> b) -> ReadP a -> ReadP b+(<$$>) = fmap -(<$) :: a -> ReadP b -> ReadP a-x <$ m = m >> return x+(<$$) :: a -> ReadP b -> ReadP a+x <$$ m = m >> return x
json.cabal view
@@ -1,5 +1,5 @@ name: json-version: 0.8+version: 0.9 synopsis: Support for serialising Haskell to and from JSON description: JSON (JavaScript Object Notation) is a lightweight data-interchange@@ -16,7 +16,7 @@ author: Galois Inc. maintainer: Iavor S. Diatchki (iavor.diatchki@gmail.com) Copyright: (c) 2007-2009 Galois Inc.-cabal-version: >= 1.2.0+cabal-version: >= 1.6 build-type: Simple extra-source-files: CHANGES@@ -63,6 +63,10 @@ tests/unit/pass1.json tests/unit/pass2.json tests/unit/pass3.json++source-repository head+ type: git+ location: https://github.com/GaloisInc/json.git flag split-base default: True