on master help sign in
Fix OverlappingInstances deprecation warning
commit8e1dbc7e723c7e20758368559f7093f1cfd5f742 authorBas van Dijk <v.dijk.bas@gmail.com> dateSun 11 Oct 2015, 14:47 (11 years ago) parent90f84c8
4 files changed+76−17
Data/Aeson/TH.hs+11−3 Data/Aeson/Types/Generic.hs+35−7 Data/Aeson/Types/Instances.hs+22−5 tests/UnitTests.hs+8−2
Data/Aeson/TH.hs+11−3
@@ -1,7 +1,11 @@
1−{-# LANGUAGE CPP, FlexibleInstances, IncoherentInstances, NamedFieldPuns,
2− NoImplicitPrelude, OverlappingInstances, TemplateHaskell,
1+{-# LANGUAGE CPP, FlexibleInstances, NamedFieldPuns,
2+ NoImplicitPrelude, TemplateHaskell,
33 UndecidableInstances #-}
44
5+#if __GLASGOW_HASKELL__ < 710
6+{-# LANGUAGE OverlappingInstances #-}
7+#endif
8+
59{-|
610Module: Data.Aeson.TH
711Copyright: (c) 2011-2015 Bryan O'Sullivan
@@ -955,7 +959,11 @@ parseTypeMismatch tName conName expected actual =
955959class (FromJSON a) => LookupField a where
956960 lookupField :: String -> String -> Object -> T.Text -> Parser a
957961
958−instance (FromJSON a) => LookupField a where
962+instance
963+#if __GLASGOW_HASKELL__ >= 710
964+ {-# OVERLAPPABLE #-}
965+#endif
966+ (FromJSON a) => LookupField a where
959967 lookupField tName rec obj key =
960968 case H.lookup key obj of
961969 Nothing -> unknownFieldFail tName rec (T.unpack key)
Data/Aeson/Types/Generic.hs+35−7
@@ -1,10 +1,14 @@
11{-# LANGUAGE CPP, DefaultSignatures, EmptyDataDecls, FlexibleInstances,
2− FunctionalDependencies, KindSignatures, OverlappingInstances,
2+ FunctionalDependencies, KindSignatures,
33 ScopedTypeVariables, TypeOperators, UndecidableInstances,
44 ViewPatterns, NamedFieldPuns, FlexibleContexts, PatternGuards,
55 RecordWildCards #-}
66{-# OPTIONS_GHC -fno-warn-orphans #-}
77
8+#if __GLASGOW_HASKELL__ < 710
9+{-# LANGUAGE OverlappingInstances #-}
10+#endif
11+
812-- |
913-- Module: Data.Aeson.Types.Generic
1014-- Copyright: (c) 2012-2015 Bryan O'Sullivan
@@ -45,7 +49,11 @@ import Data.Monoid (mempty)
4549--------------------------------------------------------------------------------
4650-- Generic toJSON
4751
48−instance (GToJSON a) => GToJSON (M1 i c a) where
52+instance
53+#if __GLASGOW_HASKELL__ >= 710
54+ {-# OVERLAPPABLE #-}
55+#endif
56+ (GToJSON a) => GToJSON (M1 i c a) where
4957 -- Meta-information, which is not handled elsewhere, is ignored:
5058 gToJSON opts = gToJSON opts . unM1
5159 {-# INLINE gToJSON #-}
@@ -338,7 +346,11 @@ instance (Selector s, GToJSON a) => RecordTo (S1 s a) where
338346 recordToEncoding = fieldToEncoding
339347 {-# INLINE recordToEncoding #-}
340348
341−instance (Selector s, ToJSON a) => RecordTo (S1 s (K1 i (Maybe a))) where
349+instance
350+#if __GLASGOW_HASKELL__ >= 710
351+ {-# OVERLAPPING #-}
352+#endif
353+ (Selector s, ToJSON a) => RecordTo (S1 s (K1 i (Maybe a))) where
342354 recordToPairs opts (M1 k1) | omitNothingFields opts
343355 , K1 Nothing <- k1 = empty
344356 recordToPairs opts m1 = fieldToPair opts m1
@@ -389,7 +401,11 @@ instance ( WriteProduct a
389401 encodeProduct opts b
390402 {-# INLINE encodeProduct #-}
391403
392−instance (GToJSON a) => WriteProduct a where
404+instance
405+#if __GLASGOW_HASKELL__ >= 710
406+ {-# OVERLAPPABLE #-}
407+#endif
408+ (GToJSON a) => WriteProduct a where
393409 writeProduct opts mv ix _ = VM.unsafeWrite mv ix . gToJSON opts
394410 {-# INLINE writeProduct #-}
395411
@@ -435,7 +451,11 @@ gbuilder opts = fromEncoding . gToEncoding opts
435451--------------------------------------------------------------------------------
436452-- Generic parseJSON
437453
438−instance (GFromJSON a) => GFromJSON (M1 i c a) where
454+instance
455+#if __GLASGOW_HASKELL__ >= 710
456+ {-# OVERLAPPABLE #-}
457+#endif
458+ (GFromJSON a) => GFromJSON (M1 i c a) where
439459 -- Meta-information, which is not handled elsewhere, is just added to the
440460 -- parsed value:
441461 gParseJSON opts = fmap M1 . gParseJSON opts
@@ -660,7 +680,11 @@ instance (Selector s, GFromJSON a) => FromRecord (S1 s a) where
660680 label = fieldLabelModifier opts $ selName (undefined :: t s a p)
661681 {-# INLINE parseRecord #-}
662682
663−instance (Selector s, FromJSON a) => FromRecord (S1 s (K1 i (Maybe a))) where
683+instance
684+#if __GLASGOW_HASKELL__ >= 710
685+ {-# OVERLAPPING #-}
686+#endif
687+ (Selector s, FromJSON a) => FromRecord (S1 s (K1 i (Maybe a))) where
664688 parseRecord _ (Just lab) obj = (M1 . K1) . join <$> obj .:? lab
665689 parseRecord opts Nothing obj = (M1 . K1) . join <$> obj .:? pack label
666690 where
@@ -729,7 +753,11 @@ class IsRecord (f :: * -> *) isRecord | f -> isRecord
729753
730754instance (IsRecord f isRecord) => IsRecord (f :*: g) isRecord
731755 where isUnary = const False
732−instance IsRecord (M1 S NoSelector f) False
756+instance
757+#if __GLASGOW_HASKELL__ >= 710
758+ {-# OVERLAPPING #-}
759+#endif
760+ IsRecord (M1 S NoSelector f) False
733761instance (IsRecord f isRecord) => IsRecord (M1 S c f) isRecord
734762instance IsRecord (K1 i c) True
735763instance IsRecord U1 False
Data/Aeson/Types/Instances.hs+22−5
@@ -1,8 +1,13 @@
11{-# LANGUAGE CPP, BangPatterns, DeriveDataTypeable, FlexibleContexts,
2− FlexibleInstances, GeneralizedNewtypeDeriving, IncoherentInstances,
3− OverlappingInstances, OverloadedStrings, UndecidableInstances,
2+ FlexibleInstances, GeneralizedNewtypeDeriving,
3+ OverloadedStrings, UndecidableInstances,
44 ViewPatterns #-}
55{-# LANGUAGE DefaultSignatures #-}
6+
7+#if __GLASGOW_HASKELL__ < 710
8+{-# LANGUAGE OverlappingInstances #-}
9+#endif
10+
611{-# OPTIONS_GHC -fno-warn-orphans #-}
712
813-- TODO: Drop this when we remove support for Data.Attoparsec.Number
@@ -448,19 +453,31 @@ instance FromJSON LT.Text where
448453 parseJSON = withText "Lazy Text" $ pure . LT.fromStrict
449454 {-# INLINE parseJSON #-}
450455
451−instance (ToJSON a) => ToJSON [a] where
456+instance
457+#if __GLASGOW_HASKELL__ >= 710
458+ {-# OVERLAPPABLE #-}
459+#endif
460+ (ToJSON a) => ToJSON [a] where
452461 toJSON = Array . V.fromList . map toJSON
453462 {-# INLINE toJSON #-}
454463
455464 toEncoding xs = list xs
456465 {-# INLINE toEncoding #-}
457466
458−instance (FromJSON a) => FromJSON [a] where
467+instance
468+#if __GLASGOW_HASKELL__ >= 710
469+ {-# OVERLAPPABLE #-}
470+#endif
471+ (FromJSON a) => FromJSON [a] where
459472 parseJSON = withArray "[a]" $ Tr.sequence .
460473 zipWith parseIndexedJSON [0..] . V.toList
461474 {-# INLINE parseJSON #-}
462475
463−instance (Foldable t, ToJSON a) => ToJSON (t a) where
476+instance
477+#if __GLASGOW_HASKELL__ >= 710
478+ {-# OVERLAPPABLE #-}
479+#endif
480+ (Foldable t, ToJSON a) => ToJSON (t a) where
464481 toJSON = toJSON . toList
465482 {-# INLINE toJSON #-}
466483
tests/UnitTests.hs+8−2
@@ -6,7 +6,7 @@ import Control.Monad (forM)
66import Data.Aeson (decode, eitherDecode, encode, genericToJSON, genericToEncoding)
77import Data.Aeson.TH ( deriveJSON )
88import Data.Aeson.Encode (encodeToTextBuilder)
9−import Data.Aeson.Types (ToJSON(..), Value, camelTo, camelTo2, defaultOptions, omitNothingFields)
9+import Data.Aeson.Types (ToJSON(..), FromJSON, Value, camelTo, camelTo2, defaultOptions, omitNothingFields)
1010import Data.Char (toUpper)
1111import Data.Time (UTCTime)
1212import Data.Time.Format (parseTime)
@@ -187,5 +187,11 @@ encoderComparisonTests = do
187187 ]
188188
189189-- A regression test for: https://github.com/bos/aeson/issues/293
190−data MyRecord = MyRecord {field1 :: Maybe Int, field2 :: Maybe Bool}
190+data MyRecord = MyRecord {_field1 :: Maybe Int, _field2 :: Maybe Bool}
191191deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord
192+
193+data MyRecord2 = MyRecord2 {_field3 :: Maybe Int, _field4 :: Maybe Bool}
194+ deriving Generic
195+
196+instance ToJSON MyRecord2
197+instance FromJSON MyRecord2