Algebraic notation for algebraic data types
Algebra | Datatype | ||
0 | data T | ||
1 | data T = T | ||
2 | data T = L | R | |
a | |||
+ | data T a b = L a | R b | |
* | (a,b) | ||
^ | a -> b = bᵃ | ||
-------------- | -------------------------------------------------------------------- | ||
a + a | data T a = L a | R a | |
a + b | data T a b = L a | R b | |
a * a | (a,a) | ||
a * b | (a,b) | ||
a * b | a×b, a*b, ab, (a,b), Pair a b = (a,b) | ||
a + b | a+b, a | b, Either a b = Left a | Right b |
b ^ a | bᵃ ≅ (a -> b) | ||
-------------- | -------------------------------------------------------------------- | ||
1 + a | data T a = N | C a, Maybe a | |
1 * a | ((), a) ≅ a | ||
0 + a | (Void | a) ≅ a | |
-------------- | -------------------------------------------------------------------- | ||
1 + a² | data T a = Leaf | C (T a) (T a) | |
1 + a³ | data T a = Leaf | C a (T a) (T a) | |
a + a² | data T a = Leaf a | C (T a) (T a) | |
a + a³ | data T a = Leaf a | C a (T a) (T a) | |
1 + a + a² | data T a = Leaf | B a | C (T a) (T a) |
1 + a + a³ | data T a = Leaf | B a | C a (T a) (T a) |
-------------- | -------------------------------------------------------------------- |
List a = Leaf | Node a (List a) La = 1 + a La La = 1 + a a La = 1 + a²
Tree a = Leaf | Node a (Tree a) (Tree a) Ta = 1 + a Ta Ta Ta = 1 + a a a Ta = 1 + a³
1 + 1 ≅ 1 * 2 ≅ 2 Bool = (Void, Bool)
Last updated