Weak Head Normal FormSimon Peyton Jones to make explicit the difference between head normal form (HNF) and what graph reduction systems produce in practice. A lambda abstraction with a reducible body, e.g.
\ x . ((\ y . y+x) 2)is in WHNF but not HNF. To reduce this expression to HNF would require reduction of the lambda body:
(\ y . y+x) 2 --> 2+xReduction to WHNF avoids the name capture problem with its need for alpha conversion of an inner lambda abstraction and so is preferred in practical graph reduction systems. The same principle is often used in strict languages such as Scheme to provide call-by-name evaluation by wrapping an expression in a lambda abstraction with no arguments:
D = delay E = \ () . EThe value of the expression is obtained by applying it to the empty argument list:
force D = apply D () = apply (\ () . E) () = E(1994-10-31)