Difference between revisions of "Weak head normal form"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
− | An expression is in weak head normal form, |
+ | An expression is in weak head normal form, if it is either: |
* a constructor (eventually applied to arguments) like True, Just (square 42) or (:) 1 |
* a constructor (eventually applied to arguments) like True, Just (square 42) or (:) 1 |
||
* a built-in function applied to too few arguments (perhaps none) like (+) 2 or sqrt. |
* a built-in function applied to too few arguments (perhaps none) like (+) 2 or sqrt. |
Revision as of 23:00, 18 February 2012
An expression is in weak head normal form, if it is either:
- a constructor (eventually applied to arguments) like True, Just (square 42) or (:) 1
- a built-in function applied to too few arguments (perhaps none) like (+) 2 or sqrt.
- or a lambda abstraction \x -> expression.
Note that the arguments do not themselves have to be fully evaluated for an expression to be in weak head normal form; thus, while (square 42) can be reduced to (42 * 42), which can itself be reduced to a normal form of 1764, Just (square 42) is WHNF without further evaluation. Similarly, (+) (2 * 3 * 4) is WHNF, even though (2 * 3 * 4) could be reduced to the normal form 24.