Left-bias and non-structural equality.
Arie Peterson
ariep at xs4all.nl
Wed Jan 4 13:46:08 EST 2006
Christian Maeder wrote:
>
>> 2) Eq e is some equivalence relation, such as in Christian's example
>> above.
>
> This is more often the case than one might like. Even for the type Set
> itself Eq/Ord can be observed differently by the debugging function
> showTree.
Yes. Let me refine where I picture the border of Good Use of Eq. Eq should
implement *conceptual* (semantic) equality. Haskell objects are often not
in one-to-one correspondence with the conceptual object they represent:
there may be many trees that represent the same set. When you're defining
a set, you consider those trees equal and that should be reflected in your
Eq instance.
>
>> users should
>> always use a Map instead (e.g. Map Symbol Position, with 'real equality'
>> on Symbol).
>
> if I have:
>
> data Symbol = Symbol String Position
> instance Eq/Ord Symbol -- compare String only
>
> I'd rather like "Map Symbol Position" than "Map String Position" if I
> want to be more explicit about positions.
In this case I would go for something like
] data Symbol = Symbol String
] instance Eq/Ord Symbol
so you *can* say "Map Symbol Position". IMO this better reflects what a
symbol 'is'. One might want to add
] type Occurrence = (Symbol,Position)
or even
] type Occurrence = MapElement Symbol Position
> Controlled bias is simply an additional benefit of the Data.Set library
> implementation that you must not and are not encouraged to use (but that
> may be helpful if you know what you are doing),
Agreed.
Greetings,
Arie
More information about the Libraries
mailing list