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:

# 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 function:

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

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