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
Was this helpful?