Heirarchical name space allocation /Trees

Ross Paterson ross at soi.city.ac.uk
Wed Mar 31 16:48:14 EST 2004


On Wed, Mar 31, 2004 at 04:42:29PM +0200, Christian Maeder wrote:
> Ross Paterson wrote:
> >I'd like to suggest (again) treating sequences differently from the rest,
> >and that they should be defined by a class:
> >* the class fits within Haskell 98, because sequences have only one
> >  parameter, and it's unconstrained.
> >* polymorphism is likely to be more useful with sequences because of
> >  the wide range of implementations suited to different purposes.
> >* polymorphism lets you do general adaptors, like Edison's SizedSeq
> >  (adding a size) and RevSeq (presenting a reversed view).
> 
> I admit, that supplying further modules for SizedSeq and RevSeq would 
> involve some code duplication. (If several implementations of sequences 
> are used simultaneously qualification is required.)

Just defining a standard set of operations (filter, dropWhile, etc, etc)
will involve lots of duplication.  Most of these will involve converting
to lists, doing the list thing and converting back.  But in a class you
supply a default definition.

> But maybe you could elaborate the advantages of a class that you suggest 
> in more detail. For generic algorithms with sequences, I would suspect 
> smaller classes, e.g. like Monoid, to be more appropriate.

All the usual advantages of abstraction.
I thought SizedSeq was pretty compelling:

	data Sized s a = N !Int (s a)
	instance Sequence s => Sequence (Sized s) where ...

One instance gets you N new sequences.

Monoid isn't quite enough (no way to add elements, for one thing).

> where can I download the actual code of edison?
> http://www.haskell.org/ghc/docs/edison/

The original is in the fptools CVS repository at hslibs/data/edison
and also in a GHC source tarball.  There's a slightly changed version at
	:pserver:anonymous at cvs.hfl.sourceforge.net:/cvsroot/hfl


More information about the Libraries mailing list