Solution (source code)

= 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.