michael@0: // Church-Peano integers michael@0: michael@0: var Zero = f => x => x; michael@0: var Succ = n => f => x => n(f)(f(x)); michael@0: var Add = a => b => f => x => a(f)(b(f)(x)); michael@0: var Mul = a => b => f => x => a(b(f))(x); michael@0: var Exp = a => b => b(a); michael@0: michael@0: var n = f => f(k => k + 1)(0); michael@0: michael@0: assertEq(n(Zero), 0); michael@0: assertEq(n(Succ(Zero)), 1); michael@0: assertEq(n(Succ(Succ(Zero))), 2); michael@0: michael@0: var Three = Succ(Succ(Succ(Zero))); michael@0: var Five = Succ(Succ(Three)); michael@0: assertEq(n(Add(Three)(Five)), 8); michael@0: assertEq(n(Mul(Three)(Five)), 15); michael@0: assertEq(n(Exp(Three)(Five)), 243);