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 +4/−0
- README.md +2/−2
- lib/Data/RBR/Internal.hs +16/−16
- red-black-record.cabal +1/−1
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,