on master help sign in
So much boilerplate: 15-tuple FromJSON and ToJSON instances
72d87b4Bryan O'Sullivan
Data/Aeson/Types/Instances.hs+233
@@ -763,6 +763,239 @@ instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
763 <*> parseJSON (V.unsafeIndex ary 9)
763 <*> parseJSON (V.unsafeIndex ary 9)
764 {-# INLINE parseJSON #-}
764 {-# INLINE parseJSON #-}
765
765
766+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
767+ ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k) =>
768+ ToJSON (a,b,c,d,e,f,g,h,i,j,k) where
769+ toJSON (a,b,c,d,e,f,g,h,i,j,k) = Array $ V.create $ do
770+ mv <- VM.unsafeNew 11
771+ VM.unsafeWrite mv 0 (toJSON a)
772+ VM.unsafeWrite mv 1 (toJSON b)
773+ VM.unsafeWrite mv 2 (toJSON c)
774+ VM.unsafeWrite mv 3 (toJSON d)
775+ VM.unsafeWrite mv 4 (toJSON e)
776+ VM.unsafeWrite mv 5 (toJSON f)
777+ VM.unsafeWrite mv 6 (toJSON g)
778+ VM.unsafeWrite mv 7 (toJSON h)
779+ VM.unsafeWrite mv 8 (toJSON i)
780+ VM.unsafeWrite mv 9 (toJSON j)
781+ VM.unsafeWrite mv 10 (toJSON k)
782+ return mv
783+ {-# INLINE toJSON #-}
784+
785+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
786+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j,
787+ FromJSON k) =>
788+ FromJSON (a,b,c,d,e,f,g,h,i,j,k) where
789+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j,k)" $ \ary ->
790+ let n = V.length ary
791+ in if n /= 11
792+ then fail $ "cannot unpack array of length " ++
793+ show n ++ " into an 11-tuple"
794+ else (,,,,,,,,,,)
795+ <$> parseJSON (V.unsafeIndex ary 0)
796+ <*> parseJSON (V.unsafeIndex ary 1)
797+ <*> parseJSON (V.unsafeIndex ary 2)
798+ <*> parseJSON (V.unsafeIndex ary 3)
799+ <*> parseJSON (V.unsafeIndex ary 4)
800+ <*> parseJSON (V.unsafeIndex ary 5)
801+ <*> parseJSON (V.unsafeIndex ary 6)
802+ <*> parseJSON (V.unsafeIndex ary 7)
803+ <*> parseJSON (V.unsafeIndex ary 8)
804+ <*> parseJSON (V.unsafeIndex ary 9)
805+ <*> parseJSON (V.unsafeIndex ary 10)
806+ {-# INLINE parseJSON #-}
807+
808+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
809+ ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l) =>
810+ ToJSON (a,b,c,d,e,f,g,h,i,j,k,l) where
811+ toJSON (a,b,c,d,e,f,g,h,i,j,k,l) = Array $ V.create $ do
812+ mv <- VM.unsafeNew 12
813+ VM.unsafeWrite mv 0 (toJSON a)
814+ VM.unsafeWrite mv 1 (toJSON b)
815+ VM.unsafeWrite mv 2 (toJSON c)
816+ VM.unsafeWrite mv 3 (toJSON d)
817+ VM.unsafeWrite mv 4 (toJSON e)
818+ VM.unsafeWrite mv 5 (toJSON f)
819+ VM.unsafeWrite mv 6 (toJSON g)
820+ VM.unsafeWrite mv 7 (toJSON h)
821+ VM.unsafeWrite mv 8 (toJSON i)
822+ VM.unsafeWrite mv 9 (toJSON j)
823+ VM.unsafeWrite mv 10 (toJSON k)
824+ VM.unsafeWrite mv 11 (toJSON l)
825+ return mv
826+ {-# INLINE toJSON #-}
827+
828+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
829+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j,
830+ FromJSON k, FromJSON l) =>
831+ FromJSON (a,b,c,d,e,f,g,h,i,j,k,l) where
832+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j,k,l)" $ \ary ->
833+ let n = V.length ary
834+ in if n /= 12
835+ then fail $ "cannot unpack array of length " ++
836+ show n ++ " into a 12-tuple"
837+ else (,,,,,,,,,,,)
838+ <$> parseJSON (V.unsafeIndex ary 0)
839+ <*> parseJSON (V.unsafeIndex ary 1)
840+ <*> parseJSON (V.unsafeIndex ary 2)
841+ <*> parseJSON (V.unsafeIndex ary 3)
842+ <*> parseJSON (V.unsafeIndex ary 4)
843+ <*> parseJSON (V.unsafeIndex ary 5)
844+ <*> parseJSON (V.unsafeIndex ary 6)
845+ <*> parseJSON (V.unsafeIndex ary 7)
846+ <*> parseJSON (V.unsafeIndex ary 8)
847+ <*> parseJSON (V.unsafeIndex ary 9)
848+ <*> parseJSON (V.unsafeIndex ary 10)
849+ <*> parseJSON (V.unsafeIndex ary 11)
850+ {-# INLINE parseJSON #-}
851+
852+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
853+ ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l,
854+ ToJSON m) =>
855+ ToJSON (a,b,c,d,e,f,g,h,i,j,k,l,m) where
856+ toJSON (a,b,c,d,e,f,g,h,i,j,k,l,m) = Array $ V.create $ do
857+ mv <- VM.unsafeNew 13
858+ VM.unsafeWrite mv 0 (toJSON a)
859+ VM.unsafeWrite mv 1 (toJSON b)
860+ VM.unsafeWrite mv 2 (toJSON c)
861+ VM.unsafeWrite mv 3 (toJSON d)
862+ VM.unsafeWrite mv 4 (toJSON e)
863+ VM.unsafeWrite mv 5 (toJSON f)
864+ VM.unsafeWrite mv 6 (toJSON g)
865+ VM.unsafeWrite mv 7 (toJSON h)
866+ VM.unsafeWrite mv 8 (toJSON i)
867+ VM.unsafeWrite mv 9 (toJSON j)
868+ VM.unsafeWrite mv 10 (toJSON k)
869+ VM.unsafeWrite mv 11 (toJSON l)
870+ VM.unsafeWrite mv 12 (toJSON m)
871+ return mv
872+ {-# INLINE toJSON #-}
873+
874+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
875+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j,
876+ FromJSON k, FromJSON l, FromJSON m) =>
877+ FromJSON (a,b,c,d,e,f,g,h,i,j,k,l,m) where
878+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j,k,l,m)" $ \ary ->
879+ let n = V.length ary
880+ in if n /= 13
881+ then fail $ "cannot unpack array of length " ++
882+ show n ++ " into a 13-tuple"
883+ else (,,,,,,,,,,,,)
884+ <$> parseJSON (V.unsafeIndex ary 0)
885+ <*> parseJSON (V.unsafeIndex ary 1)
886+ <*> parseJSON (V.unsafeIndex ary 2)
887+ <*> parseJSON (V.unsafeIndex ary 3)
888+ <*> parseJSON (V.unsafeIndex ary 4)
889+ <*> parseJSON (V.unsafeIndex ary 5)
890+ <*> parseJSON (V.unsafeIndex ary 6)
891+ <*> parseJSON (V.unsafeIndex ary 7)
892+ <*> parseJSON (V.unsafeIndex ary 8)
893+ <*> parseJSON (V.unsafeIndex ary 9)
894+ <*> parseJSON (V.unsafeIndex ary 10)
895+ <*> parseJSON (V.unsafeIndex ary 11)
896+ <*> parseJSON (V.unsafeIndex ary 12)
897+ {-# INLINE parseJSON #-}
898+
899+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
900+ ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l,
901+ ToJSON m, ToJSON n) =>
902+ ToJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
903+ toJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n) = Array $ V.create $ do
904+ mv <- VM.unsafeNew 14
905+ VM.unsafeWrite mv 0 (toJSON a)
906+ VM.unsafeWrite mv 1 (toJSON b)
907+ VM.unsafeWrite mv 2 (toJSON c)
908+ VM.unsafeWrite mv 3 (toJSON d)
909+ VM.unsafeWrite mv 4 (toJSON e)
910+ VM.unsafeWrite mv 5 (toJSON f)
911+ VM.unsafeWrite mv 6 (toJSON g)
912+ VM.unsafeWrite mv 7 (toJSON h)
913+ VM.unsafeWrite mv 8 (toJSON i)
914+ VM.unsafeWrite mv 9 (toJSON j)
915+ VM.unsafeWrite mv 10 (toJSON k)
916+ VM.unsafeWrite mv 11 (toJSON l)
917+ VM.unsafeWrite mv 12 (toJSON m)
918+ VM.unsafeWrite mv 13 (toJSON n)
919+ return mv
920+ {-# INLINE toJSON #-}
921+
922+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
923+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j,
924+ FromJSON k, FromJSON l, FromJSON m, FromJSON n) =>
925+ FromJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
926+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j,k,l,m,n)" $ \ary ->
927+ let n = V.length ary
928+ in if n /= 14
929+ then fail $ "cannot unpack array of length " ++
930+ show n ++ " into a 14-tuple"
931+ else (,,,,,,,,,,,,,)
932+ <$> parseJSON (V.unsafeIndex ary 0)
933+ <*> parseJSON (V.unsafeIndex ary 1)
934+ <*> parseJSON (V.unsafeIndex ary 2)
935+ <*> parseJSON (V.unsafeIndex ary 3)
936+ <*> parseJSON (V.unsafeIndex ary 4)
937+ <*> parseJSON (V.unsafeIndex ary 5)
938+ <*> parseJSON (V.unsafeIndex ary 6)
939+ <*> parseJSON (V.unsafeIndex ary 7)
940+ <*> parseJSON (V.unsafeIndex ary 8)
941+ <*> parseJSON (V.unsafeIndex ary 9)
942+ <*> parseJSON (V.unsafeIndex ary 10)
943+ <*> parseJSON (V.unsafeIndex ary 11)
944+ <*> parseJSON (V.unsafeIndex ary 12)
945+ <*> parseJSON (V.unsafeIndex ary 13)
946+ {-# INLINE parseJSON #-}
947+
948+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
949+ ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l,
950+ ToJSON m, ToJSON n, ToJSON o) =>
951+ ToJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
952+ toJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) = Array $ V.create $ do
953+ mv <- VM.unsafeNew 14
954+ VM.unsafeWrite mv 0 (toJSON a)
955+ VM.unsafeWrite mv 1 (toJSON b)
956+ VM.unsafeWrite mv 2 (toJSON c)
957+ VM.unsafeWrite mv 3 (toJSON d)
958+ VM.unsafeWrite mv 4 (toJSON e)
959+ VM.unsafeWrite mv 5 (toJSON f)
960+ VM.unsafeWrite mv 6 (toJSON g)
961+ VM.unsafeWrite mv 7 (toJSON h)
962+ VM.unsafeWrite mv 8 (toJSON i)
963+ VM.unsafeWrite mv 9 (toJSON j)
964+ VM.unsafeWrite mv 10 (toJSON k)
965+ VM.unsafeWrite mv 11 (toJSON l)
966+ VM.unsafeWrite mv 12 (toJSON m)
967+ VM.unsafeWrite mv 13 (toJSON n)
968+ VM.unsafeWrite mv 14 (toJSON o)
969+ return mv
970+ {-# INLINE toJSON #-}
971+
972+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
973+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j,
974+ FromJSON k, FromJSON l, FromJSON m, FromJSON n, FromJSON o) =>
975+ FromJSON (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
976+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)" $ \ary ->
977+ let n = V.length ary
978+ in if n /= 15
979+ then fail $ "cannot unpack array of length " ++
980+ show n ++ " into a 14-tuple"
981+ else (,,,,,,,,,,,,,,)
982+ <$> parseJSON (V.unsafeIndex ary 0)
983+ <*> parseJSON (V.unsafeIndex ary 1)
984+ <*> parseJSON (V.unsafeIndex ary 2)
985+ <*> parseJSON (V.unsafeIndex ary 3)
986+ <*> parseJSON (V.unsafeIndex ary 4)
987+ <*> parseJSON (V.unsafeIndex ary 5)
988+ <*> parseJSON (V.unsafeIndex ary 6)
989+ <*> parseJSON (V.unsafeIndex ary 7)
990+ <*> parseJSON (V.unsafeIndex ary 8)
991+ <*> parseJSON (V.unsafeIndex ary 9)
992+ <*> parseJSON (V.unsafeIndex ary 10)
993+ <*> parseJSON (V.unsafeIndex ary 11)
994+ <*> parseJSON (V.unsafeIndex ary 12)
995+ <*> parseJSON (V.unsafeIndex ary 13)
996+ <*> parseJSON (V.unsafeIndex ary 14)
997+ {-# INLINE parseJSON #-}
998+
766instance ToJSON a => ToJSON (Dual a) where
999instance ToJSON a => ToJSON (Dual a) where
767 toJSON = toJSON . getDual
1000 toJSON = toJSON . getDual
768 {-# INLINE toJSON #-}
1001 {-# INLINE toJSON #-}