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

Safe HaskellNone
LanguageHaskell2010

CompoundTypes.Strict

Contents

Description

Implementations of the strict 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