Weak Head Normal Form
<reduction, lambda calculus> (WHNF) A lambda expression
is in weak head normal form (WHNF) if it is a head normal form
(HNF) or any lambda abstraction
I.e. the top level is not a redex
The term was coined by Simon 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
Reduction 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
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 = \ () . E
The value of the expression is obtained by applying it to the empty argument list:
force D = apply D () = apply (\ () . E) () = E