
Hi, On Wed, 19 Jun 2002, Simon Marlow wrote:
There have been lots of proposals for collection classes over the years, and no single one stands out as an obvious choice. However, I don't think we should stop looking - this is arguably one of the most important pieces still missing from the libraries, and the longer we go on without a good framework for collections, the harder it will be to add one. So get designing!
I am definately in favor of getting a good collections library in the hierarchical libs. I am more in favor of that than having the *correct* one in (if such a thing actually exists). So if the choice is between having a 98% good one and none at all, I vote strongly for the former (fwiw). That said, I'm in favor of modelling such a collections library after the one found in Java or C# (which are virtually identical). There are some things I don't like in there (for instance, I don't think elements in a collection shoudl necessairly we instances of Eq), but all in all, I think it's a good set up. ----moving away from the likely---- I believe John Hughes' proposal about the wfd class needs to be done to do collections correctly (but see my first comment). I also believe we need existential quantificiation on function types to do collections correctly; otherwise we end up with ridiculously complex functional dependencies. For instance, supposing there's a Map class (as in HashMaps, FiniteMaps, etc...) along the lines of: class Map m a b where lookup :: m a b -> a -> Maybe b setValue :: m a b -> a -> b -> m a b ... suppose we want a function to return the keys and elements. one option (bad, imo) is to return this as a list. What we want is something like: class Map m a b where ... keys :: exists s . Set s a => m a b -> s a vals :: exists c . Collection c a => m a b -> c b Of course this isn't possible. We could have: class (Set s a, Collection c a) => Map m a b s c | m -> s, c where ... keys :: m a b -> s a vals :: m a b -> c b but I think we can all agree this is ugly. anyway, I'm sure this won't happen, but I think it's something to keep in mind... - Hal