If the argument of function is used at least once, then lazy evaluation (in a side-effect-free language) gives same result as call by value.
Therefore, compiler can optimize such function and its call by evaluating argument before the call
We call a function strict in its argument if the function always evaluates its argument
Strictness analysis is semantic analysis that determines whether functions are strict in certain arguments
Alternative: ask users to explicitly put annotations that a function is strict
- The theory and practice of transforming call-by-need into call-by-value by Alan Mycroft (1980)