|
3 | 3 | {-# LANGUAGE DefaultSignatures #-} |
4 | 4 | {-# LANGUAGE FlexibleContexts #-} |
5 | 5 | {-# LANGUAGE FlexibleInstances #-} |
| 6 | +{-# LANGUAGE GeneralizedNewtypeDeriving #-} |
6 | 7 | {-# LANGUAGE MultiParamTypeClasses #-} |
7 | 8 | {-# LANGUAGE PolyKinds #-} |
8 | 9 | {-# LANGUAGE StandaloneDeriving #-} |
@@ -630,73 +631,71 @@ instance (Unbox a) => G.Vector Vector (Complex a) where |
630 | 631 | -- ------- |
631 | 632 | -- Identity |
632 | 633 | -- ------- |
633 | | -#define newtypeMVector(inst_ctxt,inst_head,tyC,con) \ |
634 | | -instance inst_ctxt => M.MVector MVector (inst_head) where { \ |
635 | | -; {-# INLINE basicLength #-} \ |
636 | | -; {-# INLINE basicUnsafeSlice #-} \ |
637 | | -; {-# INLINE basicOverlaps #-} \ |
638 | | -; {-# INLINE basicUnsafeNew #-} \ |
639 | | -; {-# INLINE basicInitialize #-} \ |
640 | | -; {-# INLINE basicUnsafeReplicate #-} \ |
641 | | -; {-# INLINE basicUnsafeRead #-} \ |
642 | | -; {-# INLINE basicUnsafeWrite #-} \ |
643 | | -; {-# INLINE basicClear #-} \ |
644 | | -; {-# INLINE basicSet #-} \ |
645 | | -; {-# INLINE basicUnsafeCopy #-} \ |
646 | | -; {-# INLINE basicUnsafeGrow #-} \ |
647 | | -; basicLength (con v) = M.basicLength v \ |
648 | | -; basicUnsafeSlice i n (con v) = con $ M.basicUnsafeSlice i n v \ |
649 | | -; basicOverlaps (con v1) (con v2) = M.basicOverlaps v1 v2 \ |
650 | | -; basicUnsafeNew n = con `liftM` M.basicUnsafeNew n \ |
651 | | -; basicInitialize (con v) = M.basicInitialize v \ |
652 | | -; basicUnsafeReplicate n (tyC x) = con `liftM` M.basicUnsafeReplicate n x \ |
653 | | -; basicUnsafeRead (con v) i = tyC `liftM` M.basicUnsafeRead v i \ |
654 | | -; basicUnsafeWrite (con v) i (tyC x) = M.basicUnsafeWrite v i x \ |
655 | | -; basicClear (con v) = M.basicClear v \ |
656 | | -; basicSet (con v) (tyC x) = M.basicSet v x \ |
657 | | -; basicUnsafeCopy (con v1) (con v2) = M.basicUnsafeCopy v1 v2 \ |
658 | | -; basicUnsafeMove (con v1) (con v2) = M.basicUnsafeMove v1 v2 \ |
659 | | -; basicUnsafeGrow (con v) n = con `liftM` M.basicUnsafeGrow v n \ |
660 | | -} |
661 | | -#define newtypeVector(inst_ctxt,inst_head,tyC,con,mcon) \ |
662 | | -instance inst_ctxt => G.Vector Vector (inst_head) where { \ |
663 | | -; {-# INLINE basicUnsafeFreeze #-} \ |
664 | | -; {-# INLINE basicUnsafeThaw #-} \ |
665 | | -; {-# INLINE basicLength #-} \ |
666 | | -; {-# INLINE basicUnsafeSlice #-} \ |
667 | | -; {-# INLINE basicUnsafeIndexM #-} \ |
668 | | -; {-# INLINE elemseq #-} \ |
669 | | -; basicUnsafeFreeze (mcon v) = con `liftM` G.basicUnsafeFreeze v \ |
670 | | -; basicUnsafeThaw (con v) = mcon `liftM` G.basicUnsafeThaw v \ |
671 | | -; basicLength (con v) = G.basicLength v \ |
672 | | -; basicUnsafeSlice i n (con v) = con $ G.basicUnsafeSlice i n v \ |
673 | | -; basicUnsafeIndexM (con v) i = tyC `liftM` G.basicUnsafeIndexM v i \ |
674 | | -; basicUnsafeCopy (mcon mv) (con v) = G.basicUnsafeCopy mv v \ |
675 | | -; elemseq _ (tyC a) = G.elemseq (undefined :: Vector x) a \ |
676 | | -} |
677 | | -#define deriveNewtypeInstances(inst_ctxt,inst_head,rep,tyC,con,mcon) \ |
678 | | -newtype instance MVector s (inst_head) = mcon (MVector s (rep)) ;\ |
679 | | -newtype instance Vector (inst_head) = con (Vector (rep)) ;\ |
680 | | -instance inst_ctxt => Unbox (inst_head) ;\ |
681 | | -newtypeMVector(inst_ctxt, inst_head, tyC, mcon) ;\ |
682 | | -newtypeVector(inst_ctxt, inst_head, tyC, con, mcon) |
683 | | - |
684 | | -deriveNewtypeInstances(Unbox a, Identity a, a, Identity, V_Identity, MV_Identity) |
685 | | -deriveNewtypeInstances(Unbox a, Down a, a, Down, V_Down, MV_Down) |
686 | | -deriveNewtypeInstances(Unbox a, Dual a, a, Dual, V_Dual, MV_Dual) |
687 | | -deriveNewtypeInstances(Unbox a, Sum a, a, Sum, V_Sum, MV_Sum) |
688 | | -deriveNewtypeInstances(Unbox a, Product a, a, Product, V_Product, MV_Product) |
689 | 634 |
|
| 635 | +newtype instance MVector s (Identity a) = MV_Identity (MVector s a) |
| 636 | +newtype instance Vector (Identity a) = V_Identity (Vector a) |
| 637 | +deriving instance Unbox a => G.Vector Vector (Identity a) |
| 638 | +deriving instance Unbox a => M.MVector MVector (Identity a) |
| 639 | +instance Unbox a => Unbox (Identity a) |
| 640 | + |
| 641 | +newtype instance MVector s (Down a) = MV_Down (MVector s a) |
| 642 | +newtype instance Vector (Down a) = V_Down (Vector a) |
| 643 | +deriving instance Unbox a => G.Vector Vector (Down a) |
| 644 | +deriving instance Unbox a => M.MVector MVector (Down a) |
| 645 | +instance Unbox a => Unbox (Down a) |
| 646 | + |
| 647 | +newtype instance MVector s (Dual a) = MV_Dual (MVector s a) |
| 648 | +newtype instance Vector (Dual a) = V_Dual (Vector a) |
| 649 | +deriving instance Unbox a => G.Vector Vector (Dual a) |
| 650 | +deriving instance Unbox a => M.MVector MVector (Dual a) |
| 651 | +instance Unbox a => Unbox (Dual a) |
| 652 | + |
| 653 | +newtype instance MVector s (Sum a) = MV_Sum (MVector s a) |
| 654 | +newtype instance Vector (Sum a) = V_Sum (Vector a) |
| 655 | +deriving instance Unbox a => G.Vector Vector (Sum a) |
| 656 | +deriving instance Unbox a => M.MVector MVector (Sum a) |
| 657 | +instance Unbox a => Unbox (Sum a) |
| 658 | + |
| 659 | +newtype instance MVector s (Product a) = MV_Product (MVector s a) |
| 660 | +newtype instance Vector (Product a) = V_Product (Vector a) |
| 661 | +deriving instance Unbox a => G.Vector Vector (Product a) |
| 662 | +deriving instance Unbox a => M.MVector MVector (Product a) |
| 663 | +instance Unbox a => Unbox (Product a) |
690 | 664 |
|
691 | 665 | -- -------------- |
692 | 666 | -- Data.Semigroup |
693 | 667 | -- -------------- |
694 | 668 |
|
695 | | -deriveNewtypeInstances(Unbox a, Min a, a, Min, V_Min, MV_Min) |
696 | | -deriveNewtypeInstances(Unbox a, Max a, a, Max, V_Max, MV_Max) |
697 | | -deriveNewtypeInstances(Unbox a, First a, a, First, V_First, MV_First) |
698 | | -deriveNewtypeInstances(Unbox a, Last a, a, Last, V_Last, MV_Last) |
699 | | -deriveNewtypeInstances(Unbox a, WrappedMonoid a, a, WrapMonoid, V_WrappedMonoid, MV_WrappedMonoid) |
| 669 | + |
| 670 | +newtype instance MVector s (Min a) = MV_Min (MVector s a) |
| 671 | +newtype instance Vector (Min a) = V_Min (Vector a) |
| 672 | +deriving instance Unbox a => G.Vector Vector (Min a) |
| 673 | +deriving instance Unbox a => M.MVector MVector (Min a) |
| 674 | +instance Unbox a => Unbox (Min a) |
| 675 | + |
| 676 | +newtype instance MVector s (Max a) = MV_Max (MVector s a) |
| 677 | +newtype instance Vector (Max a) = V_Max (Vector a) |
| 678 | +deriving instance Unbox a => G.Vector Vector (Max a) |
| 679 | +deriving instance Unbox a => M.MVector MVector (Max a) |
| 680 | +instance Unbox a => Unbox (Max a) |
| 681 | + |
| 682 | +newtype instance MVector s (First a) = MV_First (MVector s a) |
| 683 | +newtype instance Vector (First a) = V_First (Vector a) |
| 684 | +deriving instance Unbox a => G.Vector Vector (First a) |
| 685 | +deriving instance Unbox a => M.MVector MVector (First a) |
| 686 | +instance Unbox a => Unbox (First a) |
| 687 | + |
| 688 | +newtype instance MVector s (Last a) = MV_Last (MVector s a) |
| 689 | +newtype instance Vector (Last a) = V_Last (Vector a) |
| 690 | +deriving instance Unbox a => G.Vector Vector (Last a) |
| 691 | +deriving instance Unbox a => M.MVector MVector (Last a) |
| 692 | +instance Unbox a => Unbox (Last a) |
| 693 | + |
| 694 | +newtype instance MVector s (WrappedMonoid a) = MV_WrappedMonoid (MVector s a) |
| 695 | +newtype instance Vector (WrappedMonoid a) = V_WrappedMonoid (Vector a) |
| 696 | +deriving instance Unbox a => G.Vector Vector (WrappedMonoid a) |
| 697 | +deriving instance Unbox a => M.MVector MVector (WrappedMonoid a) |
| 698 | +instance Unbox a => Unbox (WrappedMonoid a) |
700 | 699 |
|
701 | 700 | -- ------------------ |
702 | 701 | -- Data.Semigroup.Arg |
@@ -1106,26 +1105,47 @@ instance NFData a => G.Vector Vector (DoNotUnboxNormalForm a) where |
1106 | 1105 | instance NFData a => Unbox (DoNotUnboxNormalForm a) |
1107 | 1106 |
|
1108 | 1107 |
|
1109 | | -deriveNewtypeInstances((), Any, Bool, Any, V_Any, MV_Any) |
1110 | | -deriveNewtypeInstances((), All, Bool, All, V_All, MV_All) |
| 1108 | +newtype instance MVector s Any = MV_Any (MVector s Bool) |
| 1109 | +newtype instance Vector Any = V_Any (Vector Bool) |
| 1110 | +deriving instance G.Vector Vector Any |
| 1111 | +deriving instance M.MVector MVector Any |
| 1112 | +instance Unbox Any |
| 1113 | + |
| 1114 | +newtype instance MVector s All = MV_All (MVector s Bool) |
| 1115 | +newtype instance Vector All = V_All (Vector Bool) |
| 1116 | +deriving instance G.Vector Vector All |
| 1117 | +deriving instance M.MVector MVector All |
| 1118 | +instance Unbox All |
1111 | 1119 |
|
1112 | 1120 | -- ------- |
1113 | 1121 | -- Const |
1114 | 1122 | -- ------- |
1115 | 1123 |
|
1116 | | -deriveNewtypeInstances(Unbox a, Const a b, a, Const, V_Const, MV_Const) |
| 1124 | +newtype instance MVector s (Const b a) = MV_Const (MVector s b) |
| 1125 | +newtype instance Vector (Const b a) = V_Const (Vector b) |
| 1126 | +deriving instance Unbox b => G.Vector Vector (Const b a) |
| 1127 | +deriving instance Unbox b => M.MVector MVector (Const b a) |
| 1128 | +instance Unbox b => Unbox (Const b a) |
1117 | 1129 |
|
1118 | 1130 | -- --- |
1119 | 1131 | -- Alt |
1120 | 1132 | -- --- |
1121 | 1133 |
|
1122 | | -deriveNewtypeInstances(Unbox (f a), Alt f a, f a, Alt, V_Alt, MV_Alt) |
| 1134 | +newtype instance MVector s (Alt f a) = MV_Alt (MVector s (f a)) |
| 1135 | +newtype instance Vector (Alt f a) = V_Alt (Vector (f a)) |
| 1136 | +deriving instance Unbox (f a) => G.Vector Vector (Alt f a) |
| 1137 | +deriving instance Unbox (f a) => M.MVector MVector (Alt f a) |
| 1138 | +instance Unbox (f a) => Unbox (Alt f a) |
1123 | 1139 |
|
1124 | 1140 | -- ------- |
1125 | 1141 | -- Compose |
1126 | 1142 | -- ------- |
1127 | 1143 |
|
1128 | | -deriveNewtypeInstances(Unbox (f (g a)), Compose f g a, f (g a), Compose, V_Compose, MV_Compose) |
| 1144 | +newtype instance MVector s (Compose f g a) = MV_Compose (MVector s (f (g a))) |
| 1145 | +newtype instance Vector (Compose f g a) = V_Compose (Vector (f (g a))) |
| 1146 | +deriving instance Unbox (f (g a)) => G.Vector Vector (Compose f g a) |
| 1147 | +deriving instance Unbox (f (g a)) => M.MVector MVector (Compose f g a) |
| 1148 | +instance Unbox (f (g a)) => Unbox (Compose f g a) |
1129 | 1149 |
|
1130 | 1150 | -- ------ |
1131 | 1151 | -- Tuples |
|
0 commit comments