Algebraic Data Types

https://bartoszmilewski.com/2015/01/13/simple-algebraic-data-types/ https://codewords.recurse.com/issues/three/algebra-and-calculus-of-algebraic-data-types

0 β‰… Void 1 β‰… () 2 β‰… Bool 3 β‰… Ordering (+) sum-type (Γ—) product a type-var L type-ctor C data-ctor

  • product: a Γ— b β‰… Pair a b β‰… (a,b) β‰… And a b β‰… a ∧ b

  • sumtype: a + b β‰… Either a b β‰… (a|b) β‰… Or a b β‰… a ∨ b

a -> b -> c ≑ a -> (b -> c)

a -> b β‰… bᡃ

  • Pairs

(a, b) -> c β‰… a -> b -> c CURRY/UNCURRY

a -> (b * c) β‰… (a -> b * a -> c) a -> (b, c) β‰… (a -> b, a -> c)

a -> (b + c) β‰… (a -> b + a -> c)

  • Arithmetics

(a b)Λ’ = aΛ’ bΛ’ (a b) ^ n = a ^ n b ^ n

m1 a b n = (a ^ n) * (b ^ n) m1 :: (Integral b, Num a) => a -> a -> b -> a

m2 a b n = (a * b) ^ n m2 :: (Integral b, Num a) => a -> a -> b -> a

Last updated