Fully lazy lambda lifting

John Hughes's optimisation of lambda lifting to give full laziness. Maximal free expressions are shared to minimise the amount of recalculation. Each inner sub-expression is replaced by a function of its maximal free expressions (expressions not containing any bound variable) applied to those expressions. This is similar to the code motion optimisation in procedural languages where constant expressions are moved outside a loop or procedure.

Free Online Dictionary of Computing