syntactic-1.16.2: Generic abstract syntax, and utilities for embedded languages

Safe HaskellNone
LanguageHaskell2010

Language.Syntactic.Constructs.Tuple

Contents

Description

Construction and elimination of tuples in the object language

Synopsis

Construction

data Tuple sig where Source

Expressions for constructing tuples

Constructors

Tup2 :: Tuple (a :-> (b :-> Full (a, b))) 
Tup3 :: Tuple (a :-> (b :-> (c :-> Full (a, b, c)))) 
Tup4 :: Tuple (a :-> (b :-> (c :-> (d :-> Full (a, b, c, d))))) 
Tup5 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> Full (a, b, c, d, e)))))) 
Tup6 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> Full (a, b, c, d, e, f))))))) 
Tup7 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> Full (a, b, c, d, e, f, g)))))))) 
Tup8 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> Full (a, b, c, d, e, f, g, h))))))))) 
Tup9 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> Full (a, b, c, d, e, f, g, h, i)))))))))) 
Tup10 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> Full (a, b, c, d, e, f, g, h, i, j))))))))))) 
Tup11 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> (k :-> Full (a, b, c, d, e, f, g, h, i, j, k)))))))))))) 
Tup12 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> (k :-> (l :-> Full (a, b, c, d, e, f, g, h, i, j, k, l))))))))))))) 
Tup13 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> (k :-> (l :-> (m :-> Full (a, b, c, d, e, f, g, h, i, j, k, l, m)))))))))))))) 
Tup14 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> (k :-> (l :-> (m :-> (n :-> Full (a, b, c, d, e, f, g, h, i, j, k, l, m, n))))))))))))))) 
Tup15 :: Tuple (a :-> (b :-> (c :-> (d :-> (e :-> (f :-> (g :-> (h :-> (i :-> (j :-> (k :-> (l :-> (m :-> (n :-> (o :-> Full (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)))))))))))))))) 

Projection

type family Sel1' a Source

These families (Sel1' - Sel15') are needed because of the problem described in:

http://emil-fp.blogspot.com/2011/08/fundeps-weaker-than-type-families.html

Instances

type Sel1' (a, b) = a Source 
type Sel1' (a, b, c) = a Source 
type Sel1' (a, b, c, d) = a Source 
type Sel1' (a, b, c, d, e) = a Source 
type Sel1' (a, b, c, d, e, f) = a Source 
type Sel1' (a, b, c, d, e, f, g) = a Source 
type Sel1' (a, b, c, d, e, f, g, h) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j, k) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j, k, l) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j, k, l, m) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = a Source 
type Sel1' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = a Source 

type family Sel2' a Source

Instances

type Sel2' (a, b) = b Source 
type Sel2' (a, b, c) = b Source 
type Sel2' (a, b, c, d) = b Source 
type Sel2' (a, b, c, d, e) = b Source 
type Sel2' (a, b, c, d, e, f) = b Source 
type Sel2' (a, b, c, d, e, f, g) = b Source 
type Sel2' (a, b, c, d, e, f, g, h) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j, k) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j, k, l) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j, k, l, m) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = b Source 
type Sel2' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = b Source 

type family Sel3' a Source

Instances

type Sel3' (a, b, c) = c Source 
type Sel3' (a, b, c, d) = c Source 
type Sel3' (a, b, c, d, e) = c Source 
type Sel3' (a, b, c, d, e, f) = c Source 
type Sel3' (a, b, c, d, e, f, g) = c Source 
type Sel3' (a, b, c, d, e, f, g, h) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j, k) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j, k, l) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j, k, l, m) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = c Source 
type Sel3' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = c Source 

type family Sel4' a Source

Instances

type Sel4' (a, b, c, d) = d Source 
type Sel4' (a, b, c, d, e) = d Source 
type Sel4' (a, b, c, d, e, f) = d Source 
type Sel4' (a, b, c, d, e, f, g) = d Source 
type Sel4' (a, b, c, d, e, f, g, h) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j, k) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j, k, l) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j, k, l, m) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = d Source 
type Sel4' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = d Source 

type family Sel5' a Source

Instances

type Sel5' (a, b, c, d, e) = e Source 
type Sel5' (a, b, c, d, e, f) = e Source 
type Sel5' (a, b, c, d, e, f, g) = e Source 
type Sel5' (a, b, c, d, e, f, g, h) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j, k) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j, k, l) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j, k, l, m) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = e Source 
type Sel5' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = e Source 

type family Sel6' a Source

Instances

type Sel6' (a, b, c, d, e, f) = f Source 
type Sel6' (a, b, c, d, e, f, g) = f Source 
type Sel6' (a, b, c, d, e, f, g, h) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j, k) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j, k, l) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j, k, l, m) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = f Source 
type Sel6' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = f Source 

type family Sel7' a Source

Instances

type Sel7' (a, b, c, d, e, f, g) = g Source 
type Sel7' (a, b, c, d, e, f, g, h) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j, k) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j, k, l) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j, k, l, m) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = g Source 
type Sel7' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = g Source 

type family Sel8' a Source

Instances

type Sel8' (a, b, c, d, e, f, g, h) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j, k) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j, k, l) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j, k, l, m) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = h Source 
type Sel8' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = h Source 

type family Sel9' a Source

Instances

type Sel9' (a, b, c, d, e, f, g, h, i) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j, k) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j, k, l) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j, k, l, m) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = i Source 
type Sel9' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = i Source 

type family Sel10' a Source

Instances

type Sel10' (a, b, c, d, e, f, g, h, i, j) = j Source 
type Sel10' (a, b, c, d, e, f, g, h, i, j, k) = j Source 
type Sel10' (a, b, c, d, e, f, g, h, i, j, k, l) = j Source 
type Sel10' (a, b, c, d, e, f, g, h, i, j, k, l, m) = j Source 
type Sel10' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = j Source 
type Sel10' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = j Source 

type family Sel11' a Source

Instances

type Sel11' (a, b, c, d, e, f, g, h, i, j, k) = k Source 
type Sel11' (a, b, c, d, e, f, g, h, i, j, k, l) = k Source 
type Sel11' (a, b, c, d, e, f, g, h, i, j, k, l, m) = k Source 
type Sel11' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = k Source 
type Sel11' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = k Source 

type family Sel12' a Source

Instances

type Sel12' (a, b, c, d, e, f, g, h, i, j, k, l) = l Source 
type Sel12' (a, b, c, d, e, f, g, h, i, j, k, l, m) = l Source 
type Sel12' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = l Source 
type Sel12' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = l Source 

type family Sel13' a Source

Instances

type Sel13' (a, b, c, d, e, f, g, h, i, j, k, l, m) = m Source 
type Sel13' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = m Source 
type Sel13' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = m Source 

type family Sel14' a Source

Instances

type Sel14' (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = n Source 
type Sel14' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = n Source 

type family Sel15' a Source

Instances

type Sel15' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = o Source 

data Select a where Source

Expressions for selecting elements of a tuple

Constructors

Sel1 :: (Sel1 a b, Sel1' a ~ b) => Select (a :-> Full b) 
Sel2 :: (Sel2 a b, Sel2' a ~ b) => Select (a :-> Full b) 
Sel3 :: (Sel3 a b, Sel3' a ~ b) => Select (a :-> Full b) 
Sel4 :: (Sel4 a b, Sel4' a ~ b) => Select (a :-> Full b) 
Sel5 :: (Sel5 a b, Sel5' a ~ b) => Select (a :-> Full b) 
Sel6 :: (Sel6 a b, Sel6' a ~ b) => Select (a :-> Full b) 
Sel7 :: (Sel7 a b, Sel7' a ~ b) => Select (a :-> Full b) 
Sel8 :: (Sel8 a b, Sel8' a ~ b) => Select (a :-> Full b) 
Sel9 :: (Sel9 a b, Sel9' a ~ b) => Select (a :-> Full b) 
Sel10 :: (Sel10 a b, Sel10' a ~ b) => Select (a :-> Full b) 
Sel11 :: (Sel11 a b, Sel11' a ~ b) => Select (a :-> Full b) 
Sel12 :: (Sel12 a b, Sel12' a ~ b) => Select (a :-> Full b) 
Sel13 :: (Sel13 a b, Sel13' a ~ b) => Select (a :-> Full b) 
Sel14 :: (Sel14 a b, Sel14' a ~ b) => Select (a :-> Full b) 
Sel15 :: (Sel15 a b, Sel15' a ~ b) => Select (a :-> Full b) 

selectPos :: Select a -> Int Source

Return the selected position, e.g.

selectPos (Sel3 poly :: Select Poly ((Int,Int,Int,Int) :-> Full Int)) = 3