<expr> ::= <name> | <func> | <appl>
<name> is an identifier (sorry, no BNF)
<func> ::= λ<name>.<body>
<body> ::= <expr>
<appl> ::= (<func> <expr>)
λx.x
x => x
function(x) { return x; }
lambda x: x
\x -> x
fun x -> x
(fn [x] x)
(lambda (x) x)
((λx.λy.λz.x (y z)) a) b
(λy.λz.a (y z)) b
λz.a (b z)
λx.x
λf.λa.(f a)
λx.λy.x
λf.λx.λy.((f y) x)
identity
apply
const
flip
fst := λx.λy.x
snd: = λx.λy.y
pair := λx.λy.λf.((f x) y)
true := λx.λy.x
false := λx.λy.y
if := λx.λy.λf.((f x) y)
zero := λf.λx.x
succ := λn.λf.λx.(f ((n f) x))
one := λf.λx.(f x)
two := λf.λx.(f (f x))
plus :=
λm.λn.λf.λx.(m (f ((n f) x)))
mult := λm.λn.λf.(m (n f))
exp := λm.λn.(n m)
λfλgλx.(f (g x))