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

Safe HaskellNone
LanguageHaskell2010

CompoundTypes.Lazy

Description

Implementations of strict data-structures.

Synopsis

Documentation

data Sum2 a b Source #

Constructors

Sum2_1 a 
Sum2_2 b 

data Sum3 a b c Source #

Constructors

Sum3_1 a 
Sum3_2 b 
Sum3_3 c 

data Sum4 a b c d Source #

Constructors

Sum4_1 a 
Sum4_2 b 
Sum4_3 c 
Sum4_4 d 

data Sum5 a b c d e Source #

Constructors

Sum5_1 a 
Sum5_2 b 
Sum5_3 c 
Sum5_4 d 
Sum5_5 e 

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

(Sum4 v1 v2 v3 v4) + v5 = Sum5 v1 v2 v3 v4 v5 
(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) + (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 + (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 

data Product2 a b Source #

Constructors

Product2 a b 

data Product3 a b c Source #

Constructors

Product3 a b c 

data Product4 a b c d Source #

Constructors

Product4 a b c d 

data Product5 a b c d e Source #

Constructors

Product5 a b c d e 

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

(Product4 v1 v2 v3 v4) * v5 = Product5 v1 v2 v3 v4 v5 
(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) * (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 * (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