on master help sign in
Use less internal encoding functions in Data.Aeson.Types.ToJSON.
commit98076476a7229b35faec80b95c5153f6fee62db3 authorAdam Bergmark <adam@bergmark.nl> dateMon 1 Aug 2016, 12:42 (10 years ago) parent4a41500
1 file changed+169−163
Data/Aeson/Types/ToJSON.hs+169−163
Data/Aeson/Types/ToJSON.hs+169−163
@@ -62,7 +62,7 @@ import Prelude.Compat
6262import Control.Applicative (Const(..))
6363import Control.Monad.ST (ST)
6464import Data.Aeson.Encoding (Encoding, Encoding', Series, dict, emptyArray_)
65−import Data.Aeson.Encoding.Internal ((>*<), (><), tuple)
65+import Data.Aeson.Encoding.Internal ((>*<), (><))
6666import Data.Aeson.Internal.Functions (mapHashKeyVal, mapKeyVal)
6767import Data.Aeson.Types.Generic (AllNullary, False, IsRecord(..), One, ProductSize, Tagged2(..), True, Zero, productSize)
6868import Data.Aeson.Types.Internal
@@ -94,8 +94,7 @@ import Foreign.Storable (Storable)
9494import GHC.Generics
9595import Numeric.Natural (Natural)
9696import qualified Data.Aeson.Encoding as E
97−-- We need internal here for generic deriving
98−import qualified Data.Aeson.Encoding.Internal as E (InArray, closeCurly, colon, comma, econcat, empty, openCurly, retagEncoding, tuple, wrapObject)
97+import qualified Data.Aeson.Encoding.Internal as E (InArray, colon, comma, econcat, empty, retagEncoding, wrapObject)
9998import qualified Data.ByteString as S
10099import qualified Data.ByteString.Lazy as L
101100import qualified Data.DList as DList
@@ -722,7 +721,7 @@ instance ( EncodeProduct arity a
722721 -- Products are encoded to an array. Here we allocate a mutable vector of
723722 -- the same size as the product and write the product's elements to it using
724723 -- 'encodeProduct':
725− gToEncoding opts targs p = E.tuple $ encodeProduct opts targs p
724+ gToEncoding opts targs p = E.list E.retagEncoding [encodeProduct opts targs p]
726725
727726instance ( AllNullary (a :+: b) allNullary
728727 , SumToEncoding arity (a :+: b) allNullary
@@ -877,13 +876,12 @@ instance ( IsRecord a isRecord
877876 , TaggedObjectEnc' arity a isRecord
878877 , Constructor c
879878 ) => TaggedObjectEnc arity (C1 c a) where
880− taggedObjectEnc opts targs tagFieldName contentsFieldName v =
881− E.wrapObject $
882− (E.string tagFieldName ><
883− E.colon ><
884− toEncoding (constructorTagModifier opts (conName (undefined :: t c a p)))) ><
885− ((unTagged :: Tagged isRecord Encoding -> Encoding) .
886− taggedObjectEnc' opts targs contentsFieldName . unM1 $ v)
879+ taggedObjectEnc opts targs tagFieldName contentsFieldName v = E.pairs (E.pair key val)
880+ where
881+ key :: Text
882+ key = pack tagFieldName
883+ val = toEncoding (constructorTagModifier opts (conName (undefined :: t c a p)))
884+ >< ((unTagged :: Tagged isRecord Encoding -> Encoding) . taggedObjectEnc' opts targs contentsFieldName . unM1 $ v)
887885
888886class TaggedObjectEnc' arity f isRecord where
889887 taggedObjectEnc' :: Options -> ToArgs Encoding arity a
@@ -953,9 +951,10 @@ instance ( GToEncoding arity a
953951 , ConsToEncoding arity a
954952 , Constructor c
955953 ) => TwoElemArrayEnc arity (C1 c a) where
956− twoElemArrayEnc opts targs x = E.tuple $
957− toEncoding (constructorTagModifier opts (conName (undefined :: t c a p))) >*<
958− gToEncoding opts targs x
954+ twoElemArrayEnc opts targs x = E.list id
955+ [ toEncoding (constructorTagModifier opts (conName (undefined :: t c a p)))
956+ , gToEncoding opts targs x
957+ ]
959958
960959--------------------------------------------------------------------------------
961960
@@ -1121,8 +1120,9 @@ instance ( EncodeProduct arity a
11211120 E.econcat $ intersperse E.comma $
11221121 filter (not . E.nullEncoding)
11231122 [encodeProduct opts targs a, encodeProduct opts targs b]
1124− encodeProduct opts targs (a :*: b) = encodeProduct opts targs a >*<
1125− encodeProduct opts targs b
1123+ encodeProduct opts targs (a :*: b) =
1124+ encodeProduct opts targs a >*<
1125+ encodeProduct opts targs b
11261126
11271127instance OVERLAPPABLE_ (GToEncoding arity a) => EncodeProduct arity a where
11281128 encodeProduct opts targs a = E.retagEncoding $ gToEncoding opts targs a
@@ -1168,14 +1168,12 @@ instance ( GToEncoding arity a
11681168 , ConsToEncoding arity a
11691169 , Constructor c
11701170 ) => ObjectWithSingleFieldEnc arity (C1 c a) where
1171− objectWithSingleFieldEnc opts targs v =
1172− E.openCurly ><
1173− toEncoding
1174− (constructorTagModifier opts
1175− (conName (undefined :: t c a p))) ><
1176− E.colon ><
1177− gToEncoding opts targs v ><
1178− E.closeCurly
1171+ objectWithSingleFieldEnc opts targs v = E.pairs (E.pair key val)
1172+ where
1173+ key :: Text
1174+ key = pack (constructorTagModifier opts (conName (undefined :: t c a p)))
1175+ val :: Encoding' Value
1176+ val = gToEncoding opts targs v
11791177
11801178--------------------------------------------------------------------------------
11811179
@@ -1810,13 +1808,11 @@ instance ToJSONKey k => ToJSON1 (M.Map k) where
18101808 ToJSONKeyValue f _ -> Array . V.fromList . map (toJSONPair f g) . M.toList
18111809 {-# INLINE liftToJSON #-}
18121810
1813− -- liftToEncoding :: forall a. (a -> Encoding) -> ([a] -> Encoding) -> M.Map k a -> Encoding
18141811 liftToEncoding g _ = case toJSONKey of
18151812 ToJSONKeyText _ f -> dict f g M.foldrWithKey
18161813 ToJSONKeyValue _ f -> listEncoding (pairEncoding f) . M.toList
18171814 where
1818− -- pairEncoding :: (k -> Encoding) -> (k, a) -> Encoding
1819− pairEncoding f (a, b) = tuple $ f a >*< g b
1815+ pairEncoding f (a, b) = E.list id [f a, g b]
18201816 {-# INLINE liftToEncoding #-}
18211817
18221818
@@ -1934,8 +1930,7 @@ instance ToJSONKey k => ToJSON1 (H.HashMap k) where
19341930 ToJSONKeyText _ f -> dict f g H.foldrWithKey
19351931 ToJSONKeyValue _ f -> listEncoding (pairEncoding f) . H.toList
19361932 where
1937− -- pairEncoding :: (k -> Encoding) -> (k, a) -> Encoding
1938− pairEncoding f (a, b) = tuple $ f a >*< g b
1933+ pairEncoding f (a, b) = E.list id [f a, g b]
19391934 {-# INLINE liftToEncoding #-}
19401935
19411936instance (ToJSON v, ToJSONKey k) => ToJSON (H.HashMap k v) where
@@ -2122,7 +2117,7 @@ instance (ToJSONKey a, ToJSON a) => ToJSONKey [a] where
21222117 toJSONKey = toJSONKeyList
21232118
21242119-------------------------------------------------------------------------------
2125−-- Tuple instances, see tuple-instances-to.hs
2120+-- Tuple instances
21262121-------------------------------------------------------------------------------
21272122
21282123instance ToJSON2 (,) where
@@ -2133,9 +2128,7 @@ instance ToJSON2 (,) where
21332128 return mv
21342129 {-# INLINE liftToJSON2 #-}
21352130
2136− liftToEncoding2 toA _ toB _ (a, b) = tuple $
2137− toA a >*<
2138− toB b
2131+ liftToEncoding2 toA _ toB _ (a, b) = E.list id [toA a, toB b]
21392132 {-# INLINE liftToEncoding2 #-}
21402133
21412134instance (ToJSON a) => ToJSON1 ((,) a) where
@@ -2159,10 +2152,11 @@ instance (ToJSON a) => ToJSON2 ((,,) a) where
21592152 return mv
21602153 {-# INLINE liftToJSON2 #-}
21612154
2162− liftToEncoding2 toB _ toC _ (a, b, c) = tuple $
2163− toEncoding a >*<
2164− toB b >*<
2165− toC c
2155+ liftToEncoding2 toB _ toC _ (a, b, c) = E.list id
2156+ [ toEncoding a
2157+ , toB b
2158+ , toC c
2159+ ]
21662160 {-# INLINE liftToEncoding2 #-}
21672161
21682162instance (ToJSON a, ToJSON b) => ToJSON1 ((,,) a b) where
@@ -2187,11 +2181,12 @@ instance (ToJSON a, ToJSON b) => ToJSON2 ((,,,) a b) where
21872181 return mv
21882182 {-# INLINE liftToJSON2 #-}
21892183
2190− liftToEncoding2 toC _ toD _ (a, b, c, d) = tuple $
2191− toEncoding a >*<
2192− toEncoding b >*<
2193− toC c >*<
2194− toD d
2184+ liftToEncoding2 toC _ toD _ (a, b, c, d) = E.list id
2185+ [ toEncoding a
2186+ , toEncoding b
2187+ , toC c
2188+ , toD d
2189+ ]
21952190 {-# INLINE liftToEncoding2 #-}
21962191
21972192instance (ToJSON a, ToJSON b, ToJSON c) => ToJSON1 ((,,,) a b c) where
@@ -2217,12 +2212,13 @@ instance (ToJSON a, ToJSON b, ToJSON c) => ToJSON2 ((,,,,) a b c) where
22172212 return mv
22182213 {-# INLINE liftToJSON2 #-}
22192214
2220− liftToEncoding2 toD _ toE _ (a, b, c, d, e) = tuple $
2221− toEncoding a >*<
2222− toEncoding b >*<
2223− toEncoding c >*<
2224− toD d >*<
2225− toE e
2215+ liftToEncoding2 toD _ toE _ (a, b, c, d, e) = E.list id
2216+ [ toEncoding a
2217+ , toEncoding b
2218+ , toEncoding c
2219+ , toD d
2220+ , toE e
2221+ ]
22262222 {-# INLINE liftToEncoding2 #-}
22272223
22282224instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d) => ToJSON1 ((,,,,) a b c d) where
@@ -2249,13 +2245,14 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d) => ToJSON2 ((,,,,,) a b c d) w
22492245 return mv
22502246 {-# INLINE liftToJSON2 #-}
22512247
2252− liftToEncoding2 toE _ toF _ (a, b, c, d, e, f) = tuple $
2253− toEncoding a >*<
2254− toEncoding b >*<
2255− toEncoding c >*<
2256− toEncoding d >*<
2257− toE e >*<
2258− toF f
2248+ liftToEncoding2 toE _ toF _ (a, b, c, d, e, f) = E.list id
2249+ [ toEncoding a
2250+ , toEncoding b
2251+ , toEncoding c
2252+ , toEncoding d
2253+ , toE e
2254+ , toF f
2255+ ]
22592256 {-# INLINE liftToEncoding2 #-}
22602257
22612258instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) => ToJSON1 ((,,,,,) a b c d e) where
@@ -2283,14 +2280,15 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) => ToJSON2 ((,,,,,,)
22832280 return mv
22842281 {-# INLINE liftToJSON2 #-}
22852282
2286− liftToEncoding2 toF _ toG _ (a, b, c, d, e, f, g) = tuple $
2287− toEncoding a >*<
2288− toEncoding b >*<
2289− toEncoding c >*<
2290− toEncoding d >*<
2291− toEncoding e >*<
2292− toF f >*<
2293− toG g
2283+ liftToEncoding2 toF _ toG _ (a, b, c, d, e, f, g) = E.list id
2284+ [ toEncoding a
2285+ , toEncoding b
2286+ , toEncoding c
2287+ , toEncoding d
2288+ , toEncoding e
2289+ , toF f
2290+ , toG g
2291+ ]
22942292 {-# INLINE liftToEncoding2 #-}
22952293
22962294instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) => ToJSON1 ((,,,,,,) a b c d e f) where
@@ -2319,15 +2317,16 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) => ToJSON2
23192317 return mv
23202318 {-# INLINE liftToJSON2 #-}
23212319
2322− liftToEncoding2 toG _ toH _ (a, b, c, d, e, f, g, h) = tuple $
2323− toEncoding a >*<
2324− toEncoding b >*<
2325− toEncoding c >*<
2326− toEncoding d >*<
2327− toEncoding e >*<
2328− toEncoding f >*<
2329− toG g >*<
2330− toH h
2320+ liftToEncoding2 toG _ toH _ (a, b, c, d, e, f, g, h) = E.list id
2321+ [ toEncoding a
2322+ , toEncoding b
2323+ , toEncoding c
2324+ , toEncoding d
2325+ , toEncoding e
2326+ , toEncoding f
2327+ , toG g
2328+ , toH h
2329+ ]
23312330 {-# INLINE liftToEncoding2 #-}
23322331
23332332instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g) => ToJSON1 ((,,,,,,,) a b c d e f g) where
@@ -2357,16 +2356,17 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g)
23572356 return mv
23582357 {-# INLINE liftToJSON2 #-}
23592358
2360− liftToEncoding2 toH _ toI _ (a, b, c, d, e, f, g, h, i) = tuple $
2361− toEncoding a >*<
2362− toEncoding b >*<
2363− toEncoding c >*<
2364− toEncoding d >*<
2365− toEncoding e >*<
2366− toEncoding f >*<
2367− toEncoding g >*<
2368− toH h >*<
2369− toI i
2359+ liftToEncoding2 toH _ toI _ (a, b, c, d, e, f, g, h, i) = E.list id
2360+ [ toEncoding a
2361+ , toEncoding b
2362+ , toEncoding c
2363+ , toEncoding d
2364+ , toEncoding e
2365+ , toEncoding f
2366+ , toEncoding g
2367+ , toH h
2368+ , toI i
2369+ ]
23702370 {-# INLINE liftToEncoding2 #-}
23712371
23722372instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h) => ToJSON1 ((,,,,,,,,) a b c d e f g h) where
@@ -2397,17 +2397,18 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
23972397 return mv
23982398 {-# INLINE liftToJSON2 #-}
23992399
2400− liftToEncoding2 toI _ toJ _ (a, b, c, d, e, f, g, h, i, j) = tuple $
2401− toEncoding a >*<
2402− toEncoding b >*<
2403− toEncoding c >*<
2404− toEncoding d >*<
2405− toEncoding e >*<
2406− toEncoding f >*<
2407− toEncoding g >*<
2408− toEncoding h >*<
2409− toI i >*<
2410− toJ j
2400+ liftToEncoding2 toI _ toJ _ (a, b, c, d, e, f, g, h, i, j) = E.list id
2401+ [ toEncoding a
2402+ , toEncoding b
2403+ , toEncoding c
2404+ , toEncoding d
2405+ , toEncoding e
2406+ , toEncoding f
2407+ , toEncoding g
2408+ , toEncoding h
2409+ , toI i
2410+ , toJ j
2411+ ]
24112412 {-# INLINE liftToEncoding2 #-}
24122413
24132414instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i) => ToJSON1 ((,,,,,,,,,) a b c d e f g h i) where
@@ -2439,18 +2440,19 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
24392440 return mv
24402441 {-# INLINE liftToJSON2 #-}
24412442
2442− liftToEncoding2 toJ _ toK _ (a, b, c, d, e, f, g, h, i, j, k) = tuple $
2443− toEncoding a >*<
2444− toEncoding b >*<
2445− toEncoding c >*<
2446− toEncoding d >*<
2447− toEncoding e >*<
2448− toEncoding f >*<
2449− toEncoding g >*<
2450− toEncoding h >*<
2451− toEncoding i >*<
2452− toJ j >*<
2453− toK k
2443+ liftToEncoding2 toJ _ toK _ (a, b, c, d, e, f, g, h, i, j, k) = E.list id
2444+ [ toEncoding a
2445+ , toEncoding b
2446+ , toEncoding c
2447+ , toEncoding d
2448+ , toEncoding e
2449+ , toEncoding f
2450+ , toEncoding g
2451+ , toEncoding h
2452+ , toEncoding i
2453+ , toJ j
2454+ , toK k
2455+ ]
24542456 {-# INLINE liftToEncoding2 #-}
24552457
24562458instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j) => ToJSON1 ((,,,,,,,,,,) a b c d e f g h i j) where
@@ -2483,19 +2485,20 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
24832485 return mv
24842486 {-# INLINE liftToJSON2 #-}
24852487
2486− liftToEncoding2 toK _ toL _ (a, b, c, d, e, f, g, h, i, j, k, l) = tuple $
2487− toEncoding a >*<
2488− toEncoding b >*<
2489− toEncoding c >*<
2490− toEncoding d >*<
2491− toEncoding e >*<
2492− toEncoding f >*<
2493− toEncoding g >*<
2494− toEncoding h >*<
2495− toEncoding i >*<
2496− toEncoding j >*<
2497− toK k >*<
2498− toL l
2488+ liftToEncoding2 toK _ toL _ (a, b, c, d, e, f, g, h, i, j, k, l) = E.list id
2489+ [ toEncoding a
2490+ , toEncoding b
2491+ , toEncoding c
2492+ , toEncoding d
2493+ , toEncoding e
2494+ , toEncoding f
2495+ , toEncoding g
2496+ , toEncoding h
2497+ , toEncoding i
2498+ , toEncoding j
2499+ , toK k
2500+ , toL l
2501+ ]
24992502 {-# INLINE liftToEncoding2 #-}
25002503
25012504instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k) => ToJSON1 ((,,,,,,,,,,,) a b c d e f g h i j k) where
@@ -2529,20 +2532,21 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
25292532 return mv
25302533 {-# INLINE liftToJSON2 #-}
25312534
2532− liftToEncoding2 toL _ toM _ (a, b, c, d, e, f, g, h, i, j, k, l, m) = tuple $
2533− toEncoding a >*<
2534− toEncoding b >*<
2535− toEncoding c >*<
2536− toEncoding d >*<
2537− toEncoding e >*<
2538− toEncoding f >*<
2539− toEncoding g >*<
2540− toEncoding h >*<
2541− toEncoding i >*<
2542− toEncoding j >*<
2543− toEncoding k >*<
2544− toL l >*<
2545− toM m
2535+ liftToEncoding2 toL _ toM _ (a, b, c, d, e, f, g, h, i, j, k, l, m) = E.list id
2536+ [ toEncoding a
2537+ , toEncoding b
2538+ , toEncoding c
2539+ , toEncoding d
2540+ , toEncoding e
2541+ , toEncoding f
2542+ , toEncoding g
2543+ , toEncoding h
2544+ , toEncoding i
2545+ , toEncoding j
2546+ , toEncoding k
2547+ , toL l
2548+ , toM m
2549+ ]
25462550 {-# INLINE liftToEncoding2 #-}
25472551
25482552instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l) => ToJSON1 ((,,,,,,,,,,,,) a b c d e f g h i j k l) where
@@ -2577,21 +2581,22 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
25772581 return mv
25782582 {-# INLINE liftToJSON2 #-}
25792583
2580− liftToEncoding2 toM _ toN _ (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = tuple $
2581− toEncoding a >*<
2582− toEncoding b >*<
2583− toEncoding c >*<
2584− toEncoding d >*<
2585− toEncoding e >*<
2586− toEncoding f >*<
2587− toEncoding g >*<
2588− toEncoding h >*<
2589− toEncoding i >*<
2590− toEncoding j >*<
2591− toEncoding k >*<
2592− toEncoding l >*<
2593− toM m >*<
2594− toN n
2584+ liftToEncoding2 toM _ toN _ (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = E.list id
2585+ [ toEncoding a
2586+ , toEncoding b
2587+ , toEncoding c
2588+ , toEncoding d
2589+ , toEncoding e
2590+ , toEncoding f
2591+ , toEncoding g
2592+ , toEncoding h
2593+ , toEncoding i
2594+ , toEncoding j
2595+ , toEncoding k
2596+ , toEncoding l
2597+ , toM m
2598+ , toN n
2599+ ]
25952600 {-# INLINE liftToEncoding2 #-}
25962601
25972602instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l, ToJSON m) => ToJSON1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) where
@@ -2627,22 +2632,23 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g,
26272632 return mv
26282633 {-# INLINE liftToJSON2 #-}
26292634
2630− liftToEncoding2 toN _ toO _ (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = tuple $
2631− toEncoding a >*<
2632− toEncoding b >*<
2633− toEncoding c >*<
2634− toEncoding d >*<
2635− toEncoding e >*<
2636− toEncoding f >*<
2637− toEncoding g >*<
2638− toEncoding h >*<
2639− toEncoding i >*<
2640− toEncoding j >*<
2641− toEncoding k >*<
2642− toEncoding l >*<
2643− toEncoding m >*<
2644− toN n >*<
2645− toO o
2635+ liftToEncoding2 toN _ toO _ (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = E.list id
2636+ [ toEncoding a
2637+ , toEncoding b
2638+ , toEncoding c
2639+ , toEncoding d
2640+ , toEncoding e
2641+ , toEncoding f
2642+ , toEncoding g
2643+ , toEncoding h
2644+ , toEncoding i
2645+ , toEncoding j
2646+ , toEncoding k
2647+ , toEncoding l
2648+ , toEncoding m
2649+ , toN n
2650+ , toO o
2651+ ]
26462652 {-# INLINE liftToEncoding2 #-}
26472653
26482654instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l, ToJSON m, ToJSON n) => ToJSON1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) where