Robert Will wrote:

Now I would like to have Collection to be a superclass of Map yielding the
following typing

    reduce :: (Map map a b) =>
              ((a, b) -> c) -> c
              -> map a b -> c

Note that in an OO programming language with generic classes (which is in
general much less expressive than real polymorphism), I can write

class MAP[A, B] inherit COLLECTION[TUPLE[A, B]]

which has exactly the desired effect (and that's what I do in the
imperative version of my little library).

There seems to be no direct way to achieve the same thing with Haskell
type classes (or any extension I'm aware of).  Here is a quesion for the
most creative of thinkers: which is the design (in proper Haskell or a
wide-spread extension) possibly include much intermediate type classes and
other stuff, that comes nearest to my desire?

I don't know if I qualify as the most creative of thinkers, but I have a small library of ADSs that you may want to look at, it's at


http://www.dtek.chalmers.se/~d00nibro/algfk/

I recall having much the same problem as you did, my solution was to make maps (or Assoc as I call them) depend on tuple types, i.e. (somewhat simplified):

class (Collection c (k,v), Eq k) => Assoc c k v where
 lookup :: k -> c (k,v) -> v
 [...many more member functions here...]

This means that the type constructors for maps and collections have the same kind (* -> *), which makes it possible for me to say that an Assoc is actually also a Collection. A lot more info to be found off the link.

I believe this question to be important and profound.  (We shouldn't
make our functional designs more different from the OO ones, than they
need to be.)  If I err, someone will tell me :->

No need to recreate all the stupid things the OO world has come up with, better to do it correctly right away... ;)


/Niklas Broberg, d00nibro[at]dtek.chalmers.se

_________________________________________________________________
The new MSN 8: advanced junk mail protection and 2 months FREE* http://join.msn.com/?page=features/junkmail


_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to