Skip to content

Lazy Evaluation

Deferring computation until its result is actually needed enables working with infinite data structures, avoids unnecessary work, and separates the description of computation from its execution.

Tension Addressed

Flexibility vs. Safety; Abstraction vs. Concreteness

Recognizable As

Lazy sequences, generators, thunks, call-by-need, streams, virtual scrolling, pagination

Canonical Sources

Peter Henderson, "Lazy Memo Functions" (1976); John Hughes, "Why Functional Programming Matters" (1989); Haskell language design

Transfers To

Data Processing (stream processing), UI (virtual lists), Database Queries (query planning), Build Systems (incremental computation)

Laziness enables modular program construction by separating generation from consumption - you can generate infinite possibilities and select only what you need.