And what about a function of two variables? Do those even exist? Simple answer: no, they don't. All right, all right, I'm kidding. They do — they're just wrapped in layers like an onion, and that concept is called currying, after Haskell Curry. Yes, that very Haskell Curry, the one the Haskell language is named after too.
Formally this is an isomorphism, that is, a bijection between two sets of functions.
On the left of the formula are functions from the pair to ; on the right, functions from to functions from to . To each two-argument function corresponds exactly one curried by the rule , and conversely — . These two passages are mutually inverse, losing and adding nothing, so the two sets of functions are simply indistinguishable.
A few examples from Haskell:
-- the type of a multi-argument function is a right-associative chain of arrows
f :: a -> b -> c -- the same as a -> (b -> c)
-- partial application: add 2 is an "under-applied" function
add :: Int -> Int -> Int
add x y = x + y
add2 :: Int -> Int
add2 = add 2
map add2 [1, 2, 3] -- [3, 4, 5]
-- curry and uncurry are the witnesses of the isomorphism
curry :: ((a, b) -> c) -> a -> b -> c
uncurry :: (a -> b -> c) -> (a, b) -> c
-- operator sections are the same partial application
(+3) :: Num a => a -> a
(*2) :: Num a => a -> a