Evaluator
<theory> Geoff Burn defines evaluators E0, E1, E2 and E3 which when applied to an expression, reduce it to varying degrees. E0 does no evaluation, E1 it evaluates to
weak head normal form (WHNF), E2 evaluates the structure of a list, i.e. it evaluates it either to NIL or evaluates it to a CONS and then applies E2 to the second argument of the CONS.
E3 evaluates the structure of a list and evaluates each element of the list to
WHNF.
This concept can be extended to data structures other than lists and forms the basis of the evaluation transformer style of strictness analysis.