Abstract Sequences, was: Heirarchical name space allocation
Robert Will
robertw at stud.tu-ilmenau.de
Thu Apr 15 11:49:48 EDT 2004
On Fri, 2 Apr 2004, Christian Maeder wrote:
>
> How many implemenations to you want? Eventually I suspect about 3
> implemenations to be useful.
Dessy currently has (and none of them is useless):
Streams (the only possible lazy implementation)
Real-time Queues
Deques
Write-only Sequences (like the OrdList)
Democratic Sequences (the default)
> I don't know if the size of a class matters, but some code duplication
> could be avoided by a minimal class (empty, isEmpty, cons, head, tail)
> as well.
With these primitives you would just mimick the concrete [] data type,
making efficient implementations of almost all other functions impossible.
As I argue in
http://www.stud.tu-ilmenau.de/~robertw/dessy/fun/democratic/
a "core" consisting of (concat front back) efficiently implemented (i.e.
logN each) will permit every other function to be implemented in O(logN).
However, most implementations will also provide constant-time (is_empty
size first last), and some implementations will also provide constant-time
(add_first add_last but_first but_last).
Furthermore we need of course 'fold', but also many implementations can
implement (apply filter) faster (albeit only by a constant factor) than
the default implementation:
apply f = fold empty (single . f) (<+>)
filter p = fold empty (\x -> if p x then single x else empty) (<+>)
Thus, a minimal class will not be small. But I already explained last
time, that this is really no problem.
Robert
More information about the Libraries
mailing list