@@ -74,6 +74,8 @@ import Data.Fixed (Fixed, HasResolution)
74import Data.Foldable (toList)
74import Data.Foldable (toList)
75import Data.Functor.Compose (Compose (..))
75import Data.Functor.Compose (Compose (..))
76import Data.Functor.Identity (Identity (..))
76import Data.Functor.Identity (Identity (..))
77+import Data.Functor.Product (Product (..))
78+import Data.Functor.Sum (Sum (..))
77import Data.Int (Int16, Int32, Int64, Int8)
79import Data.Int (Int16, Int32, Int64, Int8)
78import Data.List (intersperse)
80import Data.List (intersperse)
79import Data.List.NonEmpty (NonEmpty (..))
81import Data.List.NonEmpty (NonEmpty (..))
@@ -94,27 +96,27 @@ import Foreign.Storable (Storable)
94import GHC.Generics
96import GHC.Generics
95import Numeric.Natural (Natural)
97import Numeric.Natural (Natural)
97−import qualified Data.ByteString.Lazy as L
99+import qualified Data.ByteString.Lazy as L
98−import qualified Data.DList as DList
100+import qualified Data.DList as DList
99−import qualified Data.HashMap.Strict as H
101+import qualified Data.HashMap.Strict as H
100−import qualified Data.HashSet as HashSet
102+import qualified Data.HashSet as HashSet
101−import qualified Data.IntMap as IntMap
103+import qualified Data.IntMap as IntMap
102−import qualified Data.IntSet as IntSet
104+import qualified Data.IntSet as IntSet
103−import qualified Data.List.NonEmpty as NE
105+import qualified Data.List.NonEmpty as NE
104−import qualified Data.Map as M
106+import qualified Data.Map as M
105−import qualified Data.Scientific as Scientific
107+import qualified Data.Scientific as Scientific
106−import qualified Data.Sequence as Seq
108+import qualified Data.Sequence as Seq
107−import qualified Data.Set as Set
109+import qualified Data.Set as Set
108−import qualified Data.Text as T
110+import qualified Data.Text as T
109−import qualified Data.Text.Encoding as T
111+import qualified Data.Text.Encoding as T
110−import qualified Data.Text.Lazy as LT
112+import qualified Data.Text.Lazy as LT
111−import qualified Data.Tree as Tree
113+import qualified Data.Tree as Tree
112−import qualified Data.Vector as V
114+import qualified Data.Vector as V
113−import qualified Data.Vector.Generic as VG
115+import qualified Data.Vector.Generic as VG
114−import qualified Data.Vector.Mutable as VM
116+import qualified Data.Vector.Mutable as VM
115−import qualified Data.Vector.Primitive as VP
117+import qualified Data.Vector.Primitive as VP
116−import qualified Data.Vector.Storable as VS
118+import qualified Data.Vector.Storable as VS
117−import qualified Data.Vector.Unboxed as VU
119+import qualified Data.Vector.Unboxed as VU
119toJSONPair :: (a -> Value) -> (b -> Value) -> (a, b) -> Value
121toJSONPair :: (a -> Value) -> (b -> Value) -> (a, b) -> Value
120toJSONPair a b = liftToJSON2 a (listValue a) b (listValue b)
122toJSONPair a b = liftToJSON2 a (listValue a) b (listValue b)
@@ -1204,8 +1206,8 @@ instance (ToJSON a) => ToJSON (Maybe a) where
1206instance ToJSON2 Either where
1208instance ToJSON2 Either where
1207− liftToJSON2 toA _ _toB _ (Left a) = Object $ H.singleton left (toA a)
1209+ liftToJSON2 toA _ _toB _ (Left a) = Object $ H.singleton "Left" (toA a)
1208− liftToJSON2 _toA _ toB _ (Right b) = Object $ H.singleton right (toB b)
1210+ liftToJSON2 _toA _ toB _ (Right b) = Object $ H.singleton "Right" (toB b)
1209 {-# INLINE liftToJSON2 #-}
1211 {-# INLINE liftToJSON2 #-}
1211 liftToEncoding2 toA _ _toB _ (Left a) = E.pairs $ E.pair "Left" $ toA a
1213 liftToEncoding2 toA _ _toB _ (Left a) = E.pairs $ E.pair "Left" $ toA a
@@ -1227,10 +1229,6 @@ instance (ToJSON a, ToJSON b) => ToJSON (Either a b) where
1227 toEncoding = toEncoding2
1229 toEncoding = toEncoding2
1228 {-# INLINE toEncoding #-}
1230 {-# INLINE toEncoding #-}
1235instance ToJSON Bool where
1233instance ToJSON Bool where
1236 toJSON = Bool
1234 toJSON = Bool
@@ -1633,6 +1631,43 @@ instance (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Compose f g a) where
1633 toEncodingList = liftToEncodingList toEncoding toEncodingList
1631 toEncodingList = liftToEncodingList toEncoding toEncodingList
1634 {-# INLINE toEncodingList #-}
1632 {-# INLINE toEncodingList #-}
1635+instance (ToJSON1 f, ToJSON1 g) => ToJSON1 (Product f g) where
1636+ liftToJSON tv tvl (Pair x y) = liftToJSON2 tx txl ty tyl (x, y)
1638+ tx = liftToJSON tv tvl
1639+ txl = liftToJSONList tv tvl
1640+ ty = liftToJSON tv tvl
1641+ tyl = liftToJSONList tv tvl
1643+ liftToEncoding te tel (Pair x y) = liftToEncoding2 tx txl ty tyl (x, y)
1645+ tx = liftToEncoding te tel
1646+ txl = liftToEncodingList te tel
1647+ ty = liftToEncoding te tel
1648+ tyl = liftToEncodingList te tel
1650+instance (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Product f g a) where
1652+ {-# INLINE toJSON #-}
1654+ toEncoding = toEncoding1
1655+ {-# INLINE toEncoding #-}
1657+instance (ToJSON1 f, ToJSON1 g) => ToJSON1 (Sum f g) where
1658+ liftToJSON tv tvl (InL x) = Object $ H.singleton "InL" (liftToJSON tv tvl x)
1659+ liftToJSON tv tvl (InR y) = Object $ H.singleton "InR" (liftToJSON tv tvl y)
1661+ liftToEncoding te tel (InL x) = E.pairs $ E.pair "InL" $ liftToEncoding te tel x
1662+ liftToEncoding te tel (InR y) = E.pairs $ E.pair "InR" $ liftToEncoding te tel y
1664+instance (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Sum f g a) where
1666+ {-# INLINE toJSON #-}
1668+ toEncoding = toEncoding1
1669+ {-# INLINE toEncoding #-}
1636-------------------------------------------------------------------------------
1671-------------------------------------------------------------------------------
1637-- containers
1672-- containers
1638-------------------------------------------------------------------------------
1673-------------------------------------------------------------------------------