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 +1/−1
- library/CompoundTypes/Private/Lazy/Product.hs +193/−55
- library/CompoundTypes/Private/Lazy/Sum.hs +193/−55
- library/CompoundTypes/Private/Strict/Product.hs +193/−55
- library/CompoundTypes/Private/Strict/Sum.hs +193/−55
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