compound-types-0.1.2: Sum and Product types and such

Safe HaskellNone
LanguageHaskell2010

CompoundTypes.Lazy

Contents

Description

Implementations of the lazy data-structures.

Synopsis

Sum-types

data Sum2 v1 v2 Source #

Constructors

Sum2_1 v1 
Sum2_2 v2 

data Sum3 v1 v2 v3 Source #

Constructors

Sum3_1 v1 
Sum3_2 v2 
Sum3_3 v3 

data Sum4 v1 v2 v3 v4 Source #

Constructors

Sum4_1 v1 
Sum4_2 v2 
Sum4_3 v3 
Sum4_4 v4 

data Sum5 v1 v2 v3 v4 v5 Source #

Constructors

Sum5_1 v1 
Sum5_2 v2 
Sum5_3 v3 
Sum5_4 v4 
Sum5_5 v5 

data Sum6 v1 v2 v3 v4 v5 v6 Source #

Constructors

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 Source #

Constructors

Sum7_1 v1 
Sum7_2 v2 
Sum7_3 v3 
Sum7_4 v4 
Sum7_5 v5 
Sum7_6 v6 
Sum7_7 v7 

type family a + b where ... infixl 0 Source #

Automatically derives the sum-type of the according arity from expressions such as:

Int + Char + Bool

In that case it will resolve to:

Sum3 Int Char Bool

Equations

(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 

Product-types

data Product2 v1 v2 Source #

Constructors

Product2 v1 v2 

data Product3 v1 v2 v3 Source #

Constructors

Product3 v1 v2 v3 

data Product4 v1 v2 v3 v4 Source #

Constructors

Product4 v1 v2 v3 v4 

data Product5 v1 v2 v3 v4 v5 Source #

Constructors

Product5 v1 v2 v3 v4 v5 

data Product6 v1 v2 v3 v4 v5 v6 Source #

Constructors

Product6 v1 v2 v3 v4 v5 v6 

data Product7 v1 v2 v3 v4 v5 v6 v7 Source #

Constructors

Product7 v1 v2 v3 v4 v5 v6 v7 

type family a * b where ... infixl 1 Source #

Automatically derives the product-type of the according arity from expressions such as:

Int * Char * Bool

In that case it will resolve to:

Product3 Int Char Bool

Equations

(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