Strictness Analysis

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