! various higher-order functions ! reversed function application. e.g. x.f.g.h = h(g(f(x))) infix . : 9; dec . : alpha # (alpha -> beta) -> beta; --- x.f <= f(x); ! curry - turn a binary function into a function producing a function. ! (Named after Haskell B. Curry) ! e.g. curry f x y = f(x, y) dec curry : (alpha # beta -> gamma) -> alpha -> beta -> gamma; --- curry f <= lambda x => lambda y => f(x, y); dec uncurry : (alpha -> beta -> gamma) -> alpha # beta -> gamma; --- uncurry f (x, y) <= f x y; dec mkpair : alpha -> beta -> alpha # beta; --- mkpair x y <= (x, y); ! const c = a function mapping everything to c. dec const : alpha -> beta -> alpha; --- const x y <= x; ! times n f = f composed n times (Church numerals) dec times : num -> (alpha -> alpha) -> alpha -> alpha; --- times 0 f <= id; --- times (succ n) f <= f o times n f;