compound-types 0.1.1.1 → 0.1.2
raw patch · 8 files changed
+166/−49 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ CompoundTypes.Lazy: Product6 :: v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Product7 :: v1 -> v2 -> v3 -> v4 -> v5 -> v6 -> v7 -> Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum6_1 :: v1 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_2 :: v2 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_3 :: v3 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_4 :: v4 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_5 :: v5 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum6_6 :: v6 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: Sum7_1 :: v1 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_2 :: v2 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_3 :: v3 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_4 :: v4 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_5 :: v5 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_6 :: v6 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: Sum7_7 :: v7 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: data Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: data Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Lazy: data Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Lazy: data Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Product6 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> !v6 -> Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Product7 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> !v6 -> !v7 -> Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum6_1 :: !v1 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_2 :: !v2 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_3 :: !v3 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_4 :: !v4 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_5 :: !v5 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum6_6 :: !v6 -> Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: Sum7_1 :: !v1 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_2 :: !v2 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_3 :: !v3 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_4 :: !v4 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_5 :: !v5 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_6 :: !v6 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: Sum7_7 :: !v7 -> Sum7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: data Product6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: data Product7 v1 v2 v3 v4 v5 v6 v7
+ CompoundTypes.Strict: data Sum6 v1 v2 v3 v4 v5 v6
+ CompoundTypes.Strict: data Sum7 v1 v2 v3 v4 v5 v6 v7
- CompoundTypes.Lazy: Product2 :: a -> b -> Product2 a b
+ CompoundTypes.Lazy: Product2 :: v1 -> v2 -> Product2 v1 v2
- CompoundTypes.Lazy: Product3 :: a -> b -> c -> Product3 a b c
+ CompoundTypes.Lazy: Product3 :: v1 -> v2 -> v3 -> Product3 v1 v2 v3
- CompoundTypes.Lazy: Product4 :: a -> b -> c -> d -> Product4 a b c d
+ CompoundTypes.Lazy: Product4 :: v1 -> v2 -> v3 -> v4 -> Product4 v1 v2 v3 v4
- CompoundTypes.Lazy: Product5 :: a -> b -> c -> d -> e -> Product5 a b c d e
+ CompoundTypes.Lazy: Product5 :: v1 -> v2 -> v3 -> v4 -> v5 -> Product5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: Sum2_1 :: a -> Sum2 a b
+ CompoundTypes.Lazy: Sum2_1 :: v1 -> Sum2 v1 v2
- CompoundTypes.Lazy: Sum2_2 :: b -> Sum2 a b
+ CompoundTypes.Lazy: Sum2_2 :: v2 -> Sum2 v1 v2
- CompoundTypes.Lazy: Sum3_1 :: a -> Sum3 a b c
+ CompoundTypes.Lazy: Sum3_1 :: v1 -> Sum3 v1 v2 v3
- CompoundTypes.Lazy: Sum3_2 :: b -> Sum3 a b c
+ CompoundTypes.Lazy: Sum3_2 :: v2 -> Sum3 v1 v2 v3
- CompoundTypes.Lazy: Sum3_3 :: c -> Sum3 a b c
+ CompoundTypes.Lazy: Sum3_3 :: v3 -> Sum3 v1 v2 v3
- CompoundTypes.Lazy: Sum4_1 :: a -> Sum4 a b c d
+ CompoundTypes.Lazy: Sum4_1 :: v1 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Lazy: Sum4_2 :: b -> Sum4 a b c d
+ CompoundTypes.Lazy: Sum4_2 :: v2 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Lazy: Sum4_3 :: c -> Sum4 a b c d
+ CompoundTypes.Lazy: Sum4_3 :: v3 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Lazy: Sum4_4 :: d -> Sum4 a b c d
+ CompoundTypes.Lazy: Sum4_4 :: v4 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Lazy: Sum5_1 :: a -> Sum5 a b c d e
+ CompoundTypes.Lazy: Sum5_1 :: v1 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: Sum5_2 :: b -> Sum5 a b c d e
+ CompoundTypes.Lazy: Sum5_2 :: v2 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: Sum5_3 :: c -> Sum5 a b c d e
+ CompoundTypes.Lazy: Sum5_3 :: v3 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: Sum5_4 :: d -> Sum5 a b c d e
+ CompoundTypes.Lazy: Sum5_4 :: v4 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: Sum5_5 :: e -> Sum5 a b c d e
+ CompoundTypes.Lazy: Sum5_5 :: v5 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: data Product2 a b
+ CompoundTypes.Lazy: data Product2 v1 v2
- CompoundTypes.Lazy: data Product3 a b c
+ CompoundTypes.Lazy: data Product3 v1 v2 v3
- CompoundTypes.Lazy: data Product4 a b c d
+ CompoundTypes.Lazy: data Product4 v1 v2 v3 v4
- CompoundTypes.Lazy: data Product5 a b c d e
+ CompoundTypes.Lazy: data Product5 v1 v2 v3 v4 v5
- CompoundTypes.Lazy: data Sum2 a b
+ CompoundTypes.Lazy: data Sum2 v1 v2
- CompoundTypes.Lazy: data Sum3 a b c
+ CompoundTypes.Lazy: data Sum3 v1 v2 v3
- CompoundTypes.Lazy: data Sum4 a b c d
+ CompoundTypes.Lazy: data Sum4 v1 v2 v3 v4
- CompoundTypes.Lazy: data Sum5 a b c d e
+ CompoundTypes.Lazy: data Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Product2 :: !a -> !b -> Product2 a b
+ CompoundTypes.Strict: Product2 :: !v1 -> !v2 -> Product2 v1 v2
- CompoundTypes.Strict: Product3 :: !a -> !b -> !c -> Product3 a b c
+ CompoundTypes.Strict: Product3 :: !v1 -> !v2 -> !v3 -> Product3 v1 v2 v3
- CompoundTypes.Strict: Product4 :: !a -> !b -> !c -> !d -> Product4 a b c d
+ CompoundTypes.Strict: Product4 :: !v1 -> !v2 -> !v3 -> !v4 -> Product4 v1 v2 v3 v4
- CompoundTypes.Strict: Product5 :: !a -> !b -> !c -> !d -> !e -> Product5 a b c d e
+ CompoundTypes.Strict: Product5 :: !v1 -> !v2 -> !v3 -> !v4 -> !v5 -> Product5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Sum2_1 :: !a -> Sum2 a b
+ CompoundTypes.Strict: Sum2_1 :: !v1 -> Sum2 v1 v2
- CompoundTypes.Strict: Sum2_2 :: !b -> Sum2 a b
+ CompoundTypes.Strict: Sum2_2 :: !v2 -> Sum2 v1 v2
- CompoundTypes.Strict: Sum3_1 :: !a -> Sum3 a b c
+ CompoundTypes.Strict: Sum3_1 :: !v1 -> Sum3 v1 v2 v3
- CompoundTypes.Strict: Sum3_2 :: !b -> Sum3 a b c
+ CompoundTypes.Strict: Sum3_2 :: !v2 -> Sum3 v1 v2 v3
- CompoundTypes.Strict: Sum3_3 :: !c -> Sum3 a b c
+ CompoundTypes.Strict: Sum3_3 :: !v3 -> Sum3 v1 v2 v3
- CompoundTypes.Strict: Sum4_1 :: !a -> Sum4 a b c d
+ CompoundTypes.Strict: Sum4_1 :: !v1 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Strict: Sum4_2 :: !b -> Sum4 a b c d
+ CompoundTypes.Strict: Sum4_2 :: !v2 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Strict: Sum4_3 :: !c -> Sum4 a b c d
+ CompoundTypes.Strict: Sum4_3 :: !v3 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Strict: Sum4_4 :: !d -> Sum4 a b c d
+ CompoundTypes.Strict: Sum4_4 :: !v4 -> Sum4 v1 v2 v3 v4
- CompoundTypes.Strict: Sum5_1 :: !a -> Sum5 a b c d e
+ CompoundTypes.Strict: Sum5_1 :: !v1 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Sum5_2 :: !b -> Sum5 a b c d e
+ CompoundTypes.Strict: Sum5_2 :: !v2 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Sum5_3 :: !c -> Sum5 a b c d e
+ CompoundTypes.Strict: Sum5_3 :: !v3 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Sum5_4 :: !d -> Sum5 a b c d e
+ CompoundTypes.Strict: Sum5_4 :: !v4 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: Sum5_5 :: !e -> Sum5 a b c d e
+ CompoundTypes.Strict: Sum5_5 :: !v5 -> Sum5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: data Product2 a b
+ CompoundTypes.Strict: data Product2 v1 v2
- CompoundTypes.Strict: data Product3 a b c
+ CompoundTypes.Strict: data Product3 v1 v2 v3
- CompoundTypes.Strict: data Product4 a b c d
+ CompoundTypes.Strict: data Product4 v1 v2 v3 v4
- CompoundTypes.Strict: data Product5 a b c d e
+ CompoundTypes.Strict: data Product5 v1 v2 v3 v4 v5
- CompoundTypes.Strict: data Sum2 a b
+ CompoundTypes.Strict: data Sum2 v1 v2
- CompoundTypes.Strict: data Sum3 a b c
+ CompoundTypes.Strict: data Sum3 v1 v2 v3
- CompoundTypes.Strict: data Sum4 a b c d
+ CompoundTypes.Strict: data Sum4 v1 v2 v3 v4
- CompoundTypes.Strict: data Sum5 a b c d e
+ CompoundTypes.Strict: data Sum5 v1 v2 v3 v4 v5
Files
- compound-types.cabal +1/−1
- demo/Main.hs +7/−10
- library/CompoundTypes/Lazy.hs +3/−1
- library/CompoundTypes/Private/Lazy/Product.hs +38/−9
- library/CompoundTypes/Private/Lazy/Sum.hs +38/−9
- library/CompoundTypes/Private/Strict/Product.hs +38/−9
- library/CompoundTypes/Private/Strict/Sum.hs +38/−9
- library/CompoundTypes/Strict.hs +3/−1
compound-types.cabal view
@@ -1,7 +1,7 @@ name: compound-types version:- 0.1.1.1+ 0.1.2 category: Data, Types, Type System synopsis:
demo/Main.hs view
@@ -8,23 +8,20 @@ putStrLn "This demonstration is all about the compilability" -- |--- Same as the following type: +-- This function exhibits the benefit of the first-class sum-type+-- being usable as a function parameter. -- --- > Sum3 Int Char Bool-type IntCharBoolSum =- Int + Char + Bool---- |--- How it can be pattern-matched-intCharBoolSumToText :: IntCharBoolSum -> String-intCharBoolSumToText =+-- It also shows, how we can pattern-match it.+intCharBoolSumToString :: Int + Char + Bool -> String+intCharBoolSumToString = \case Sum3_1 int -> "Int: " <> show int Sum3_2 char -> "Char: " <> show char Sum3_3 bool -> "Bool: " <> show bool -- |--- Same as the following type:+-- Following is an example of a more complicated composition,+-- which is the same as the following type: -- -- > Sum3 Int (Product2 Char (Sum2 Bool String)) Char --
library/CompoundTypes/Lazy.hs view
@@ -1,8 +1,10 @@ -- |--- Implementations of strict data-structures.+-- Implementations of the lazy data-structures. module CompoundTypes.Lazy (+ -- * Sum-types module CompoundTypes.Private.Lazy.Sum,+ -- * Product-types module CompoundTypes.Private.Lazy.Product, ) where
library/CompoundTypes/Private/Lazy/Product.hs view
@@ -1,40 +1,69 @@ module CompoundTypes.Private.Lazy.Product where -data Product2 a b =- Product2 a b+data Product2 v1 v2 =+ Product2 v1 v2 -data Product3 a b c =- Product3 a b c+data Product3 v1 v2 v3 =+ Product3 v1 v2 v3 -data Product4 a b c d =- Product4 a b c d+data Product4 v1 v2 v3 v4 =+ Product4 v1 v2 v3 v4 -data Product5 a b c d e =- Product5 a b c d e+data Product5 v1 v2 v3 v4 v5 =+ Product5 v1 v2 v3 v4 v5 +data Product6 v1 v2 v3 v4 v5 v6 =+ Product6 v1 v2 v3 v4 v5 v6++data Product7 v1 v2 v3 v4 v5 v6 v7 =+ Product7 v1 v2 v3 v4 v5 v6 v7++ -- | -- Automatically derives the product-type of the according arity -- from expressions such as: -- --- > (Int * Char * Bool)+-- > Int * Char * Bool -- -- 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 =
library/CompoundTypes/Private/Lazy/Sum.hs view
@@ -1,40 +1,69 @@ module CompoundTypes.Private.Lazy.Sum where -data Sum2 a b =- Sum2_1 a | Sum2_2 b+data Sum2 v1 v2 =+ Sum2_1 v1 | Sum2_2 v2 -data Sum3 a b c =- Sum3_1 a | Sum3_2 b | Sum3_3 c+data Sum3 v1 v2 v3 =+ Sum3_1 v1 | Sum3_2 v2 | Sum3_3 v3 -data Sum4 a b c d =- Sum4_1 a | Sum4_2 b | Sum4_3 c | Sum4_4 d+data Sum4 v1 v2 v3 v4 =+ Sum4_1 v1 | Sum4_2 v2 | Sum4_3 v3 | Sum4_4 v4 -data Sum5 a b c d e =- Sum5_1 a | Sum5_2 b | Sum5_3 c | Sum5_4 d | Sum5_5 e+data Sum5 v1 v2 v3 v4 v5 =+ Sum5_1 v1 | Sum5_2 v2 | Sum5_3 v3 | Sum5_4 v4 | Sum5_5 v5 +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 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++ -- | -- Automatically derives the sum-type of the according arity -- from expressions such as: -- --- > (Int + Char + Bool)+-- > Int + Char + Bool -- -- 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 =
library/CompoundTypes/Private/Strict/Product.hs view
@@ -1,40 +1,69 @@ module CompoundTypes.Private.Strict.Product where -data Product2 a b =- Product2 !a !b+data Product2 v1 v2 =+ Product2 !v1 !v2 -data Product3 a b c =- Product3 !a !b !c+data Product3 v1 v2 v3 =+ Product3 !v1 !v2 !v3 -data Product4 a b c d =- Product4 !a !b !c !d+data Product4 v1 v2 v3 v4 =+ Product4 !v1 !v2 !v3 !v4 -data Product5 a b c d e =- Product5 !a !b !c !d !e+data Product5 v1 v2 v3 v4 v5 =+ Product5 !v1 !v2 !v3 !v4 !v5 +data Product6 v1 v2 v3 v4 v5 v6 =+ Product6 !v1 !v2 !v3 !v4 !v5 !v6++data Product7 v1 v2 v3 v4 v5 v6 v7 =+ Product7 !v1 !v2 !v3 !v4 !v5 !v6 !v7++ -- | -- Automatically derives the product-type of the according arity -- from expressions such as: -- --- > (Int * Char * Bool)+-- > Int * Char * Bool -- -- 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 =
library/CompoundTypes/Private/Strict/Sum.hs view
@@ -1,40 +1,69 @@ module CompoundTypes.Private.Strict.Sum where -data Sum2 a b =- Sum2_1 !a | Sum2_2 !b+data Sum2 v1 v2 =+ Sum2_1 !v1 | Sum2_2 !v2 -data Sum3 a b c =- Sum3_1 !a | Sum3_2 !b | Sum3_3 !c+data Sum3 v1 v2 v3 =+ Sum3_1 !v1 | Sum3_2 !v2 | Sum3_3 !v3 -data Sum4 a b c d =- Sum4_1 !a | Sum4_2 !b | Sum4_3 !c | Sum4_4 !d+data Sum4 v1 v2 v3 v4 =+ Sum4_1 !v1 | Sum4_2 !v2 | Sum4_3 !v3 | Sum4_4 !v4 -data Sum5 a b c d e =- Sum5_1 !a | Sum5_2 !b | Sum5_3 !c | Sum5_4 !d | Sum5_5 !e+data Sum5 v1 v2 v3 v4 v5 =+ Sum5_1 !v1 | Sum5_2 !v2 | Sum5_3 !v3 | Sum5_4 !v4 | Sum5_5 !v5 +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 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++ -- | -- Automatically derives the sum-type of the according arity -- from expressions such as: -- --- > (Int + Char + Bool)+-- > Int + Char + Bool -- -- 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 =
library/CompoundTypes/Strict.hs view
@@ -1,8 +1,10 @@ -- |--- Implementations of strict data-structures.+-- Implementations of the strict data-structures. module CompoundTypes.Strict (+ -- * Sum-types module CompoundTypes.Private.Strict.Sum,+ -- * Product-types module CompoundTypes.Private.Strict.Product, ) where