In programming language theory, lazy evaluation, or call-by-need,[1] is an evaluation strategy which delays the evaluation of an expression until its value is needed (non-strict evaluation) and which also avoids repeated evaluations (by the use of sharing).[2][3] The benefits of lazy evaluation include: The ability to define control flow (structures) as abstractions instead of primitives. The abil