@@ -956,7 +956,6 @@ class ConsToJSON enc arity f where
956956
957957class ConsToJSON' enc arity f isRecord where
958958 consToJSON' :: Options -> ToArgs enc arity a
959− -> Bool -- ^ Are we a record with one field?
960959 -> f a -> Tagged isRecord enc
961960
962961instance ( IsRecord f isRecord
@@ -965,23 +964,28 @@ instance ( IsRecord f isRecord
965964 where
966965 consToJSON opts targs =
967966 (unTagged :: Tagged isRecord enc -> enc)
968− . consToJSON' opts targs (isUnary (undefined :: f a))
967+ . consToJSON' opts targs
969968 {-# INLINE consToJSON #-}
970969
971−instance ( RecordToPairs enc pairs arity f
970+instance OVERLAPPING_
971+ ( RecordToPairs enc pairs arity (S1 s f)
972972 , FromPairs enc pairs
973973 , GToJSON enc arity f
974− ) => ConsToJSON' enc arity f True
974+ ) => ConsToJSON' enc arity (S1 s f) True
975975 where
976− consToJSON' opts targs isUn =
977− Tagged .
978− case (isUn, unwrapUnaryRecords opts) of
979− (True, True) -> gToJSON opts targs
980− _ -> fromPairs . recordToPairs opts targs
976+ consToJSON' opts targs
977+ | unwrapUnaryRecords opts = Tagged . gToJSON opts targs
978+ | otherwise = Tagged . fromPairs . recordToPairs opts targs
981979 {-# INLINE consToJSON' #-}
982980
981+instance ( RecordToPairs enc pairs arity f
982+ , FromPairs enc pairs
983+ ) => ConsToJSON' enc arity f True
984+ where
985+ consToJSON' opts targs = Tagged . fromPairs . recordToPairs opts targs
986+
983987instance GToJSON enc arity f => ConsToJSON' enc arity f False where
984− consToJSON' opts targs _ = Tagged . gToJSON opts targs
988+ consToJSON' opts targs = Tagged . gToJSON opts targs
985989 {-# INLINE consToJSON' #-}
986990
987991--------------------------------------------------------------------------------