# Currying

Lambda calculus naturally supports currying -- that is, only *partially*
applying a function. In fact *any* function can be applied with *any*
amount of arguments!

In bruijn, currying is a great way to make functions even more elegant.

For example, take the negation function:

``` bruijn
# subtracts argument from zero
-‣ [(+0) - 0] ⧗ Number → Number

# equivalent curried version
-‣ sub (+0)
```

Currying is also very useful for higher-order functions.

Multiplying values in a list by partially applying the `mul`{.bruijn}
function:

``` bruijn
# doubles numbers in a list
double-list [0 <$> (mul (+2))] ⧗ (List Number) → (List Number)

:test (double-list ((+1) : {}(+2))) ((+2) : {}(+4))
```