John HugheS' S optimiSation of lambda lifting to give {full lazineSS}. {Maximal free expreSSion}S 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. E.g. f = x . ( y . (+) (Sqrt x) y) ((+) (Sqrt x)) iS a maximal free expreSSion in ( y . (+) (Sqrt x) y) So thiS inner abStraction iS replaced with ( g . y . g y) ((+) (Sqrt x)) Now, if a partial application of f iSShared, the reSult of evaluating (Sqrt x) will alSo be Shared rather than re-evaluated on each application of f. AS Chin noteS, the Same benefit could be achieved without introducing the new higher-order function, g, if we juSt extracted out (Sqrt x). ThiS iSSimilar to the code motion optimiSation in procedural languageS where conStant expreSSionS are moved outSide a loop or procedure. (1994-12-01)