λx.x, λxy.x, λxy.y, etc.
Take for example the term λxy.y, which is really shorthand for λx.λy.y:
FV(λx.λy.y) = FV(λy.y) − {x} = FV(y) − {y} − {x} = {y} − {y} − {x} = Ø.
The opposite of a combinator – any expression that uses free variables, is called a closure. Even though the meaning of the term is slightly different in different contexts, the idea is basically the same:
Examining the term λx.(f x), we have the free variables FV(λx.f x) …
= FV(f x) − {x} = FV(f) ∪ FV(x) − {x} = {f} ∪ {x} − {x} = {f, x} − {x}
= {f}.
= {f}.
In Haskell, the definition for a function, func:
func f = \x -> f x… uses the variable f, bound outside of the abstraction. It is therefore a closure.