compound-types-0.1.2.1: 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 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 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