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

Safe HaskellNone
LanguageHaskell2010

CompoundTypes.Strict

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