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