packages feed

red-black-record 2.0.2.1 → 2.0.2.2

raw patch · 4 files changed

+23/−19 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.RBR.Internal: instance (Data.RBR.Internal.Delable k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz), Data.RBR.Internal.BalanceableL (Data.RBR.Internal.Del k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz)) kx vx right) => Data.RBR.Internal.DelableL k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz) kx vx right
- Data.RBR.Internal: instance (Data.RBR.Internal.Delable k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz), Data.RBR.Internal.BalanceableR left kx vx (Data.RBR.Internal.Del k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz))) => Data.RBR.Internal.DelableR k v left kx vx ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz)
- Data.RBR.Internal: instance (Data.RBR.Internal.Delable k v t, Data.RBR.Internal.CanMakeBlack (Data.RBR.Internal.Del k v t)) => Data.RBR.Internal.Deletable k v t
- Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v left, Data.RBR.Internal.Balanceable (Data.RBR.Internal.Insert1 k v left) k' v' right) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.LT k v 'Data.RBR.Internal.B left k' v' right
- Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v left, Data.RBR.Internal.Balanceable (Data.RBR.Internal.Insert1 k v left) k' v' right) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.LT k v 'Data.RBR.Internal.R left k' v' right
- Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v right, Data.RBR.Internal.Balanceable left k' v' (Data.RBR.Internal.Insert1 k v right)) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.GT k v 'Data.RBR.Internal.B left k' v' right
- Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v right, Data.RBR.Internal.Balanceable left k' v' (Data.RBR.Internal.Insert1 k v right)) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.GT k v 'Data.RBR.Internal.R left k' v' right
- Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v t, Data.RBR.Internal.CanMakeBlack (Data.RBR.Internal.Insert1 k v t)) => Data.RBR.Internal.Insertable k v t
- Data.RBR.Internal: instance Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 u uv t3) l) ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 u uv t3) z zv l => Data.RBR.Internal.BalanceableHelperR 'GHC.Types.True ('Data.RBR.Internal.N 'Data.RBR.Internal.R ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 u uv t3) z zv ('Data.RBR.Internal.N 'Data.RBR.Internal.B l k kv r)) y yv t1
- Data.RBR.Internal: instance Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3) t1) ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3) y yv t1 => Data.RBR.Internal.BalanceableHelperR 'GHC.Types.True ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 z zv t3) y yv t1
- Data.RBR.Internal: instance Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance t1 ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3)) t1 y yv ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3) => Data.RBR.Internal.BalanceableHelperL 'GHC.Types.True t1 y yv ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 z zv t3)
- Data.RBR.Internal: instance Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance t3 ('Data.RBR.Internal.N 'Data.RBR.Internal.R l k kv r)) t3 z zv ('Data.RBR.Internal.N 'Data.RBR.Internal.R l k kv r) => Data.RBR.Internal.BalanceableHelperL 'GHC.Types.True t1 y yv ('Data.RBR.Internal.N 'Data.RBR.Internal.R ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 u uv t3) z zv ('Data.RBR.Internal.N 'Data.RBR.Internal.B l k kv r))
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz Data.Type.Equality.~ g, Data.RBR.Internal.Delable k v g, Data.RBR.Internal.Del k v g Data.Type.Equality.~ deleted, Data.RBR.Internal.BalanceableL deleted kx vx right) => Data.RBR.Internal.DelableL k v ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz) kx vx right
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz Data.Type.Equality.~ g, Data.RBR.Internal.Delable k v g, Data.RBR.Internal.Del k v g Data.Type.Equality.~ deleted, Data.RBR.Internal.BalanceableR left kx vx deleted) => Data.RBR.Internal.DelableR k v left kx vx ('Data.RBR.Internal.N 'Data.RBR.Internal.B leftz kz vz rightz)
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.R l k kv r Data.Type.Equality.~ g, Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance t3 g) t3 z zv g) => Data.RBR.Internal.BalanceableHelperL 'GHC.Types.True t1 y yv ('Data.RBR.Internal.N 'Data.RBR.Internal.R ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 u uv t3) z zv ('Data.RBR.Internal.N 'Data.RBR.Internal.B l k kv r))
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 u uv t3 Data.Type.Equality.~ g, Data.RBR.Internal.ShouldBalance g l Data.Type.Equality.~ shouldbalance, Data.RBR.Internal.BalanceableHelper shouldbalance g z zv l) => Data.RBR.Internal.BalanceableHelperR 'GHC.Types.True ('Data.RBR.Internal.N 'Data.RBR.Internal.R ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 u uv t3) z zv ('Data.RBR.Internal.N 'Data.RBR.Internal.B l k kv r)) y yv t1
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3 Data.Type.Equality.~ g, Data.RBR.Internal.BalanceableHelper (Data.RBR.Internal.ShouldBalance t1 g) t1 y yv g) => Data.RBR.Internal.BalanceableHelperL 'GHC.Types.True t1 y yv ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 z zv t3)
+ Data.RBR.Internal: instance ('Data.RBR.Internal.N 'Data.RBR.Internal.R t2 z zv t3 Data.Type.Equality.~ g, Data.RBR.Internal.ShouldBalance g t1 Data.Type.Equality.~ shouldbalance, Data.RBR.Internal.BalanceableHelper shouldbalance g y yv t1) => Data.RBR.Internal.BalanceableHelperR 'GHC.Types.True ('Data.RBR.Internal.N 'Data.RBR.Internal.B t2 z zv t3) y yv t1
+ Data.RBR.Internal: instance (Data.RBR.Internal.Delable k v t, Data.RBR.Internal.Del k v t Data.Type.Equality.~ deleted, Data.RBR.Internal.CanMakeBlack deleted) => Data.RBR.Internal.Deletable k v t
+ Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v left, Data.RBR.Internal.Insert1 k v left Data.Type.Equality.~ inserted, Data.RBR.Internal.Balanceable inserted k' v' right) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.LT k v 'Data.RBR.Internal.B left k' v' right
+ Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v left, Data.RBR.Internal.Insert1 k v left Data.Type.Equality.~ inserted, Data.RBR.Internal.Balanceable inserted k' v' right) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.LT k v 'Data.RBR.Internal.R left k' v' right
+ Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v right, Data.RBR.Internal.Insert1 k v right Data.Type.Equality.~ inserted, Data.RBR.Internal.Balanceable left k' v' inserted) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.GT k v 'Data.RBR.Internal.B left k' v' right
+ Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v right, Data.RBR.Internal.Insert1 k v right Data.Type.Equality.~ inserted, Data.RBR.Internal.Balanceable left k' v' inserted) => Data.RBR.Internal.InsertableHelper2 'GHC.Types.GT k v 'Data.RBR.Internal.R left k' v' right
+ Data.RBR.Internal: instance (Data.RBR.Internal.InsertableHelper1 k v t, Data.RBR.Internal.Insert1 k v t Data.Type.Equality.~ inserted, Data.RBR.Internal.CanMakeBlack inserted) => Data.RBR.Internal.Insertable k v t

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for red-black-record
 
+## 2.0.2.2
+
+- Improved compilation times for type-level deletion.
+
 ## 2.0.0.0
 
 - BREAKING CHANGES
README.md view
@@ -127,8 +127,8 @@ seconds to compile in my machine.   Code involving deletion of fields and branches (like using the `winnow`-function for `Variant`s) is currently poorly optimized and will compile [much-slower](https://github.com/danidiaz/red-black-record/issues/12) than that.+function for `Variant`s) is currently poorly optimized and will compile+[slower](https://github.com/danidiaz/red-black-record/issues/12) than that.  The default generics-based implementations of `FromRecord` and `FromVariant` use the same type-level machinery as the getters and its use will likely slow
lib/Data/RBR/Internal.hs view
@@ -302,7 +302,7 @@ --  T B a z b
 --  where
 --  T _ a z b = ins s
-instance (InsertableHelper1 k v t, CanMakeBlack (Insert1 k v t)) => Insertable k v t where
+instance (InsertableHelper1 k v t, Insert1 k v t ~ inserted, CanMakeBlack inserted) => Insertable k v t where
     type Insert k v t = MakeBlack (Insert1 k v t)
     insert fv r = makeBlackR (insert1 @k @v fv r) 
     widen v = makeBlackV (widen1 @k @v v)
@@ -361,8 +361,8 @@ 
 --  ins s@(T B a y b)
 --      | x<y = balance (ins a) y b
-instance (InsertableHelper1 k v left,
-          Balanceable (Insert1 k v left) k' v' right -- TODO remove B here
+instance (InsertableHelper1 k v left, Insert1 k v left ~ inserted,
+          Balanceable inserted k' v' right 
          )
          => InsertableHelper2 LT k v B left k' v' right where
     type Insert2              LT k v B left k' v' right = Balance (Insert1 k v left) k' v' right
@@ -374,8 +374,8 @@ 
 --  ins s@(T B a y b)
 --      | x<y = balance (ins a) y b
-instance (InsertableHelper1 k v left,
-          Balanceable (Insert1 k v left) k' v' right-- TODO remove B here
+instance (InsertableHelper1 k v left, Insert1 k v left ~ inserted,
+          Balanceable inserted k' v' right
          )
          => InsertableHelper2 LT k v R left k' v' right where
     type Insert2              LT k v R left k' v' right = N R (Insert1 k v left) k' v' right
@@ -397,8 +397,8 @@ --  ins s@(T B a y b)
 --      | ...
 --      | x>y = balance a y (ins b)
-instance (InsertableHelper1 k v right,
-          Balanceable left  k' v' (Insert1 k v right)
+instance (InsertableHelper1 k v right, Insert1 k v right ~ inserted,
+          Balanceable left  k' v' inserted
          )
          => InsertableHelper2 GT k v B left k' v' right where
     type Insert2              GT k v B left k' v' right = Balance left  k' v' (Insert1 k v right)
@@ -411,8 +411,8 @@ --  ins s@(T R a y b)
 --      | ...
 --      | x>y = T R a y (ins b)
-instance (InsertableHelper1 k v right,
-          Balanceable left  k' v' (Insert1 k v right)
+instance (InsertableHelper1 k v right, Insert1 k v right ~ inserted,
+          Balanceable left  k' v' inserted
          )
          => InsertableHelper2 GT k v R left k' v' right where
     type Insert2              GT k v R left k' v' right = N R left k' v' (Insert1 k v right)
@@ -1161,7 +1161,7 @@ 
 -- balleft bl x (T B a y b) = balance bl x (T R a y b)
 -- the @(N B in the call to balance tree is misleading, as it is ingored...
-instance (BalanceableHelper (ShouldBalance t1 (N R t2 z zv t3)) t1 y yv (N R t2 z zv t3)) => 
+instance (N R t2 z zv t3 ~ g, BalanceableHelper (ShouldBalance t1 g) t1 y yv g) => 
     BalanceableHelperL True t1 y yv (N B t2 z zv t3) where
     type BalL'         True t1 y yv (N B t2 z zv t3)     
                  =  Balance t1 y yv (N R t2 z zv t3)
@@ -1176,7 +1176,7 @@                             LookRight r' -> LookRight r'))
 
 -- balleft bl x (T R (T B a y b) z c) = T R (T B bl x a) y (balance b z (sub1 c))
-instance (BalanceableHelper    (ShouldBalance t3 (N R l k kv r)) t3 z zv  (N R l k kv r)) => 
+instance (N R l k kv r ~ g, BalanceableHelper    (ShouldBalance t3 g) t3 z zv g) => 
     BalanceableHelperL True t1 y yv (N R (N B t2 u uv t3) z zv (N B l k kv r)) where
     type BalL'         True t1 y yv (N R (N B t2 u uv t3) z zv (N B l k kv r)) =
                              N R (N B t1 y yv t2) u uv (Balance t3 z zv (N R l k kv r))          
@@ -1230,7 +1230,7 @@                                                               LookRight y -> LookRight y)
 
 -- balright (T B a x b) y bl = balance (T R a x b) y bl
-instance (BalanceableHelper (ShouldBalance (N R t2 z zv t3) t1) (N R t2 z zv t3) y yv t1) => 
+instance (N R t2 z zv t3 ~ g, ShouldBalance g t1 ~ shouldbalance, BalanceableHelper shouldbalance g y yv t1) => 
     BalanceableHelperR True (N B t2 z zv t3) y yv t1 where
     type BalR'         True (N B t2 z zv t3) y yv t1     
              =  Balance (N R t2 z zv t3) y yv t1
@@ -1245,7 +1245,7 @@         LookRight r -> LookRight r)
 
 -- balright (T R a x (T B b y c)) z bl = T R (balance (sub1 a) x b) y (T B c z bl)
-instance (BalanceableHelper    (ShouldBalance (N R t2 u uv t3) l) (N R t2 u uv t3) z zv l) => 
+instance (N R t2 u uv t3 ~ g, ShouldBalance g l ~ shouldbalance, BalanceableHelper shouldbalance g z zv l) => 
     BalanceableHelperR True (N R (N B t2 u uv t3) z zv (N B l k kv r)) y yv t1 where
     type BalR'         True (N R (N B t2 u uv t3) z zv (N B l k kv r)) y yv t1 =
                              N R (Balance (N R t2 u uv t3) z zv l) k kv (N B r y yv t1) 
@@ -1520,7 +1520,7 @@     winL :: Variant f (N color l kx vx r) -> Either (Variant f (DelL k v l kx vx r)) (f v) 
 
 --  delformLeft a@(T B _ _ _) y b = balleft (del a) y b
-instance (Delable k v (N B leftz kz vz rightz), BalanceableL (Del k v (N B leftz kz vz rightz)) kx vx right) 
+instance (N B leftz kz vz rightz ~ g, Delable k v g, Del k v g ~ deleted, BalanceableL deleted kx vx right) 
     => DelableL k v (N B leftz kz vz rightz) kx vx right where
     type DelL   k v (N B leftz kz vz rightz) kx vx right = BalL (Del k v (N B leftz kz vz rightz)) kx vx right
     delL (Node left vx right) = balLR @(Del k v (N B leftz kz vz rightz)) @kx @vx @right (Node (del @k @v left) vx right)
@@ -1555,7 +1555,7 @@     winR :: Variant f (N color l kx vx r) -> Either (Variant f (DelR k v l kx vx r)) (f v) 
 
 --  delformRight a y b@(T B _ _ _) = balright a y (del b)
-instance (Delable k v (N B leftz kz vz rightz), BalanceableR left kx vx (Del k v (N B leftz kz vz rightz))) 
+instance (N B leftz kz vz rightz ~ g, Delable k v g, Del k v g ~ deleted, BalanceableR left kx vx deleted) 
     => DelableR k v left kx vx (N B leftz kz vz rightz) where
     type DelR   k v left kx vx (N B leftz kz vz rightz) = BalR left kx vx (Del k v (N B leftz kz vz rightz))
     delR (Node left vx right) = balRR @left @kx @vx @(Del k v (N B leftz kz vz rightz)) (Node left vx (del @k @v right))
@@ -1643,7 +1643,7 @@     delete :: Record f t -> Record f (Delete k v t)
     winnow :: Variant f t -> Either (Variant f (Delete k v t)) (f v) 
 
-instance (Delable k v t, CanMakeBlack (Del k v t)) => Deletable k v t where
+instance (Delable k v t, Del k v t ~ deleted, CanMakeBlack deleted) => Deletable k v t where
     type Delete k v t = MakeBlack (Del k v t)
     delete r = makeBlackR (del @k @v r) 
     winnow v = first makeBlackV (win @k @v v)
red-black-record.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.0
 name:                red-black-record
-version:             2.0.2.1
+version:             2.0.2.2
 synopsis:            Extensible records and variants indexed by a type-level Red-Black tree.
 
 description:         A library that provides extensible records and variants,