on master help sign in
Support up to 10-tuple FromJSON and ToJSON instances
063ee6eBryan O'Sullivan
Data/Aeson/Types/Instances.hs+123−7
@@ -557,7 +557,8 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d) => ToJSON (a,b,c,d) where
557 return mv
557 return mv
558 {-# INLINE toJSON #-}
558 {-# INLINE toJSON #-}
559
559
560−instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON (a,b,c,d) where
560+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) =>
561+ FromJSON (a,b,c,d) where
561 parseJSON = withArray "(a,b,c,d)" $ \abcd ->
562 parseJSON = withArray "(a,b,c,d)" $ \abcd ->
562 let n = V.length abcd
563 let n = V.length abcd
563 in if n == 4
564 in if n == 4
@@ -569,7 +570,8 @@ instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON (a,b,c,d)
569 show n ++ " into a 4-tuple"
570 show n ++ " into a 4-tuple"
570 {-# INLINE parseJSON #-}
571 {-# INLINE parseJSON #-}
571
572
572−instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) => ToJSON (a,b,c,d,e) where
573+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) =>
574+ ToJSON (a,b,c,d,e) where
573 toJSON (a,b,c,d,e) = Array $ V.create $ do
575 toJSON (a,b,c,d,e) = Array $ V.create $ do
574 mv <- VM.unsafeNew 5
576 mv <- VM.unsafeNew 5
575 VM.unsafeWrite mv 0 (toJSON a)
577 VM.unsafeWrite mv 0 (toJSON a)
@@ -580,7 +582,8 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) => ToJSON (a,b,c,d,e
580 return mv
582 return mv
581 {-# INLINE toJSON #-}
583 {-# INLINE toJSON #-}
582
584
583−instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSON (a,b,c,d,e) where
585+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) =>
586+ FromJSON (a,b,c,d,e) where
584 parseJSON = withArray "(a,b,c,d,e)" $ \abcde ->
587 parseJSON = withArray "(a,b,c,d,e)" $ \abcde ->
585 let n = V.length abcde
588 let n = V.length abcde
586 in if n == 5
589 in if n == 5
@@ -593,7 +596,8 @@ instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSO
593 show n ++ " into a 5-tuple"
596 show n ++ " into a 5-tuple"
594 {-# INLINE parseJSON #-}
597 {-# INLINE parseJSON #-}
595
598
596−instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) => ToJSON (a,b,c,d,e,f) where
599+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) =>
600+ ToJSON (a,b,c,d,e,f) where
597 toJSON (a,b,c,d,e,f) = Array $ V.create $ do
601 toJSON (a,b,c,d,e,f) = Array $ V.create $ do
598 mv <- VM.unsafeNew 6
602 mv <- VM.unsafeNew 6
599 VM.unsafeWrite mv 0 (toJSON a)
603 VM.unsafeWrite mv 0 (toJSON a)
@@ -605,7 +609,8 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) => ToJSON
605 return mv
609 return mv
606 {-# INLINE toJSON #-}
610 {-# INLINE toJSON #-}
607
611
608−instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f) => FromJSON (a,b,c,d,e,f) where
612+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
613+ FromJSON f) => FromJSON (a,b,c,d,e,f) where
609 parseJSON = withArray "(a,b,c,d,e,f)" $ \abcdef ->
614 parseJSON = withArray "(a,b,c,d,e,f)" $ \abcdef ->
610 let n = V.length abcdef
615 let n = V.length abcdef
611 in if n == 6
616 in if n == 6
@@ -619,7 +624,8 @@ instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f
619 show n ++ " into a 6-tuple"
624 show n ++ " into a 6-tuple"
620 {-# INLINE parseJSON #-}
625 {-# INLINE parseJSON #-}
621
626
622−instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g) => ToJSON (a,b,c,d,e,f,g) where
627+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
628+ ToJSON g) => ToJSON (a,b,c,d,e,f,g) where
623 toJSON (a,b,c,d,e,f,g) = Array $ V.create $ do
629 toJSON (a,b,c,d,e,f,g) = Array $ V.create $ do
624 mv <- VM.unsafeNew 7
630 mv <- VM.unsafeNew 7
625 VM.unsafeWrite mv 0 (toJSON a)
631 VM.unsafeWrite mv 0 (toJSON a)
@@ -632,7 +638,8 @@ instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g)
632 return mv
638 return mv
633 {-# INLINE toJSON #-}
639 {-# INLINE toJSON #-}
634
640
635−instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g) => FromJSON (a,b,c,d,e,f,g) where
641+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
642+ FromJSON f, FromJSON g) => FromJSON (a,b,c,d,e,f,g) where
636 parseJSON = withArray "(a,b,c,d,e,f,g)" $ \abcdefg ->
643 parseJSON = withArray "(a,b,c,d,e,f,g)" $ \abcdefg ->
637 let n = V.length abcdefg
644 let n = V.length abcdefg
638 in if n == 7
645 in if n == 7
@@ -647,6 +654,115 @@ instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f
647 show n ++ " into a 7-tuple"
654 show n ++ " into a 7-tuple"
648 {-# INLINE parseJSON #-}
655 {-# INLINE parseJSON #-}
649
656
657+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
658+ ToJSON g, ToJSON h) => ToJSON (a,b,c,d,e,f,g,h) where
659+ toJSON (a,b,c,d,e,f,g,h) = Array $ V.create $ do
660+ mv <- VM.unsafeNew 8
661+ VM.unsafeWrite mv 0 (toJSON a)
662+ VM.unsafeWrite mv 1 (toJSON b)
663+ VM.unsafeWrite mv 2 (toJSON c)
664+ VM.unsafeWrite mv 3 (toJSON d)
665+ VM.unsafeWrite mv 4 (toJSON e)
666+ VM.unsafeWrite mv 5 (toJSON f)
667+ VM.unsafeWrite mv 6 (toJSON g)
668+ VM.unsafeWrite mv 7 (toJSON h)
669+ return mv
670+ {-# INLINE toJSON #-}
671+
672+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
673+ FromJSON f, FromJSON g, FromJSON h) =>
674+ FromJSON (a,b,c,d,e,f,g,h) where
675+ parseJSON = withArray "(a,b,c,d,e,f,g,h)" $ \ary ->
676+ let n = V.length ary
677+ in if n /= 8
678+ then fail $ "cannot unpack array of length " ++
679+ show n ++ " into an 8-tuple"
680+ else (,,,,,,,)
681+ <$> parseJSON (V.unsafeIndex ary 0)
682+ <*> parseJSON (V.unsafeIndex ary 1)
683+ <*> parseJSON (V.unsafeIndex ary 2)
684+ <*> parseJSON (V.unsafeIndex ary 3)
685+ <*> parseJSON (V.unsafeIndex ary 4)
686+ <*> parseJSON (V.unsafeIndex ary 5)
687+ <*> parseJSON (V.unsafeIndex ary 6)
688+ <*> parseJSON (V.unsafeIndex ary 7)
689+ {-# INLINE parseJSON #-}
690+
691+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
692+ ToJSON g, ToJSON h, ToJSON i) => ToJSON (a,b,c,d,e,f,g,h,i) where
693+ toJSON (a,b,c,d,e,f,g,h,i) = Array $ V.create $ do
694+ mv <- VM.unsafeNew 9
695+ VM.unsafeWrite mv 0 (toJSON a)
696+ VM.unsafeWrite mv 1 (toJSON b)
697+ VM.unsafeWrite mv 2 (toJSON c)
698+ VM.unsafeWrite mv 3 (toJSON d)
699+ VM.unsafeWrite mv 4 (toJSON e)
700+ VM.unsafeWrite mv 5 (toJSON f)
701+ VM.unsafeWrite mv 6 (toJSON g)
702+ VM.unsafeWrite mv 7 (toJSON h)
703+ VM.unsafeWrite mv 8 (toJSON i)
704+ return mv
705+ {-# INLINE toJSON #-}
706+
707+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
708+ FromJSON f, FromJSON g, FromJSON h, FromJSON i) =>
709+ FromJSON (a,b,c,d,e,f,g,h,i) where
710+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i)" $ \ary ->
711+ let n = V.length ary
712+ in if n /= 9
713+ then fail $ "cannot unpack array of length " ++
714+ show n ++ " into a 9-tuple"
715+ else (,,,,,,,,)
716+ <$> parseJSON (V.unsafeIndex ary 0)
717+ <*> parseJSON (V.unsafeIndex ary 1)
718+ <*> parseJSON (V.unsafeIndex ary 2)
719+ <*> parseJSON (V.unsafeIndex ary 3)
720+ <*> parseJSON (V.unsafeIndex ary 4)
721+ <*> parseJSON (V.unsafeIndex ary 5)
722+ <*> parseJSON (V.unsafeIndex ary 6)
723+ <*> parseJSON (V.unsafeIndex ary 7)
724+ <*> parseJSON (V.unsafeIndex ary 8)
725+ {-# INLINE parseJSON #-}
726+
727+instance (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f,
728+ ToJSON g, ToJSON h, ToJSON i, ToJSON j) =>
729+ ToJSON (a,b,c,d,e,f,g,h,i,j) where
730+ toJSON (a,b,c,d,e,f,g,h,i,j) = Array $ V.create $ do
731+ mv <- VM.unsafeNew 10
732+ VM.unsafeWrite mv 0 (toJSON a)
733+ VM.unsafeWrite mv 1 (toJSON b)
734+ VM.unsafeWrite mv 2 (toJSON c)
735+ VM.unsafeWrite mv 3 (toJSON d)
736+ VM.unsafeWrite mv 4 (toJSON e)
737+ VM.unsafeWrite mv 5 (toJSON f)
738+ VM.unsafeWrite mv 6 (toJSON g)
739+ VM.unsafeWrite mv 7 (toJSON h)
740+ VM.unsafeWrite mv 8 (toJSON i)
741+ VM.unsafeWrite mv 9 (toJSON j)
742+ return mv
743+ {-# INLINE toJSON #-}
744+
745+instance (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e,
746+ FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j) =>
747+ FromJSON (a,b,c,d,e,f,g,h,i,j) where
748+ parseJSON = withArray "(a,b,c,d,e,f,g,h,i,j)" $ \ary ->
749+ let n = V.length ary
750+ in if n /= 10
751+ then fail $ "cannot unpack array of length " ++
752+ show n ++ " into a 10-tuple"
753+ else (,,,,,,,,,)
754+ <$> parseJSON (V.unsafeIndex ary 0)
755+ <*> parseJSON (V.unsafeIndex ary 1)
756+ <*> parseJSON (V.unsafeIndex ary 2)
757+ <*> parseJSON (V.unsafeIndex ary 3)
758+ <*> parseJSON (V.unsafeIndex ary 4)
759+ <*> parseJSON (V.unsafeIndex ary 5)
760+ <*> parseJSON (V.unsafeIndex ary 6)
761+ <*> parseJSON (V.unsafeIndex ary 7)
762+ <*> parseJSON (V.unsafeIndex ary 8)
763+ <*> parseJSON (V.unsafeIndex ary 9)
764+ {-# INLINE parseJSON #-}
765+
650instance ToJSON a => ToJSON (Dual a) where
766instance ToJSON a => ToJSON (Dual a) where
651 toJSON = toJSON . getDual
767 toJSON = toJSON . getDual
652 {-# INLINE toJSON #-}
768 {-# INLINE toJSON #-}