FiniteMap: modifyFM
Hal Daume III
hdaume@ISI.EDU
Wed, 19 Jun 2002 11:16:04 -0700 (PDT)
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