<compiler> An algorithm
which turns a term into a function of some variable.
The result of using bracket abstraction on T with respect to variable v, written as [v]T, is a term containing no occurrences of v and denoting a function f such that f v = T.
This defines the function f = (\ v . T).
Using bracket abstraction and currying
we can define a language without bound variable
s in which the only operation is monadic