Currying is an operation on functions. A functional programming language lets you specify such operations. Here's how to curry the first and second arguments of any binary function in Scheme:

(define (curry-2-arg-1st f x)
(lambda (y) (f x y)))
(define (curry-2-arg-2nd f x)
(lambda (y) (f y x)))

In most pure functional languages, functions are always curried. So the type of a

`k`-arg

function is "function taking

*one* argument and returning a

`k`-1-arg function". Currying the first and second arguments (of

*any* function of at least that many arguments!) is as simple as saying

let curry_fst f x = f x;;
let curry_snd f x = \y.(f y x)

in a contrived

syntax where "

\" means

lambda, and other things are a bit like

ML.