Skip to content

Commit ae40b21

Browse files
authored
Merge pull request #1106 from AliceRixte/monoid-instances-deriving
FromJSON and ToJSON instances for Sum, Product, Any, All
2 parents ac5b5a4 + 9d26976 commit ae40b21

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

src/Data/Aeson/Types/FromJSON.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2342,6 +2342,16 @@ deriving via (a :: Type) instance FromJSON a => FromJSON (Semigroup.Last a)
23422342
deriving via Identity instance FromJSON1 Semigroup.WrappedMonoid
23432343
deriving via (a :: Type) instance FromJSON a => FromJSON (Semigroup.WrappedMonoid a)
23442344

2345+
deriving via Identity instance FromJSON1 Semigroup.Sum
2346+
deriving via (a :: Type) instance FromJSON a => FromJSON (Semigroup.Sum a)
2347+
2348+
deriving via Identity instance FromJSON1 Semigroup.Product
2349+
deriving via (a :: Type) instance FromJSON a => FromJSON (Semigroup.Product a)
2350+
2351+
deriving via Bool instance FromJSON Semigroup.All
2352+
2353+
deriving via Bool instance FromJSON Semigroup.Any
2354+
23452355
#if !MIN_VERSION_base(4,16,0)
23462356
deriving via Maybe instance FromJSON1 Semigroup.Option
23472357
deriving via Maybe a instance FromJSON a => FromJSON (Semigroup.Option a)

src/Data/Aeson/Types/ToJSON.hs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ instance (key ~ Key, value ~ Value) => KeyValue Value (key, value) where
367367
instance value ~ Value => KeyValue Value (KM.KeyMap value) where
368368
(.=) = explicitToField toJSON
369369
{-# INLINE (.=) #-}
370-
370+
371371
explicitToField f name value = KM.singleton name (f value)
372372
{-# INLINE explicitToField #-}
373373

@@ -2104,6 +2104,16 @@ deriving via (a :: Type) instance ToJSON a => ToJSON (Semigroup.Last a)
21042104
deriving via Identity instance ToJSON1 Semigroup.WrappedMonoid
21052105
deriving via (a :: Type) instance ToJSON a => ToJSON (Semigroup.WrappedMonoid a)
21062106

2107+
deriving via Identity instance ToJSON1 Semigroup.Sum
2108+
deriving via (a :: Type) instance ToJSON a => ToJSON (Semigroup.Sum a)
2109+
2110+
deriving via Identity instance ToJSON1 Semigroup.Product
2111+
deriving via (a :: Type) instance ToJSON a => ToJSON (Semigroup.Product a)
2112+
2113+
deriving via Bool instance ToJSON Semigroup.All
2114+
2115+
deriving via Bool instance ToJSON Semigroup.Any
2116+
21072117
#if !MIN_VERSION_base(4,16,0)
21082118
deriving via Maybe instance ToJSON1 Semigroup.Option
21092119
deriving via Maybe a instance ToJSON a => ToJSON (Semigroup.Option a)

tests/PropertyRoundTrip.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import Test.Tasty (TestTree, testGroup)
2929
import Test.Tasty.QuickCheck (testProperty)
3030
import Types
3131
import qualified Data.Monoid as Monoid
32+
import qualified Data.Semigroup as Semigroup
3233
import qualified Data.Text as T
3334
import qualified Data.Text.Lazy as LT
3435
import qualified Data.Text.Short as ST
@@ -87,6 +88,10 @@ roundTripTests =
8788
, testProperty "Nu" $ roundTripEq @(F.Nu (These Char))
8889
, testProperty "Maybe" $ roundTripEq @(Maybe Int)
8990
, testProperty "Monoid.First" $ roundTripEq @(Monoid.First Int)
91+
, testProperty "Semigroup.Sum" $ roundTripEq @(Semigroup.Sum Int)
92+
, testProperty "Semigroup.Product" $ roundTripEq @(Semigroup.Product Int)
93+
, testProperty "Semigroup.All" $ roundTripEq @Semigroup.All
94+
, testProperty "Semigroup.Any" $ roundTripEq @Semigroup.Any
9095
, testProperty "Strict Pair" $ roundTripEq @(S.Pair Int Char)
9196
, testProperty "Strict Either" $ roundTripEq @(S.Either Int Char)
9297
, testProperty "Strict These" $ roundTripEq @(S.These Int Char)

0 commit comments

Comments
 (0)