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.
Related Concepts¶
- Abstraction - Software Architecture
- Lazy Evaluation - Performance Optimization (cross-domain)