data made
- ut of
functions
#ylj2016 @KenScambler
λλλλλ λλ λλ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λλλλ λ λ λ λλ λλ λλλλλ
data made out of - - PowerPoint PPT Presentation
data made out of functions #ylj2016 For faster @KenScambler monads!
λλλλλ λλ λλ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λλλλ λ λ λ λλ λλ λλλλλ
Diogenes of Sinope 412 – 323 BC
Diogenes of Sinope 412 – 323 BC
I’ve been using this bowl like a sucker!
Um…. what
"abcd" IF x THEN y ELSE z WHILE cond {…} [a, b, c, d] BOOL INT STRUCT { fields… } λa -> b
IF x THEN y ELSE z WHILE cond {…} [a, b, c, d] BOOL INT STRUCT { fields… } λa -> b
Strings are pretty much arrays
IF x THEN y ELSE z [a, b, c, d] BOOL INT STRUCT { fields… } λa -> b
Recursion can do loops
IF x THEN y ELSE z [a,b,c,d] BOOL INT STRUCT { fields… } λa -> b
Recursive data structures can do lists
IF x THEN y ELSE z [a,b,c,d] INT STRUCT { fields… } λa -> b
Ints can do bools
IF x THEN y ELSE z [a,b,c,d] INT STRUCT { fields… } λa -> b
[a,b,c,d] STRUCT
Alonzo Church 1903 - 1995
Alonzo Church 1903 - 1995
type pe CBool = forall forall r. r -> r -> r cT cTrue ue :: :: CBoo CBool cTrue x y = x cFals alse :: : CBo CBool
cFalse x y = y cNot
:: CBool CBool -> > CBool
cNot cb = cb cFalse cTrue cAnd nd :: :: CBool CBool -> > CBool
> CBo Bool cAnd cb1 cb2 = cb1 cb2 cFalse cOr cOr :: : CBool Bool -> > CBo CBool
> CBool
cOr cb1 cb2 = cb1 cTrue cb2
Giuseppe Peano 1858 - 1932
Giuseppe Peano 1858 - 1932
() Nat
() Nat
() Nat
type pe CNat = forall ll r. (r -> r) -> r -> r c0 c0, c c1, , c2, c 2, c3, , c4 4 :: : CN CNat c0 f z = z c1 f z = f z c2 f z = f (f z) c3 f z = f (f (f z)) c4 f z = f (f (f (f z))) cSucc ucc :: :: CNat Nat -> > CNat at cSucc cn f = f . cn f cPlus lus :: :: CNat Nat -> > CNat at -> > CNat at cPlus cn1 cn2 f = cn1 f . cn2 f cMult ult :: :: CNat Nat -> > CNat at -> > CNat at cMult cn1 cn2 = cn1 . cn2
type pe CNat = forall ll r. (r -> r) -> r -> r c0 c0, c c1, , c2, c 2, c3, , c4 4 :: : CN CNat c0 f = id c1 f = f c2 f = f . f c3 f = f . f . f c4 f = f . f . f . f cSucc ucc :: :: CNat Nat -> > CNat at cSucc cn f = f . cn f cPlus lus :: :: CNat Nat -> > CNat at -> > CNat at cPlus cn1 cn2 f = cn1 f . cn2 f cMult ult :: :: CNat Nat -> > CNat at -> > CNat at cMult cn1 cn2 = cn1 . cn2
Native ints Peano numbers Church numbers addition print O(n) O(n2) multiplication O(n) O(n) O(1) O(1)
Native ints Peano numbers Church numbers addition print O(n) O(n2) multiplication O(n) O(n) O(1) O(1)
(a r) (b r) r (a r) b r r r r
a r
fmap
fmap
fmap
fmap
fmap
fmap
fmap
fmap
fmap
fmap
λn [n+1, n*2]
λn [n+1, n*2]
λn [n+1, n*2]
fmap
λn [n+1, n*2]
λn [n+1, n*2]
fmap
λn [n+1, n*2]
fmap
λn [n+1, n*2]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
λn Wrap [Pure (n+1), Pure (n*2)]
result result result
result result result
result result result
result