packages feed

compound-types 0.1.2.1 → 0.1.3

raw patch · 5 files changed

+773/−221 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ CompoundTypes.Lazy: data Undivided dividend divisor
+ CompoundTypes.Lazy: data Unsubtracted minuend subtrahend
+ CompoundTypes.Strict: data Undivided dividend divisor
+ CompoundTypes.Strict: data Unsubtracted minuend subtrahend
- CompoundTypes.Lazy: Product2 :: v1 -> v2 -> Product2 v1 v2
+ CompoundTypes.Lazy: Product2 :: _1 -> _2 -> Product2 _1 _2
- CompoundTypes.Lazy: Product3 :: v1 -> v2 -> v3 -> Product3 v1 v2 v3
+ CompoundTypes.Lazy: Product3 :: _1 -> _2 -> _3 -> Product3 _1 _2 _3
- CompoundTypes.Lazy: Product4 :: v1 -> v2 -> v3 -> v4 -> Product4 v1 v2 v3 v4
+ CompoundTypes.Lazy: Product4 :: _1 -> _2 -> _3 -> _4 -> Product4 _1 _2 _3 _4
- CompoundTypes.Lazy: Product5 :: v1 -> v2 -> v3 -> v4 -> v5 -> Product5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Product5 :: _1 -> _2 -> _3 -> _4 -> _5 -> Product5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Product6 :: v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Product6 :: _1 -> _2 -> _3 -> _4 -> _5 -> _6 -> Product6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Product7 :: v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> v7 -> Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Product7 :: _1 -> _2 -> _3 -> _4 -> _5 -> _6 -> _7 -> Product7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum2_1 :: v1 -> Sum2 v1 v2
+ CompoundTypes.Lazy: Sum2_1 :: _1 -> Sum2 _1 _2
- CompoundTypes.Lazy: Sum2_2 :: v2 -> Sum2 v1 v2
+ CompoundTypes.Lazy: Sum2_2 :: _2 -> Sum2 _1 _2
- CompoundTypes.Lazy: Sum3_1 :: v1 -> Sum3 v1 v2 v3
+ CompoundTypes.Lazy: Sum3_1 :: _1 -> Sum3 _1 _2 _3
- CompoundTypes.Lazy: Sum3_2 :: v2 -> Sum3 v1 v2 v3
+ CompoundTypes.Lazy: Sum3_2 :: _2 -> Sum3 _1 _2 _3
- CompoundTypes.Lazy: Sum3_3 :: v3 -> Sum3 v1 v2 v3
+ CompoundTypes.Lazy: Sum3_3 :: _3 -> Sum3 _1 _2 _3
- CompoundTypes.Lazy: Sum4_1 :: v1 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Lazy: Sum4_1 :: _1 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Lazy: Sum4_2 :: v2 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Lazy: Sum4_2 :: _2 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Lazy: Sum4_3 :: v3 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Lazy: Sum4_3 :: _3 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Lazy: Sum4_4 :: v4 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Lazy: Sum4_4 :: _4 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Lazy: Sum5_1 :: v1 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Sum5_1 :: _1 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Sum5_2 :: v2 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Sum5_2 :: _2 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Sum5_3 :: v3 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Sum5_3 :: _3 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Sum5_4 :: v4 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Sum5_4 :: _4 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Sum5_5 :: v5 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: Sum5_5 :: _5 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: Sum6_1 :: v1 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_1 :: _1 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum6_2 :: v2 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_2 :: _2 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum6_3 :: v3 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_3 :: _3 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum6_4 :: v4 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_4 :: _4 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum6_5 :: v5 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_5 :: _5 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum6_6 :: v6 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_6 :: _6 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: Sum7_1 :: v1 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_1 :: _1 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_2 :: v2 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_2 :: _2 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_3 :: v3 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_3 :: _3 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_4 :: v4 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_4 :: _4 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_5 :: v5 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_5 :: _5 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_6 :: v6 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_6 :: _6 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: Sum7_7 :: v7 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_7 :: _7 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: data Product2 v1 v2
+ CompoundTypes.Lazy: data Product2 _1 _2
- CompoundTypes.Lazy: data Product3 v1 v2 v3
+ CompoundTypes.Lazy: data Product3 _1 _2 _3
- CompoundTypes.Lazy: data Product4 v1 v2 v3 v4
+ CompoundTypes.Lazy: data Product4 _1 _2 _3 _4
- CompoundTypes.Lazy: data Product5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: data Product5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: data Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: data Product6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: data Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: data Product7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Lazy: data Sum2 v1 v2
+ CompoundTypes.Lazy: data Sum2 _1 _2
- CompoundTypes.Lazy: data Sum3 v1 v2 v3
+ CompoundTypes.Lazy: data Sum3 _1 _2 _3
- CompoundTypes.Lazy: data Sum4 v1 v2 v3 v4
+ CompoundTypes.Lazy: data Sum4 _1 _2 _3 _4
- CompoundTypes.Lazy: data Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Lazy: data Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Lazy: data Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: data Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Lazy: data Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: data Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Product2 :: !v1 -> !v2 -> Product2 v1 v2
+ CompoundTypes.Strict: Product2 :: !_1 -> !_2 -> Product2 _1 _2
- CompoundTypes.Strict: Product3 :: !v1 -> !v2 -> !v3 -> Product3 v1 v2 v3
+ CompoundTypes.Strict: Product3 :: !_1 -> !_2 -> !_3 -> Product3 _1 _2 _3
- CompoundTypes.Strict: Product4 :: !v1 -> !v2 -> !v3 -> !v4 -> Product4 v1 v2 v3 v4
+ CompoundTypes.Strict: Product4 :: !_1 -> !_2 -> !_3 -> !_4 -> Product4 _1 _2 _3 _4
- CompoundTypes.Strict: Product5 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> Product5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Product5 :: !_1 -> !_2 -> !_3 -> !_4 -> !_5 -> Product5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Product6 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> !v6 -> Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Product6 :: !_1 -> !_2 -> !_3 -> !_4 -> !_5 -> !_6 -> Product6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Product7 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> !v6 -> !v7 -> Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Product7 :: !_1 -> !_2 -> !_3 -> !_4 -> !_5 -> !_6 -> !_7 -> Product7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum2_1 :: !v1 -> Sum2 v1 v2
+ CompoundTypes.Strict: Sum2_1 :: !_1 -> Sum2 _1 _2
- CompoundTypes.Strict: Sum2_2 :: !v2 -> Sum2 v1 v2
+ CompoundTypes.Strict: Sum2_2 :: !_2 -> Sum2 _1 _2
- CompoundTypes.Strict: Sum3_1 :: !v1 -> Sum3 v1 v2 v3
+ CompoundTypes.Strict: Sum3_1 :: !_1 -> Sum3 _1 _2 _3
- CompoundTypes.Strict: Sum3_2 :: !v2 -> Sum3 v1 v2 v3
+ CompoundTypes.Strict: Sum3_2 :: !_2 -> Sum3 _1 _2 _3
- CompoundTypes.Strict: Sum3_3 :: !v3 -> Sum3 v1 v2 v3
+ CompoundTypes.Strict: Sum3_3 :: !_3 -> Sum3 _1 _2 _3
- CompoundTypes.Strict: Sum4_1 :: !v1 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Strict: Sum4_1 :: !_1 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Strict: Sum4_2 :: !v2 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Strict: Sum4_2 :: !_2 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Strict: Sum4_3 :: !v3 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Strict: Sum4_3 :: !_3 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Strict: Sum4_4 :: !v4 -> Sum4 v1 v2 v3 v4
+ CompoundTypes.Strict: Sum4_4 :: !_4 -> Sum4 _1 _2 _3 _4
- CompoundTypes.Strict: Sum5_1 :: !v1 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Sum5_1 :: !_1 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Sum5_2 :: !v2 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Sum5_2 :: !_2 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Sum5_3 :: !v3 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Sum5_3 :: !_3 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Sum5_4 :: !v4 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Sum5_4 :: !_4 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Sum5_5 :: !v5 -> Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: Sum5_5 :: !_5 -> Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: Sum6_1 :: !v1 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_1 :: !_1 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum6_2 :: !v2 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_2 :: !_2 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum6_3 :: !v3 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_3 :: !_3 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum6_4 :: !v4 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_4 :: !_4 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum6_5 :: !v5 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_5 :: !_5 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum6_6 :: !v6 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_6 :: !_6 -> Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: Sum7_1 :: !v1 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_1 :: !_1 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_2 :: !v2 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_2 :: !_2 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_3 :: !v3 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_3 :: !_3 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_4 :: !v4 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_4 :: !_4 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_5 :: !v5 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_5 :: !_5 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_6 :: !v6 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_6 :: !_6 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: Sum7_7 :: !v7 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_7 :: !_7 -> Sum7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: data Product2 v1 v2
+ CompoundTypes.Strict: data Product2 _1 _2
- CompoundTypes.Strict: data Product3 v1 v2 v3
+ CompoundTypes.Strict: data Product3 _1 _2 _3
- CompoundTypes.Strict: data Product4 v1 v2 v3 v4
+ CompoundTypes.Strict: data Product4 _1 _2 _3 _4
- CompoundTypes.Strict: data Product5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: data Product5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: data Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: data Product6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: data Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: data Product7 _1 _2 _3 _4 _5 _6 _7
- CompoundTypes.Strict: data Sum2 v1 v2
+ CompoundTypes.Strict: data Sum2 _1 _2
- CompoundTypes.Strict: data Sum3 v1 v2 v3
+ CompoundTypes.Strict: data Sum3 _1 _2 _3
- CompoundTypes.Strict: data Sum4 v1 v2 v3 v4
+ CompoundTypes.Strict: data Sum4 _1 _2 _3 _4
- CompoundTypes.Strict: data Sum5 v1 v2 v3 v4 v5
+ CompoundTypes.Strict: data Sum5 _1 _2 _3 _4 _5
- CompoundTypes.Strict: data Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: data Sum6 _1 _2 _3 _4 _5 _6
- CompoundTypes.Strict: data Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: data Sum7 _1 _2 _3 _4 _5 _6 _7

Files

compound-types.cabal view
@@ -1,7 +1,7 @@ name:   compound-types version:-  0.1.2.1+  0.1.3 category:   Data, Types, Type System synopsis:
library/CompoundTypes/Private/Lazy/Product.hs view
@@ -1,23 +1,24 @@+{-# LANGUAGE UndecidableInstances #-} module CompoundTypes.Private.Lazy.Product where  -data Product2 v1 v2 =-  Product2 v1 v2+data Product2 _1 _2 =+  Product2 _1 _2 -data Product3 v1 v2 v3 =-  Product3 v1 v2 v3+data Product3 _1 _2 _3 =+  Product3 _1 _2 _3 -data Product4 v1 v2 v3 v4 =-  Product4 v1 v2 v3 v4+data Product4 _1 _2 _3 _4 =+  Product4 _1 _2 _3 _4 -data Product5 v1 v2 v3 v4 v5 =-  Product5 v1 v2 v3 v4 v5+data Product5 _1 _2 _3 _4 _5 =+  Product5 _1 _2 _3 _4 _5 -data Product6 v1 v2 v3 v4 v5 v6 =-  Product6 v1 v2 v3 v4 v5 v6+data Product6 _1 _2 _3 _4 _5 _6 =+  Product6 _1 _2 _3 _4 _5 _6 -data Product7 v1 v2 v3 v4 v5 v6 v7 =-  Product7 v1 v2 v3 v4 v5 v6 v7+data Product7 _1 _2 _3 _4 _5 _6 _7 =+  Product7 _1 _2 _3 _4 _5 _6 _7   -- |@@ -29,48 +30,185 @@ -- In that case it will resolve to: --  -- > Product3 Int Char Bool-type family (*) a b where-  Product6 v1 v2 v3 v4 v5 v6 * v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product5 v1 v2 v3 v4 v5 * Product2 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product5 v1 v2 v3 v4 v5 * v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product4 v1 v2 v3 v4 * Product3 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product4 v1 v2 v3 v4 * Product2 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product4 v1 v2 v3 v4 * v5 =-    Product5 v1 v2 v3 v4 v5-  Product3 v1 v2 v3 * Product4 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product3 v1 v2 v3 * Product3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product3 v1 v2 v3 * Product2 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  Product3 v1 v2 v3 * v4 =-    Product4 v1 v2 v3 v4-  Product2 v1 v2 * Product5 v3 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product2 v1 v2 * Product4 v3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product2 v1 v2 * Product3 v3 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  Product2 v1 v2 * Product2 v3 v4 =-    Product4 v1 v2 v3 v4-  Product2 v1 v2 * v3 =-    Product3 v1 v2 v3-  v1 * Product6 v2 v3 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  v1 * Product5 v2 v3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  v1 * Product4 v2 v3 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  v1 * Product3 v2 v3 v4 =-    Product4 v1 v2 v3 v4-  v1 * Product2 v2 v3 =-    Product3 v1 v2 v3-  v1 * v2 =-    Product2 v1 v2+type family a * b where +  Product6 _1 _2 _3 _4 _5 _6 * _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  +  Product5 _1 _2 _3 _4 _5 * Product2 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product5 _1 _2 _3 _4 _5 * _6 =+    Product6 _1 _2 _3 _4 _5 _6+  +  Product4 _1 _2 _3 _4 * Product3 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product4 _1 _2 _3 _4 * Product2 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product4 _1 _2 _3 _4 * _5 =+    Product5 _1 _2 _3 _4 _5+  +  Product3 _1 _2 _3 * Product4 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product3 _1 _2 _3 * Product3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product3 _1 _2 _3 * Product2 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  Product3 _1 _2 _3 * _4 =+    Product4 _1 _2 _3 _4+  +  Product2 _1 _2 * Product5 _3 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product2 _1 _2 * Product4 _3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product2 _1 _2 * Product3 _3 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  Product2 _1 _2 * Product2 _3 _4 =+    Product4 _1 _2 _3 _4+  Product2 _1 _2 * _3 =+    Product3 _1 _2 _3++  Undivided _1 _2 * _2 =+    _1+  Undivided _1 _2 * _3 =+    Undivided (_1 * _3) _2+    +  _1 * Product6 _2 _3 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  _1 * Product5 _2 _3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  _1 * Product4 _2 _3 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  _1 * Product3 _2 _3 _4 =+    Product4 _1 _2 _3 _4+  _1 * Product2 _2 _3 =+    Product3 _1 _2 _3+  _1 * Undivided _2 _1 =+    _2+  _1 * Undivided _2 _3 =+    Undivided (_1 * _2) _3+  _1 * _2 =+    Product2 _1 _2+ infixl 1 *+++-- * Division+-------------------------++-- |+-- An operator for removing elements from the product-types.+-- E.g.,+-- +-- > Int * Char * Bool / Char+-- +-- is the same type as+-- +-- > Int * Bool+-- +type family a / b where++  Product7 _1 _2 _3 _4 _5 _6 _7 / _1 =+    Product6 _2 _3 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _2 =+    Product6 _1 _3 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _3 =+    Product6 _1 _2 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _4 =+    Product6 _1 _2 _3 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _5 =+    Product6 _1 _2 _3 _4 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _6 =+    Product6 _1 _2 _3 _4 _5 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _7 =+    Product6 _1 _2 _3 _4 _5 _6++  Product6 _1 _2 _3 _4 _5 _6 / _1 =+    Product5 _2 _3 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _2 =+    Product5 _1 _3 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _3 =+    Product5 _1 _2 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _4 =+    Product5 _1 _2 _3 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _5 =+    Product5 _1 _2 _3 _4 _6+  Product6 _1 _2 _3 _4 _5 _6 / _6 =+    Product5 _1 _2 _3 _4 _5++  Product5 _1 _2 _3 _4 _5 / _1 =+    Product4 _2 _3 _4 _5+  Product5 _1 _2 _3 _4 _5 / _2 =+    Product4 _1 _3 _4 _5+  Product5 _1 _2 _3 _4 _5 / _3 =+    Product4 _1 _2 _4 _5+  Product5 _1 _2 _3 _4 _5 / _4 =+    Product4 _1 _2 _3 _5+  Product5 _1 _2 _3 _4 _5 / _5 =+    Product4 _1 _2 _3 _4++  Product4 _1 _2 _3 _4 / _1 =+    Product3 _2 _3 _4+  Product4 _1 _2 _3 _4 / _2 =+    Product3 _1 _3 _4+  Product4 _1 _2 _3 _4 / _3 =+    Product3 _1 _2 _4+  Product4 _1 _2 _3 _4 / _4 =+    Product3 _1 _2 _3++  Product3 _1 _2 _3 / _1 =+    Product2 _2 _3+  Product3 _1 _2 _3 / _2 =+    Product2 _1 _3+  Product3 _1 _2 _3 / _3 =+    Product2 _1 _2++  Product2 _1 _2 / _1 =+    _2+  Product2 _1 _2 / _2 =+    _1++  Undivided _1 _2 / _3 =+    Undivided (_1 / _3) _2++  -- This group requires the UndecidableInstances extension+  _1 / Product7 _2 _3 _4 _5 _6 _7 _8 =+    _1 / _2 / _3 / _4 / _5 / _6 / _7 / _8+  _1 / Product6 _2 _3 _4 _5 _6 _7 =+    _1 / _2 / _3 / _4 / _5 / _6 / _7+  _1 / Product5 _2 _3 _4 _5 _6 =+    _1 / _2 / _3 / _4 / _5 / _6+  _1 / Product4 _2 _3 _4 _5 =+    _1 / _2 / _3 / _4 / _5+  _1 / Product3 _2 _3 _4 =+    _1 / _2 / _3 / _4+  _1 / Product2 _2 _3 =+    _1 / _2 / _3++  _1 / _2 =+    Undivided _1 _2++infixl 1 /+++-- |+-- What you get, when the division cannot yet be performed.+-- +-- Happens when the dividend doesn't contain the divisor. E.g.,+-- +-- > Char / Bool+-- +-- produces+-- +-- > Undivided Char Bool+-- +-- However it's possible to get back to the normal type,+-- when you perform the required multiplication afterwards. E.g.,+-- +-- > Char / Bool * Bool+-- +-- produces+-- +-- > Char+-- +-- This construct actually exists primarily for that purpose.+data Undivided dividend divisor
library/CompoundTypes/Private/Lazy/Sum.hs view
@@ -1,23 +1,24 @@+{-# LANGUAGE UndecidableInstances #-} module CompoundTypes.Private.Lazy.Sum where  -data Sum2 v1 v2 =-  Sum2_1 v1 | Sum2_2 v2+data Sum2 _1 _2 =+  Sum2_1 _1 | Sum2_2 _2 -data Sum3 v1 v2 v3 =-  Sum3_1 v1 | Sum3_2 v2 | Sum3_3 v3+data Sum3 _1 _2 _3 =+  Sum3_1 _1 | Sum3_2 _2 | Sum3_3 _3 -data Sum4 v1 v2 v3 v4 =-  Sum4_1 v1 | Sum4_2 v2 | Sum4_3 v3 | Sum4_4 v4+data Sum4 _1 _2 _3 _4 =+  Sum4_1 _1 | Sum4_2 _2 | Sum4_3 _3 | Sum4_4 _4 -data Sum5 v1 v2 v3 v4 v5 =-  Sum5_1 v1 | Sum5_2 v2 | Sum5_3 v3 | Sum5_4 v4 | Sum5_5 v5+data Sum5 _1 _2 _3 _4 _5 =+  Sum5_1 _1 | Sum5_2 _2 | Sum5_3 _3 | Sum5_4 _4 | Sum5_5 _5 -data Sum6 v1 v2 v3 v4 v5 v6 =-  Sum6_1 v1 | Sum6_2 v2 | Sum6_3 v3 | Sum6_4 v4 | Sum6_5 v5 | Sum6_6 v6+data Sum6 _1 _2 _3 _4 _5 _6 =+  Sum6_1 _1 | Sum6_2 _2 | Sum6_3 _3 | Sum6_4 _4 | Sum6_5 _5 | Sum6_6 _6 -data Sum7 v1 v2 v3 v4 v5 v6 v7 =-  Sum7_1 v1 | Sum7_2 v2 | Sum7_3 v3 | Sum7_4 v4 | Sum7_5 v5 | Sum7_6 v6 | Sum7_7 v7+data Sum7 _1 _2 _3 _4 _5 _6 _7 =+  Sum7_1 _1 | Sum7_2 _2 | Sum7_3 _3 | Sum7_4 _4 | Sum7_5 _5 | Sum7_6 _6 | Sum7_7 _7   -- |@@ -29,48 +30,185 @@ -- In that case it will resolve to: --  -- > Sum3 Int Char Bool-type family (+) a b where-  Sum6 v1 v2 v3 v4 v5 v6 + v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum5 v1 v2 v3 v4 v5 + Sum2 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum5 v1 v2 v3 v4 v5 + v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum4 v1 v2 v3 v4 + Sum3 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum4 v1 v2 v3 v4 + Sum2 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum4 v1 v2 v3 v4 + v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum3 v1 v2 v3 + Sum4 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum3 v1 v2 v3 + Sum3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum3 v1 v2 v3 + Sum2 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum3 v1 v2 v3 + v4 =-    Sum4 v1 v2 v3 v4-  Sum2 v1 v2 + Sum5 v3 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum2 v1 v2 + Sum4 v3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum2 v1 v2 + Sum3 v3 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum2 v1 v2 + Sum2 v3 v4 =-    Sum4 v1 v2 v3 v4-  Sum2 v1 v2 + v3 =-    Sum3 v1 v2 v3-  v1 + Sum6 v2 v3 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  v1 + Sum5 v2 v3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  v1 + Sum4 v2 v3 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  v1 + Sum3 v2 v3 v4 =-    Sum4 v1 v2 v3 v4-  v1 + Sum2 v2 v3 =-    Sum3 v1 v2 v3-  v1 + v2 =-    Sum2 v1 v2+type family a + b where +  Sum6 _1 _2 _3 _4 _5 _6 + _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  +  Sum5 _1 _2 _3 _4 _5 + Sum2 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum5 _1 _2 _3 _4 _5 + _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  +  Sum4 _1 _2 _3 _4 + Sum3 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum4 _1 _2 _3 _4 + Sum2 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum4 _1 _2 _3 _4 + _5 =+    Sum5 _1 _2 _3 _4 _5+  +  Sum3 _1 _2 _3 + Sum4 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum3 _1 _2 _3 + Sum3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum3 _1 _2 _3 + Sum2 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  Sum3 _1 _2 _3 + _4 =+    Sum4 _1 _2 _3 _4+  +  Sum2 _1 _2 + Sum5 _3 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum2 _1 _2 + Sum4 _3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum2 _1 _2 + Sum3 _3 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  Sum2 _1 _2 + Sum2 _3 _4 =+    Sum4 _1 _2 _3 _4+  Sum2 _1 _2 + _3 =+    Sum3 _1 _2 _3++  Unsubtracted _1 _2 + _2 =+    _1+  Unsubtracted _1 _2 + _3 =+    Unsubtracted (_1 + _3) _2+    +  _1 + Sum6 _2 _3 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  _1 + Sum5 _2 _3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  _1 + Sum4 _2 _3 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  _1 + Sum3 _2 _3 _4 =+    Sum4 _1 _2 _3 _4+  _1 + Sum2 _2 _3 =+    Sum3 _1 _2 _3+  _1 + Unsubtracted _2 _1 =+    _2+  _1 + Unsubtracted _2 _3 =+    Unsubtracted (_1 + _2) _3+  _1 + _2 =+    Sum2 _1 _2+ infixl 0 ++++-- * Subtraction+-------------------------++-- |+-- An operator for removing elements from the sum-types.+-- E.g.,+-- +-- > Int + Char + Bool - Char+-- +-- is the same type as+-- +-- > Int + Bool+-- +type family a - b where++  Sum7 _1 _2 _3 _4 _5 _6 _7 - _1 =+    Sum6 _2 _3 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _2 =+    Sum6 _1 _3 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _3 =+    Sum6 _1 _2 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _4 =+    Sum6 _1 _2 _3 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _5 =+    Sum6 _1 _2 _3 _4 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _6 =+    Sum6 _1 _2 _3 _4 _5 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _7 =+    Sum6 _1 _2 _3 _4 _5 _6++  Sum6 _1 _2 _3 _4 _5 _6 - _1 =+    Sum5 _2 _3 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _2 =+    Sum5 _1 _3 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _3 =+    Sum5 _1 _2 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _4 =+    Sum5 _1 _2 _3 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _5 =+    Sum5 _1 _2 _3 _4 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _6 =+    Sum5 _1 _2 _3 _4 _5++  Sum5 _1 _2 _3 _4 _5 - _1 =+    Sum4 _2 _3 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _2 =+    Sum4 _1 _3 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _3 =+    Sum4 _1 _2 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _4 =+    Sum4 _1 _2 _3 _5+  Sum5 _1 _2 _3 _4 _5 - _5 =+    Sum4 _1 _2 _3 _4++  Sum4 _1 _2 _3 _4 - _1 =+    Sum3 _2 _3 _4+  Sum4 _1 _2 _3 _4 - _2 =+    Sum3 _1 _3 _4+  Sum4 _1 _2 _3 _4 - _3 =+    Sum3 _1 _2 _4+  Sum4 _1 _2 _3 _4 - _4 =+    Sum3 _1 _2 _3++  Sum3 _1 _2 _3 - _1 =+    Sum2 _2 _3+  Sum3 _1 _2 _3 - _2 =+    Sum2 _1 _3+  Sum3 _1 _2 _3 - _3 =+    Sum2 _1 _2++  Sum2 _1 _2 - _1 =+    _2+  Sum2 _1 _2 - _2 =+    _1++  Unsubtracted _1 _2 - _3 =+    Unsubtracted (_1 - _3) _2++  -- This group requires the UndecidableInstances extension+  _1 - Sum7 _2 _3 _4 _5 _6 _7 _8 =+    _1 - _2 - _3 - _4 - _5 - _6 - _7 - _8+  _1 - Sum6 _2 _3 _4 _5 _6 _7 =+    _1 - _2 - _3 - _4 - _5 - _6 - _7+  _1 - Sum5 _2 _3 _4 _5 _6 =+    _1 - _2 - _3 - _4 - _5 - _6+  _1 - Sum4 _2 _3 _4 _5 =+    _1 - _2 - _3 - _4 - _5+  _1 - Sum3 _2 _3 _4 =+    _1 - _2 - _3 - _4+  _1 - Sum2 _2 _3 =+    _1 - _2 - _3++  _1 - _2 =+    Unsubtracted _1 _2++infixl 0 -+++-- |+-- What you get, when the subtraction cannot yet be performed.+-- +-- Happens when the minuend doesn't contain the subtrahend. E.g.,+-- +-- > Char - Bool+-- +-- produces+-- +-- > Unsubtracted Char Bool+-- +-- However it's possible to get back to the normal type,+-- when you perform the required addition afterwards. E.g.,+-- +-- > Char - Bool + Bool+-- +-- produces+-- +-- > Char+-- +-- This construct actually exists primarily for that purpose.+data Unsubtracted minuend subtrahend
library/CompoundTypes/Private/Strict/Product.hs view
@@ -1,23 +1,24 @@+{-# LANGUAGE UndecidableInstances #-} module CompoundTypes.Private.Strict.Product where  -data Product2 v1 v2 =-  Product2 !v1 !v2+data Product2 _1 _2 =+  Product2 !_1 !_2 -data Product3 v1 v2 v3 =-  Product3 !v1 !v2 !v3+data Product3 _1 _2 _3 =+  Product3 !_1 !_2 !_3 -data Product4 v1 v2 v3 v4 =-  Product4 !v1 !v2 !v3 !v4+data Product4 _1 _2 _3 _4 =+  Product4 !_1 !_2 !_3 !_4 -data Product5 v1 v2 v3 v4 v5 =-  Product5 !v1 !v2 !v3 !v4 !v5+data Product5 _1 _2 _3 _4 _5 =+  Product5 !_1 !_2 !_3 !_4 !_5 -data Product6 v1 v2 v3 v4 v5 v6 =-  Product6 !v1 !v2 !v3 !v4 !v5 !v6+data Product6 _1 _2 _3 _4 _5 _6 =+  Product6 !_1 !_2 !_3 !_4 !_5 !_6 -data Product7 v1 v2 v3 v4 v5 v6 v7 =-  Product7 !v1 !v2 !v3 !v4 !v5 !v6 !v7+data Product7 _1 _2 _3 _4 _5 _6 _7 =+  Product7 !_1 !_2 !_3 !_4 !_5 !_6 !_7   -- |@@ -29,48 +30,185 @@ -- In that case it will resolve to: --  -- > Product3 Int Char Bool-type family (*) a b where-  Product6 v1 v2 v3 v4 v5 v6 * v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product5 v1 v2 v3 v4 v5 * Product2 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product5 v1 v2 v3 v4 v5 * v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product4 v1 v2 v3 v4 * Product3 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product4 v1 v2 v3 v4 * Product2 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product4 v1 v2 v3 v4 * v5 =-    Product5 v1 v2 v3 v4 v5-  Product3 v1 v2 v3 * Product4 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product3 v1 v2 v3 * Product3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product3 v1 v2 v3 * Product2 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  Product3 v1 v2 v3 * v4 =-    Product4 v1 v2 v3 v4-  Product2 v1 v2 * Product5 v3 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  Product2 v1 v2 * Product4 v3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  Product2 v1 v2 * Product3 v3 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  Product2 v1 v2 * Product2 v3 v4 =-    Product4 v1 v2 v3 v4-  Product2 v1 v2 * v3 =-    Product3 v1 v2 v3-  v1 * Product6 v2 v3 v4 v5 v6 v7 =-    Product7 v1 v2 v3 v4 v5 v6 v7-  v1 * Product5 v2 v3 v4 v5 v6 =-    Product6 v1 v2 v3 v4 v5 v6-  v1 * Product4 v2 v3 v4 v5 =-    Product5 v1 v2 v3 v4 v5-  v1 * Product3 v2 v3 v4 =-    Product4 v1 v2 v3 v4-  v1 * Product2 v2 v3 =-    Product3 v1 v2 v3-  v1 * v2 =-    Product2 v1 v2+type family a * b where +  Product6 _1 _2 _3 _4 _5 _6 * _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  +  Product5 _1 _2 _3 _4 _5 * Product2 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product5 _1 _2 _3 _4 _5 * _6 =+    Product6 _1 _2 _3 _4 _5 _6+  +  Product4 _1 _2 _3 _4 * Product3 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product4 _1 _2 _3 _4 * Product2 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product4 _1 _2 _3 _4 * _5 =+    Product5 _1 _2 _3 _4 _5+  +  Product3 _1 _2 _3 * Product4 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product3 _1 _2 _3 * Product3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product3 _1 _2 _3 * Product2 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  Product3 _1 _2 _3 * _4 =+    Product4 _1 _2 _3 _4+  +  Product2 _1 _2 * Product5 _3 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  Product2 _1 _2 * Product4 _3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  Product2 _1 _2 * Product3 _3 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  Product2 _1 _2 * Product2 _3 _4 =+    Product4 _1 _2 _3 _4+  Product2 _1 _2 * _3 =+    Product3 _1 _2 _3++  Undivided _1 _2 * _2 =+    _1+  Undivided _1 _2 * _3 =+    Undivided (_1 * _3) _2+    +  _1 * Product6 _2 _3 _4 _5 _6 _7 =+    Product7 _1 _2 _3 _4 _5 _6 _7+  _1 * Product5 _2 _3 _4 _5 _6 =+    Product6 _1 _2 _3 _4 _5 _6+  _1 * Product4 _2 _3 _4 _5 =+    Product5 _1 _2 _3 _4 _5+  _1 * Product3 _2 _3 _4 =+    Product4 _1 _2 _3 _4+  _1 * Product2 _2 _3 =+    Product3 _1 _2 _3+  _1 * Undivided _2 _1 =+    _2+  _1 * Undivided _2 _3 =+    Undivided (_1 * _2) _3+  _1 * _2 =+    Product2 _1 _2+ infixl 1 *+++-- * Division+-------------------------++-- |+-- An operator for removing elements from the product-types.+-- E.g.,+-- +-- > Int * Char * Bool / Char+-- +-- is the same type as+-- +-- > Int * Bool+-- +type family a / b where++  Product7 _1 _2 _3 _4 _5 _6 _7 / _1 =+    Product6 _2 _3 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _2 =+    Product6 _1 _3 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _3 =+    Product6 _1 _2 _4 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _4 =+    Product6 _1 _2 _3 _5 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _5 =+    Product6 _1 _2 _3 _4 _6 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _6 =+    Product6 _1 _2 _3 _4 _5 _7+  Product7 _1 _2 _3 _4 _5 _6 _7 / _7 =+    Product6 _1 _2 _3 _4 _5 _6++  Product6 _1 _2 _3 _4 _5 _6 / _1 =+    Product5 _2 _3 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _2 =+    Product5 _1 _3 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _3 =+    Product5 _1 _2 _4 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _4 =+    Product5 _1 _2 _3 _5 _6+  Product6 _1 _2 _3 _4 _5 _6 / _5 =+    Product5 _1 _2 _3 _4 _6+  Product6 _1 _2 _3 _4 _5 _6 / _6 =+    Product5 _1 _2 _3 _4 _5++  Product5 _1 _2 _3 _4 _5 / _1 =+    Product4 _2 _3 _4 _5+  Product5 _1 _2 _3 _4 _5 / _2 =+    Product4 _1 _3 _4 _5+  Product5 _1 _2 _3 _4 _5 / _3 =+    Product4 _1 _2 _4 _5+  Product5 _1 _2 _3 _4 _5 / _4 =+    Product4 _1 _2 _3 _5+  Product5 _1 _2 _3 _4 _5 / _5 =+    Product4 _1 _2 _3 _4++  Product4 _1 _2 _3 _4 / _1 =+    Product3 _2 _3 _4+  Product4 _1 _2 _3 _4 / _2 =+    Product3 _1 _3 _4+  Product4 _1 _2 _3 _4 / _3 =+    Product3 _1 _2 _4+  Product4 _1 _2 _3 _4 / _4 =+    Product3 _1 _2 _3++  Product3 _1 _2 _3 / _1 =+    Product2 _2 _3+  Product3 _1 _2 _3 / _2 =+    Product2 _1 _3+  Product3 _1 _2 _3 / _3 =+    Product2 _1 _2++  Product2 _1 _2 / _1 =+    _2+  Product2 _1 _2 / _2 =+    _1++  Undivided _1 _2 / _3 =+    Undivided (_1 / _3) _2++  -- This group requires the UndecidableInstances extension+  _1 / Product7 _2 _3 _4 _5 _6 _7 _8 =+    _1 / _2 / _3 / _4 / _5 / _6 / _7 / _8+  _1 / Product6 _2 _3 _4 _5 _6 _7 =+    _1 / _2 / _3 / _4 / _5 / _6 / _7+  _1 / Product5 _2 _3 _4 _5 _6 =+    _1 / _2 / _3 / _4 / _5 / _6+  _1 / Product4 _2 _3 _4 _5 =+    _1 / _2 / _3 / _4 / _5+  _1 / Product3 _2 _3 _4 =+    _1 / _2 / _3 / _4+  _1 / Product2 _2 _3 =+    _1 / _2 / _3++  _1 / _2 =+    Undivided _1 _2++infixl 1 /+++-- |+-- What you get, when the division cannot yet be performed.+-- +-- Happens when the dividend doesn't contain the divisor. E.g.,+-- +-- > Char / Bool+-- +-- produces+-- +-- > Undivided Char Bool+-- +-- However it's possible to get back to the normal type,+-- when you perform the required multiplication afterwards. E.g.,+-- +-- > Char / Bool * Bool+-- +-- produces+-- +-- > Char+-- +-- This construct actually exists primarily for that purpose.+data Undivided dividend divisor
library/CompoundTypes/Private/Strict/Sum.hs view
@@ -1,23 +1,24 @@+{-# LANGUAGE UndecidableInstances #-} module CompoundTypes.Private.Strict.Sum where  -data Sum2 v1 v2 =-  Sum2_1 !v1 | Sum2_2 !v2+data Sum2 _1 _2 =+  Sum2_1 !_1 | Sum2_2 !_2 -data Sum3 v1 v2 v3 =-  Sum3_1 !v1 | Sum3_2 !v2 | Sum3_3 !v3+data Sum3 _1 _2 _3 =+  Sum3_1 !_1 | Sum3_2 !_2 | Sum3_3 !_3 -data Sum4 v1 v2 v3 v4 =-  Sum4_1 !v1 | Sum4_2 !v2 | Sum4_3 !v3 | Sum4_4 !v4+data Sum4 _1 _2 _3 _4 =+  Sum4_1 !_1 | Sum4_2 !_2 | Sum4_3 !_3 | Sum4_4 !_4 -data Sum5 v1 v2 v3 v4 v5 =-  Sum5_1 !v1 | Sum5_2 !v2 | Sum5_3 !v3 | Sum5_4 !v4 | Sum5_5 !v5+data Sum5 _1 _2 _3 _4 _5 =+  Sum5_1 !_1 | Sum5_2 !_2 | Sum5_3 !_3 | Sum5_4 !_4 | Sum5_5 !_5 -data Sum6 v1 v2 v3 v4 v5 v6 =-  Sum6_1 !v1 | Sum6_2 !v2 | Sum6_3 !v3 | Sum6_4 !v4 | Sum6_5 !v5 | Sum6_6 !v6+data Sum6 _1 _2 _3 _4 _5 _6 =+  Sum6_1 !_1 | Sum6_2 !_2 | Sum6_3 !_3 | Sum6_4 !_4 | Sum6_5 !_5 | Sum6_6 !_6 -data Sum7 v1 v2 v3 v4 v5 v6 v7 =-  Sum7_1 !v1 | Sum7_2 !v2 | Sum7_3 !v3 | Sum7_4 !v4 | Sum7_5 !v5 | Sum7_6 !v6 | Sum7_7 !v7+data Sum7 _1 _2 _3 _4 _5 _6 _7 =+  Sum7_1 !_1 | Sum7_2 !_2 | Sum7_3 !_3 | Sum7_4 !_4 | Sum7_5 !_5 | Sum7_6 !_6 | Sum7_7 !_7   -- |@@ -29,48 +30,185 @@ -- In that case it will resolve to: --  -- > Sum3 Int Char Bool-type family (+) a b where-  Sum6 v1 v2 v3 v4 v5 v6 + v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum5 v1 v2 v3 v4 v5 + Sum2 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum5 v1 v2 v3 v4 v5 + v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum4 v1 v2 v3 v4 + Sum3 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum4 v1 v2 v3 v4 + Sum2 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum4 v1 v2 v3 v4 + v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum3 v1 v2 v3 + Sum4 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum3 v1 v2 v3 + Sum3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum3 v1 v2 v3 + Sum2 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum3 v1 v2 v3 + v4 =-    Sum4 v1 v2 v3 v4-  Sum2 v1 v2 + Sum5 v3 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  Sum2 v1 v2 + Sum4 v3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  Sum2 v1 v2 + Sum3 v3 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  Sum2 v1 v2 + Sum2 v3 v4 =-    Sum4 v1 v2 v3 v4-  Sum2 v1 v2 + v3 =-    Sum3 v1 v2 v3-  v1 + Sum6 v2 v3 v4 v5 v6 v7 =-    Sum7 v1 v2 v3 v4 v5 v6 v7-  v1 + Sum5 v2 v3 v4 v5 v6 =-    Sum6 v1 v2 v3 v4 v5 v6-  v1 + Sum4 v2 v3 v4 v5 =-    Sum5 v1 v2 v3 v4 v5-  v1 + Sum3 v2 v3 v4 =-    Sum4 v1 v2 v3 v4-  v1 + Sum2 v2 v3 =-    Sum3 v1 v2 v3-  v1 + v2 =-    Sum2 v1 v2+type family a + b where +  Sum6 _1 _2 _3 _4 _5 _6 + _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  +  Sum5 _1 _2 _3 _4 _5 + Sum2 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum5 _1 _2 _3 _4 _5 + _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  +  Sum4 _1 _2 _3 _4 + Sum3 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum4 _1 _2 _3 _4 + Sum2 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum4 _1 _2 _3 _4 + _5 =+    Sum5 _1 _2 _3 _4 _5+  +  Sum3 _1 _2 _3 + Sum4 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum3 _1 _2 _3 + Sum3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum3 _1 _2 _3 + Sum2 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  Sum3 _1 _2 _3 + _4 =+    Sum4 _1 _2 _3 _4+  +  Sum2 _1 _2 + Sum5 _3 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  Sum2 _1 _2 + Sum4 _3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  Sum2 _1 _2 + Sum3 _3 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  Sum2 _1 _2 + Sum2 _3 _4 =+    Sum4 _1 _2 _3 _4+  Sum2 _1 _2 + _3 =+    Sum3 _1 _2 _3++  Unsubtracted _1 _2 + _2 =+    _1+  Unsubtracted _1 _2 + _3 =+    Unsubtracted (_1 + _3) _2+    +  _1 + Sum6 _2 _3 _4 _5 _6 _7 =+    Sum7 _1 _2 _3 _4 _5 _6 _7+  _1 + Sum5 _2 _3 _4 _5 _6 =+    Sum6 _1 _2 _3 _4 _5 _6+  _1 + Sum4 _2 _3 _4 _5 =+    Sum5 _1 _2 _3 _4 _5+  _1 + Sum3 _2 _3 _4 =+    Sum4 _1 _2 _3 _4+  _1 + Sum2 _2 _3 =+    Sum3 _1 _2 _3+  _1 + Unsubtracted _2 _1 =+    _2+  _1 + Unsubtracted _2 _3 =+    Unsubtracted (_1 + _2) _3+  _1 + _2 =+    Sum2 _1 _2+ infixl 0 ++++-- * Subtraction+-------------------------++-- |+-- An operator for removing elements from the sum-types.+-- E.g.,+-- +-- > Int + Char + Bool - Char+-- +-- is the same type as+-- +-- > Int + Bool+-- +type family a - b where++  Sum7 _1 _2 _3 _4 _5 _6 _7 - _1 =+    Sum6 _2 _3 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _2 =+    Sum6 _1 _3 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _3 =+    Sum6 _1 _2 _4 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _4 =+    Sum6 _1 _2 _3 _5 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _5 =+    Sum6 _1 _2 _3 _4 _6 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _6 =+    Sum6 _1 _2 _3 _4 _5 _7+  Sum7 _1 _2 _3 _4 _5 _6 _7 - _7 =+    Sum6 _1 _2 _3 _4 _5 _6++  Sum6 _1 _2 _3 _4 _5 _6 - _1 =+    Sum5 _2 _3 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _2 =+    Sum5 _1 _3 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _3 =+    Sum5 _1 _2 _4 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _4 =+    Sum5 _1 _2 _3 _5 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _5 =+    Sum5 _1 _2 _3 _4 _6+  Sum6 _1 _2 _3 _4 _5 _6 - _6 =+    Sum5 _1 _2 _3 _4 _5++  Sum5 _1 _2 _3 _4 _5 - _1 =+    Sum4 _2 _3 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _2 =+    Sum4 _1 _3 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _3 =+    Sum4 _1 _2 _4 _5+  Sum5 _1 _2 _3 _4 _5 - _4 =+    Sum4 _1 _2 _3 _5+  Sum5 _1 _2 _3 _4 _5 - _5 =+    Sum4 _1 _2 _3 _4++  Sum4 _1 _2 _3 _4 - _1 =+    Sum3 _2 _3 _4+  Sum4 _1 _2 _3 _4 - _2 =+    Sum3 _1 _3 _4+  Sum4 _1 _2 _3 _4 - _3 =+    Sum3 _1 _2 _4+  Sum4 _1 _2 _3 _4 - _4 =+    Sum3 _1 _2 _3++  Sum3 _1 _2 _3 - _1 =+    Sum2 _2 _3+  Sum3 _1 _2 _3 - _2 =+    Sum2 _1 _3+  Sum3 _1 _2 _3 - _3 =+    Sum2 _1 _2++  Sum2 _1 _2 - _1 =+    _2+  Sum2 _1 _2 - _2 =+    _1++  Unsubtracted _1 _2 - _3 =+    Unsubtracted (_1 - _3) _2++  -- This group requires the UndecidableInstances extension+  _1 - Sum7 _2 _3 _4 _5 _6 _7 _8 =+    _1 - _2 - _3 - _4 - _5 - _6 - _7 - _8+  _1 - Sum6 _2 _3 _4 _5 _6 _7 =+    _1 - _2 - _3 - _4 - _5 - _6 - _7+  _1 - Sum5 _2 _3 _4 _5 _6 =+    _1 - _2 - _3 - _4 - _5 - _6+  _1 - Sum4 _2 _3 _4 _5 =+    _1 - _2 - _3 - _4 - _5+  _1 - Sum3 _2 _3 _4 =+    _1 - _2 - _3 - _4+  _1 - Sum2 _2 _3 =+    _1 - _2 - _3++  _1 - _2 =+    Unsubtracted _1 _2++infixl 0 -+++-- |+-- What you get, when the subtraction cannot yet be performed.+-- +-- Happens when the minuend doesn't contain the subtrahend. E.g.,+-- +-- > Char - Bool+-- +-- produces+-- +-- > Unsubtracted Char Bool+-- +-- However it's possible to get back to the normal type,+-- when you perform the required addition afterwards. E.g.,+-- +-- > Char - Bool + Bool+-- +-- produces+-- +-- > Char+-- +-- This construct actually exists primarily for that purpose.+data Unsubtracted minuend subtrahend