= Solution
A <strict function> satisfies \b[$f(\bot)=\bot$], where $\bot$ is the <bottom value> representing an undefined or nonterminating computation. This is a semantic implication: obtaining a defined result requires enough definedness of the argument. It does not prescribe an evaluation order or say that every component of a structured argument is evaluated.<Haskell 2010 Language Report>[§3.1, Errors, and §6.2, Strict Evaluation]{ref}
For example, in <Haskell>,
``
f :: a -> b
f _ = undefined
``
is strict, since every result is $\bot$, but never needs to inspect its argument. Moreover, <lazy evaluation> may leave an entire application unevaluated when its result is unused. Strictness is therefore different from the operational statement that an argument is evaluated on every call.
Back to article page