Using Ord for keys of maps and sets
Henning Thielemann
lemming at henning-thielemann.de
Mon Dec 3 08:42:11 EST 2007
On Mon, 3 Dec 2007, Yitzchak Gale wrote:
> Henning Thielemann wrote:
> > I already told about by scepticism about using Ord for keys of maps and
> > sets:
> > http://www.haskell.org/pipermail/libraries/2007-April/007411.html
>
> Yes. There are a number of different scenarios for the
> ordering that you want to use for indexing:
>
> 1. A default ordering for the type that is a natural ordering.
>
> 2. A default ordering for indexing that is not a natural
> ordering.
>
> 3. An application-specific ordering.
>
> 4. More than one ordering for the same type, determined
> statically.
>
> 5. More than one ordering for the same type, determined
> dynamically, i.e., parameterized orderings.
>
> My experience has been that all of these cases do come
> up quite often in real life.
>
> One solution would be to have Data.Map.Indexable, etc.
> as alternatives using Indexable instead of Ord, so that
> we could avoid newtype wrapping in case 2.
>
> We could allow for case 3 by not providing any default
> instances for Indexable.
This would obstruct 'start GHCi and play around' sessions, since you
cannot create a set of something on the fly. (However, GHCi could still be
adapted.)
> Or we could provide default instances in a separate module,
> Data.Indexable.Instances (or something), that you could choose whether
> or not to import.
>
> Newtype wrapping is still required in case 4, so
> Indexable doesn't add much here.
>
> We have not yet said anything helpful about case 5.
Still, later in the above thread, Johannes Waldmann throws in Local
Instances:
http://www.haskell.org/pipermail/libraries/2007-April/007416.html
More information about the Libraries
mailing list