(* Carsten Schuermann *) (* Currying *) let fun curry (f : 'a -> 'b -> 'c) (p : 'a * 'b) = let val (x, y) = p in f x y end fun plus (x: int) (y: int) = x + y fun uncurry (f : ('a * 'b) -> 'c) = fn (x:'a) => fn (y:'b) => f (x, y) in (uncurry (curry plus)) 3 5 end