
Henk-Jan van Tuyl wrote:
In paper "Why Functional Programming Matters"[0], John Hughes shows how lazy functional programming can be used for better modularity. A more precise title for the paper would be "Why Lazy Functional Programming Matters".
The first paragraph of our paper (published 3 years ago) http://okmij.org/ftp/ftp/continuations/PPYield/index.html#introduction is as follows Lazy evaluation is regarded as one of the main reasons why functional programming matters \cite{hughes:matters-cj}. Lazy evaluation lets us write \emph{producers} and \emph{consumers} separately, whereas the two are inextricably intertwined in a call-by-value language. This separation allows a modular style of programming, in which a variety of producers, consumers, and transformers can readily be ``plugged together.'' Lazy evaluation is also an elegant implementation of a form of coroutines, suspending and resuming computations based on the demand for values, giving us memory-efficient, incremental computation `for free' \cite{McIlroy:1999:PSP:968592.968597,Bird:1984:UCP,AG-embed}. But do read the next paragraph and the rest of the paper, and other articles on the web site http://okmij.org/ftp/continuations/PPYield/index.html Our conclusion is that the modularity benefit of lazy evaluation can be held without lazy evaluation, gaining the predictability of the space and time behavior.