[Haskell-cafe] Re: Does laziness make big difference?
peteg42 at gmail.com
Fri Feb 16 01:54:00 EST 2007
Roughly, I'd say you can fudge laziness in data structures in a
strict language without too much bother. (I don't have much
experience with this, but the existence of a streams library for
OCaml is the sort of thing I mean. There are plenty of papers on co-
iterative streams and suchlike that show the general pattern.)
If you wish to add control structures you would need to use the lazy
keyword a lot, e.g.:
if cond then *lazy* S1 else *lazy* S2
and for more complicated structures it's not going to be always clear
what needs to be suspended. Laziness is a conservative default here.
(If you want to write an EDSL in a non-lazy language, you'll need to
use some kind of preprocessor / macros / ... - in other words, a two-
level language - or do thunking by hand, as above, or live with doing
too much evaluation.)
One way to gauge how useful laziness really is might be to look
through big ML projects and see how often they introduce thunks
manually. A thunk there is usually something like "fn () => ..."
IIRC. Also IIRC, Concurrent ML is full of them.
Dare I say the tradeoff is between a relatively simple operational
model (so you can judge space and time usage easily) and semantic
simplicity (e.g. the beta rule is unrestricted, easing program
More information about the Haskell-Cafe