[Haskell-cafe] Laziness enhances composability: an example
Simon Richard Clarkstone
simon.clarkstone at gmail.com
Fri Jul 10 21:21:09 EDT 2009
Thomas Davie wrote:
> On 9 Jul 2009, at 14:55, Cristiano Paris wrote:
>> I'm wondering what a good example of why laziness enhances
>> composability would be.
>> I'm specifically looking for something that can't implemented in
>> Python with iterators (at least not elegantly), but can actually be
>> implemented in Haskell.
> Pretty much anything that uses "tying the knot" is very difficult to
> implement in a non-lazy language without a lot of indirection.
I disagree; mutation can work rather well instead.
One application I work on has to parse input containing items with
forward and backward references using keys into a graph of objects, a
classic tying-the-knot problem. However, we are not using a lazy
language, so have only one procedure to create or look up the object
corresponding to an item, by key. Parsing references to an item will
just store the returned address, but parsing the definition of an item
will mutate the object to fill in the data. The effect is that all the
references end up as pointers to the right objects, and the objects for
undefined items end up keeping their default values (caught by later
Situations like that make either mutation or laziness very handy, and if
one cannot imagine the "tying the knot" technique then mutation looks
like the only good way. No wonder people don't "get" pure FP! ;-)
More information about the Haskell-Cafe