aeson 2.2.3.0 → 2.2.4.0
raw patch · 11 files changed
+67/−21 lines, 11 filesdep ~QuickCheckdep ~quickcheck-instancesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: QuickCheck, quickcheck-instances
API changes (from Hackage documentation)
+ Data.Aeson: ($dmfromJSONKey) :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction a
+ Data.Aeson: ($dmfromJSONKeyList) :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction [a]
+ Data.Aeson: ($dmliftParseJSON) :: (FromJSON1 f, Generic1 f, GFromJSON One (Rep1 f)) => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
+ Data.Aeson: ($dmliftToEncoding) :: (ToJSON1 f, Generic1 f, GToJSON' Encoding One (Rep1 f)) => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
+ Data.Aeson: ($dmliftToJSON) :: (ToJSON1 f, Generic1 f, GToJSON' Value One (Rep1 f)) => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
+ Data.Aeson: ($dmparseJSON) :: (FromJSON a, Generic a, GFromJSON Zero (Rep a)) => Value -> Parser a
+ Data.Aeson: ($dmtoJSON) :: (ToJSON a, Generic a, GToJSON' Value Zero (Rep a)) => a -> Value
+ Data.Aeson: ($dmtoJSONKey) :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction a
+ Data.Aeson: ($dmtoJSONKeyList) :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction [a]
+ Data.Aeson.Types: ($dmfromJSONKey) :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction a
+ Data.Aeson.Types: ($dmfromJSONKeyList) :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction [a]
+ Data.Aeson.Types: ($dmliftParseJSON) :: (FromJSON1 f, Generic1 f, GFromJSON One (Rep1 f)) => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
+ Data.Aeson.Types: ($dmliftToEncoding) :: (ToJSON1 f, Generic1 f, GToJSON' Encoding One (Rep1 f)) => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
+ Data.Aeson.Types: ($dmliftToJSON) :: (ToJSON1 f, Generic1 f, GToJSON' Value One (Rep1 f)) => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
+ Data.Aeson.Types: ($dmparseJSON) :: (FromJSON a, Generic a, GFromJSON Zero (Rep a)) => Value -> Parser a
+ Data.Aeson.Types: ($dmtoJSON) :: (ToJSON a, Generic a, GToJSON' Value Zero (Rep a)) => a -> Value
+ Data.Aeson.Types: ($dmtoJSONKey) :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction a
+ Data.Aeson.Types: ($dmtoJSONKeyList) :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction [a]
- Data.Aeson: [FromJSONKeyCoerce] :: Coercible Text a => FromJSONKeyFunction a
+ Data.Aeson: [FromJSONKeyCoerce] :: forall a. Coercible Text a => FromJSONKeyFunction a
- Data.Aeson: [FromJSONKeyTextParser] :: !Text -> Parser a -> FromJSONKeyFunction a
+ Data.Aeson: [FromJSONKeyTextParser] :: forall a. !Text -> Parser a -> FromJSONKeyFunction a
- Data.Aeson: [FromJSONKeyText] :: !Text -> a -> FromJSONKeyFunction a
+ Data.Aeson: [FromJSONKeyText] :: forall a. !Text -> a -> FromJSONKeyFunction a
- Data.Aeson: [FromJSONKeyValue] :: !Value -> Parser a -> FromJSONKeyFunction a
+ Data.Aeson: [FromJSONKeyValue] :: forall a. !Value -> Parser a -> FromJSONKeyFunction a
- Data.Aeson: class FromJSON1 f
+ Data.Aeson: class FromJSON1 (f :: Type -> Type)
- Data.Aeson: class FromJSON2 f
+ Data.Aeson: class FromJSON2 (f :: Type -> Type -> Type)
- Data.Aeson: class GFromJSON arity f
+ Data.Aeson: class GFromJSON arity (f :: Type -> Type)
- Data.Aeson: class (ConstructorNames f, SumFromString f) => GFromJSONKey f
+ Data.Aeson: class (ConstructorNames f, SumFromString f) => GFromJSONKey (f :: Type -> Type)
- Data.Aeson: class GToJSON' enc arity f
+ Data.Aeson: class GToJSON' enc arity (f :: Type -> Type)
- Data.Aeson: class GetConName f => GToJSONKey f
+ Data.Aeson: class GetConName f => GToJSONKey (f :: k -> Type)
- Data.Aeson: class ToJSON1 f
+ Data.Aeson: class ToJSON1 (f :: Type -> Type)
- Data.Aeson: class ToJSON2 f
+ Data.Aeson: class ToJSON2 (f :: Type -> Type -> Type)
- Data.Aeson: fromJSONKey :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction a
+ Data.Aeson: fromJSONKey :: FromJSONKey a => FromJSONKeyFunction a
- Data.Aeson: fromJSONKeyList :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction [a]
+ Data.Aeson: fromJSONKeyList :: FromJSONKey a => FromJSONKeyFunction [a]
- Data.Aeson: genericFromJSONKey :: forall a. (Generic a, GFromJSONKey (Rep a)) => JSONKeyOptions -> FromJSONKeyFunction a
+ Data.Aeson: genericFromJSONKey :: (Generic a, GFromJSONKey (Rep a)) => JSONKeyOptions -> FromJSONKeyFunction a
- Data.Aeson: liftParseJSON :: (FromJSON1 f, Generic1 f, GFromJSON One (Rep1 f)) => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
+ Data.Aeson: liftParseJSON :: FromJSON1 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
- Data.Aeson: liftToEncoding :: (ToJSON1 f, Generic1 f, GToJSON' Encoding One (Rep1 f)) => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
+ Data.Aeson: liftToEncoding :: ToJSON1 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
- Data.Aeson: liftToJSON :: (ToJSON1 f, Generic1 f, GToJSON' Value One (Rep1 f)) => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
+ Data.Aeson: liftToJSON :: ToJSON1 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
- Data.Aeson: parseJSON :: (FromJSON a, Generic a, GFromJSON Zero (Rep a)) => Value -> Parser a
+ Data.Aeson: parseJSON :: FromJSON a => Value -> Parser a
- Data.Aeson: throwDecode :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson: throwDecode :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson: throwDecode' :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson: throwDecode' :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson: throwDecodeStrict :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson: throwDecodeStrict :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson: throwDecodeStrict' :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson: throwDecodeStrict' :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson: throwDecodeStrictText :: forall a m. (FromJSON a, MonadThrow m) => Text -> m a
+ Data.Aeson: throwDecodeStrictText :: (FromJSON a, MonadThrow m) => Text -> m a
- Data.Aeson: toJSON :: (ToJSON a, Generic a, GToJSON' Value Zero (Rep a)) => a -> Value
+ Data.Aeson: toJSON :: ToJSON a => a -> Value
- Data.Aeson: toJSONKey :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction a
+ Data.Aeson: toJSONKey :: ToJSONKey a => ToJSONKeyFunction a
- Data.Aeson: toJSONKeyList :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction [a]
+ Data.Aeson: toJSONKeyList :: ToJSONKey a => ToJSONKeyFunction [a]
- Data.Aeson.Decoding: throwDecode :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson.Decoding: throwDecode :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson.Decoding: throwDecodeStrict :: forall a m. (FromJSON a, MonadThrow m) => ByteString -> m a
+ Data.Aeson.Decoding: throwDecodeStrict :: (FromJSON a, MonadThrow m) => ByteString -> m a
- Data.Aeson.Decoding: throwDecodeStrictText :: forall a m. (FromJSON a, MonadThrow m) => Text -> m a
+ Data.Aeson.Decoding: throwDecodeStrictText :: (FromJSON a, MonadThrow m) => Text -> m a
- Data.Aeson.Encoding: dict :: (k -> Encoding' Key) -> (v -> Encoding) -> (forall a. (k -> v -> a -> a) -> a -> m -> a) -> m -> Encoding
+ Data.Aeson.Encoding: dict :: (k -> Encoding' Key) -> (v -> Encoding) -> (forall a. () => (k -> v -> a -> a) -> a -> m -> a) -> m -> Encoding
- Data.Aeson.Encoding.Internal: dict :: (k -> Encoding' Key) -> (v -> Encoding) -> (forall a. (k -> v -> a -> a) -> a -> m -> a) -> m -> Encoding
+ Data.Aeson.Encoding.Internal: dict :: (k -> Encoding' Key) -> (v -> Encoding) -> (forall a. () => (k -> v -> a -> a) -> a -> m -> a) -> m -> Encoding
- Data.Aeson.Types: [FromJSONKeyCoerce] :: Coercible Text a => FromJSONKeyFunction a
+ Data.Aeson.Types: [FromJSONKeyCoerce] :: forall a. Coercible Text a => FromJSONKeyFunction a
- Data.Aeson.Types: [FromJSONKeyTextParser] :: !Text -> Parser a -> FromJSONKeyFunction a
+ Data.Aeson.Types: [FromJSONKeyTextParser] :: forall a. !Text -> Parser a -> FromJSONKeyFunction a
- Data.Aeson.Types: [FromJSONKeyText] :: !Text -> a -> FromJSONKeyFunction a
+ Data.Aeson.Types: [FromJSONKeyText] :: forall a. !Text -> a -> FromJSONKeyFunction a
- Data.Aeson.Types: [FromJSONKeyValue] :: !Value -> Parser a -> FromJSONKeyFunction a
+ Data.Aeson.Types: [FromJSONKeyValue] :: forall a. !Value -> Parser a -> FromJSONKeyFunction a
- Data.Aeson.Types: class FromJSON1 f
+ Data.Aeson.Types: class FromJSON1 (f :: Type -> Type)
- Data.Aeson.Types: class FromJSON2 f
+ Data.Aeson.Types: class FromJSON2 (f :: Type -> Type -> Type)
- Data.Aeson.Types: class GFromJSON arity f
+ Data.Aeson.Types: class GFromJSON arity (f :: Type -> Type)
- Data.Aeson.Types: class (ConstructorNames f, SumFromString f) => GFromJSONKey f
+ Data.Aeson.Types: class (ConstructorNames f, SumFromString f) => GFromJSONKey (f :: Type -> Type)
- Data.Aeson.Types: class GToJSON' enc arity f
+ Data.Aeson.Types: class GToJSON' enc arity (f :: Type -> Type)
- Data.Aeson.Types: class GetConName f => GToJSONKey f
+ Data.Aeson.Types: class GetConName f => GToJSONKey (f :: k -> Type)
- Data.Aeson.Types: class ToJSON1 f
+ Data.Aeson.Types: class ToJSON1 (f :: Type -> Type)
- Data.Aeson.Types: class ToJSON2 f
+ Data.Aeson.Types: class ToJSON2 (f :: Type -> Type -> Type)
- Data.Aeson.Types: fromJSONKey :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction a
+ Data.Aeson.Types: fromJSONKey :: FromJSONKey a => FromJSONKeyFunction a
- Data.Aeson.Types: fromJSONKeyList :: (FromJSONKey a, FromJSON a) => FromJSONKeyFunction [a]
+ Data.Aeson.Types: fromJSONKeyList :: FromJSONKey a => FromJSONKeyFunction [a]
- Data.Aeson.Types: genericFromJSONKey :: forall a. (Generic a, GFromJSONKey (Rep a)) => JSONKeyOptions -> FromJSONKeyFunction a
+ Data.Aeson.Types: genericFromJSONKey :: (Generic a, GFromJSONKey (Rep a)) => JSONKeyOptions -> FromJSONKeyFunction a
- Data.Aeson.Types: liftParseJSON :: (FromJSON1 f, Generic1 f, GFromJSON One (Rep1 f)) => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
+ Data.Aeson.Types: liftParseJSON :: FromJSON1 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a)
- Data.Aeson.Types: liftToEncoding :: (ToJSON1 f, Generic1 f, GToJSON' Encoding One (Rep1 f)) => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
+ Data.Aeson.Types: liftToEncoding :: ToJSON1 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding
- Data.Aeson.Types: liftToJSON :: (ToJSON1 f, Generic1 f, GToJSON' Value One (Rep1 f)) => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
+ Data.Aeson.Types: liftToJSON :: ToJSON1 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value
- Data.Aeson.Types: parseJSON :: (FromJSON a, Generic a, GFromJSON Zero (Rep a)) => Value -> Parser a
+ Data.Aeson.Types: parseJSON :: FromJSON a => Value -> Parser a
- Data.Aeson.Types: toJSON :: (ToJSON a, Generic a, GToJSON' Value Zero (Rep a)) => a -> Value
+ Data.Aeson.Types: toJSON :: ToJSON a => a -> Value
- Data.Aeson.Types: toJSONKey :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction a
+ Data.Aeson.Types: toJSONKey :: ToJSONKey a => ToJSONKeyFunction a
- Data.Aeson.Types: toJSONKeyList :: (ToJSONKey a, ToJSON a) => ToJSONKeyFunction [a]
+ Data.Aeson.Types: toJSONKeyList :: ToJSONKey a => ToJSONKeyFunction [a]
Files
- README.markdown +1/−1
- aeson.cabal +15/−13
- changelog.md +4/−0
- src/Data/Aeson.hs +1/−1
- src/Data/Aeson/Decoding/ByteString.hs +3/−1
- src/Data/Aeson/Decoding/ByteString/Lazy.hs +3/−1
- src/Data/Aeson/Decoding/Text.hs +4/−2
- src/Data/Aeson/Types/ToJSON.hs +1/−1
- tests/Instances.hs +10/−1
- tests/Regression/Issue1138.hs +23/−0
- tests/UnitTests.hs +2/−0
README.markdown view
@@ -14,7 +14,7 @@ Master [git repository](http://github.com/haskell/aeson): -* `git clone git://github.com/haskell/aeson.git`+* `git clone https://github.com/haskell/aeson.git` See what's changed in recent (and upcoming) releases:
aeson.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: aeson-version: 2.2.3.0+version: 2.2.4.0 license: BSD-3-Clause license-file: LICENSE category: Text, Web, JSON@@ -18,9 +18,10 @@ || ==9.0.2 || ==9.2.8 || ==9.4.8- || ==9.6.5- || ==9.8.2+ || ==9.6.6+ || ==9.8.4 || ==9.10.1+ || ==9.12.1 synopsis: Fast JSON parsing and encoding homepage: https://github.com/haskell/aeson@@ -97,10 +98,10 @@ , containers >=0.6.0.1 && <0.8 , deepseq >=1.4.4.0 && <1.6 , exceptions >=0.10.4 && <0.11- , ghc-prim >=0.5.0.0 && <0.12- , template-haskell >=2.14.0.0 && <2.23+ , ghc-prim >=0.5.0.0 && <0.14+ , template-haskell >=2.14.0.0 && <2.24 , text >=1.2.3.0 && <1.3 || >=2.0 && <2.2- , time >=1.8.0.2 && <1.13+ , time >=1.8.0.2 && <1.15 -- Compat build-depends:@@ -115,14 +116,14 @@ , character-ps ^>=0.1 , data-fix ^>=0.3.2 , dlist ^>=1.0- , hashable ^>=1.4.6.0+ , hashable ^>=1.4.6.0 || ^>=1.5.0.0 , indexed-traversable ^>=0.1.2 , integer-conversion ^>=0.1 , integer-logarithms ^>=1.0.3.1 , network-uri ^>=2.6.4.1 , OneTuple ^>=0.4.1.1 , primitive ^>=0.8.0.0 || ^>=0.9.0.0- , QuickCheck ^>=2.14.3 || ^>=2.15+ , QuickCheck ^>=2.14.3 || ^>=2.15 || ^>=2.16.0.0 || ^>=2.17.1.0 || ^>=2.18.0.0 , scientific ^>=0.3.7.0 , semialign ^>=1.3 , strict ^>=0.5@@ -134,7 +135,7 @@ , unordered-containers ^>=0.2.10.0 , uuid-types ^>=1.0.5 , vector ^>=0.13.0.0- , witherable ^>=0.4.2 || ^>=0.5+ , witherable ^>=0.4.2 || ^>=0.5 ghc-options: -Wall @@ -174,6 +175,7 @@ Regression.Issue571 Regression.Issue687 Regression.Issue967+ Regression.Issue1138 RFC8785 SerializationFormatSpec Types@@ -202,7 +204,7 @@ , containers , data-fix , deepseq- , Diff >=0.4 && <0.6+ , Diff >=0.4 && <0.6 || ^>=1.0.2 , directory , dlist , filepath@@ -215,8 +217,8 @@ , network-uri , OneTuple , primitive- , QuickCheck >=2.14.2 && <2.16- , quickcheck-instances >=0.3.29 && <0.4+ , QuickCheck+ , quickcheck-instances >=0.3.29 && <0.5 , scientific , strict , tagged@@ -242,4 +244,4 @@ source-repository head type: git- location: git://github.com/haskell/aeson.git+ location: https://github.com/haskell/aeson.git
changelog.md view
@@ -1,5 +1,9 @@ For the latest version of this document, please see [https://github.com/haskell/aeson/blob/master/changelog.md](https://github.com/haskell/aeson/blob/master/changelog.md). +### 2.2.4.0++* Check for control characters in text literals everywhere+ ### 2.2.3.0 * Support `hashable-1.4.6.0`.
src/Data/Aeson.hs view
@@ -253,7 +253,7 @@ -- | Like 'decodeFileStrict'' but returns an error message when decoding fails. ----- Since @2.2.0.0@ an alias for 'eitherDecodeFileStrict''.+-- Since @2.2.0.0@ an alias for 'eitherDecodeFileStrict'. eitherDecodeFileStrict' :: (FromJSON a) => FilePath -> IO (Either String a) eitherDecodeFileStrict' = eitherDecodeFileStrict {-# INLINE eitherDecodeFileStrict' #-}
src/Data/Aeson/Decoding/ByteString.hs view
@@ -153,7 +153,9 @@ Right t -> ok t (BS.drop (n + 1) bs0) Left e -> err (show e) Just (92, bs') -> goSlash (n + 1) bs'- Just (_, bs') -> goEsc (n + 1) bs'+ Just (w8, bs')+ | w8 < 0x20 -> errCC+ | otherwise -> goEsc (n + 1) bs' goSlash :: Int -> ByteString -> r goSlash !n !bs = case BS.uncons bs of
src/Data/Aeson/Decoding/ByteString/Lazy.hs view
@@ -159,7 +159,9 @@ Right t -> ok t (lbsDrop (n + 1) bs0) Left e -> err (show e) Just (92, bs') -> goSlash (n + 1) bs'- Just (_, bs') -> goEsc (n + 1) bs'+ Just (w8, bs')+ | w8 < 0x20 -> errCC+ | otherwise -> goEsc (n + 1) bs' goSlash :: Int -> ByteString -> r goSlash !n !bs = case LBS.uncons bs of
src/Data/Aeson/Decoding/Text.hs view
@@ -36,7 +36,7 @@ #endif --- | Lex (and parse) strict 'ByteString' into 'Tokens' stream.+-- | Lex (and parse) strict 'Text' into 'Tokens' stream. -- -- @since 2.2.1.0 --@@ -163,7 +163,9 @@ Right t -> ok t (unsafeDropPoints (n + 1) bs0) Left e -> err (show e) Just (92, bs') -> goSlash (n + 1) bs'- Just (_, bs') -> goEsc (n + 1) bs'+ Just (w8, bs')+ | w8 < 0x20 -> errCC+ | otherwise -> goEsc (n + 1) bs' goSlash :: Int -> Text -> r goSlash !n !bs = case unconsPoint bs of
src/Data/Aeson/Types/ToJSON.hs view
@@ -371,7 +371,7 @@ explicitToField f name value = KM.singleton name (f value) {-# INLINE explicitToField #-} --- | An optional key-value pair for envoding to a JSON object+-- | An optional key-value pair for encoding to a JSON object -- -- @since 2.2.0.0 --
tests/Instances.hs view
@@ -28,6 +28,11 @@ import Data.Orphans () import Test.QuickCheck.Instances () +#if !MIN_VERSION_base(4,16,0)+import Data.Semigroup (Option (..))+import Data.Tuple.Solo (Solo (..))+#endif+ -- "System" types. instance Arbitrary DotNetTime where@@ -157,9 +162,13 @@ #if !MIN_VERSION_base(4,16,0) instance Arbitrary OptionField where- arbitrary = OptionField <$> arbitrary+ arbitrary = OptionField . Option <$> arbitrary #endif +#if !MIN_VERSION_base(4,16,0) && MIN_VERSION_QuickCheck(2,17,0)+instance Arbitrary a => Arbitrary (Solo a) where+ arbitrary = MkSolo <$> arbitrary+#endif instance ApproxEq Char where (=~) = (==)
+ tests/Regression/Issue1138.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE OverloadedStrings #-}+module Regression.Issue1138 (issue1138) where++import Test.Tasty (TestTree, testGroup)+import Test.Tasty.HUnit (testCase, assertFailure)++import Data.Aeson++assertDecodeFailure :: Either String Value -> IO ()+assertDecodeFailure (Right v) = assertFailure $ "Unexpected success: " ++ show v+assertDecodeFailure (Left _) = return ()++issue1138 :: TestTree+issue1138 = testGroup "Issue #1138" $ map (testCase "-")+ [ assertDecodeFailure $ eitherDecode "\"\t\""+ , assertDecodeFailure $ eitherDecode "\"\\\\\t\""++ , assertDecodeFailure $ eitherDecodeStrict "\"\t\""+ , assertDecodeFailure $ eitherDecodeStrict "\"\\\\\t\""++ , assertDecodeFailure $ eitherDecodeStrictText "\"\t\""+ , assertDecodeFailure $ eitherDecodeStrictText "\"\\\\\t\""+ ]
tests/UnitTests.hs view
@@ -64,6 +64,7 @@ import Regression.Issue571 import Regression.Issue687 import Regression.Issue967+import Regression.Issue1138 import UnitTests.OmitNothingFieldsNote import UnitTests.FromJSONKey import UnitTests.Hashable@@ -568,6 +569,7 @@ , issue571 , issue687 , issue967+ , issue1138 , keyMapInsertWithTests , omitNothingFieldsNoteTests , noThunksTests