Lists representations (was: What does FP do well? (was ...))
Jerzy Karczmarczuk
karczma@info.unicaen.fr
Sat, 01 Jun 2002 11:29:03 +0200
[I removed private addresses from the header, and I invite cordially
all you folks *not* to send your posting simultaneously to the Haskell
list and to the guy who reads the list as well, otherwise the exchange
would never take place...]
Just 3 centimes [former French currency, survived ; nobody will say
euro-cents here...]
Claus Reinke:
...
> But the moral for the current discussion: a more intelligent list
> representation could have substantially more benefits for the
> average Haskell program than any compiler optimization twiddling,
> and I'd really like to see someone (PhD student?) investigating that
> topic seriously, as the answers are unlikely to be obvious.
>
> The representation chosen in the reduction systems could be a first
> hint, but as Jerzy points out, things may be more complicated in the
> context of Haskell. For comparison, Haskell array performance was
> somewhere between non-existent and terrible in those days (another
> clear win for both the compiled and the interpreted reduction
> systems) and has only recently improved somewhat. That needs to
> continue and, please, someone do the same for lists.
...
Alastair Reid:
...
> Zhong's work [1] was in the context of a strict language (SML) which
> meant that you can know how long a list is as you are building it so
> you can use the Cons4 cells a lot.
>
> Cordy's work [2] was in the context of a lazy language (Haskell) which
> meant that you usually don't know the length of a list (if it is even
> finite) as you are building it. This requires a bit of cunningness to
> overcome.
>
> IIRC, the key part of that cunningness was that Cordy does the most
> interesting stuff near the tail of the list while Zhong does the most
> interesting things near the head of the list.
...
Maestros,
I know you know all that, but some of the new readers migh have some
doubts since for years and years people pose the same question: why
all this damned lazy business is about?! <<Cui bono>>?. The laziness
seems to be such a nuisance that it seems incredible that it is still
there.
So, please recall the following:
In a lazy program it is not an issue the fact that "I don't know"
the length of my list.
I DON'T WANT TO KNOW!!!
The very notion of length is or may be spurious, it depends on the
list consumer, not on its creator.
Lazy structures may - in my workbenches they always do - represent
iterative, dynamic, sometimes wildly interacting processes.
They may emulate backtracking.
Lazy continuations may be used to implement coroutines, dataflow
control structures, etc. etc.
===
OK, for me the moral is now - I wouldn't say clean [pun intended], but
quite clear:
Strict data structures in Haskell should belong to different types than
the co-recursive ones. With different implementation, in particular,
for arrays.
Jerzy Karczmarczuk