[Haskell-cafe] Re: (flawed?) benchmark : sort

Jonathan Cast jonathanccast at fastmail.fm
Mon Mar 10 21:08:04 EDT 2008


On 10 Mar 2008, at 4:00 AM, Adrian Hey wrote:

> Neil Mitchell wrote:
>>>  2) What does it do with duplicate elements in the list? I expect  
>>> it deletes
>>>  them. To avoid this, you'd need to use something like  
>>> fromListWith, keeping
>>>  track of how many duplicates there are, and expanding at the end.
>> That would be wrong. Consider:
>> data Foo = Foo Int Int
>> instance Ord Foo where
>>     compare (Foo a _) (Foo b _) = compare a b
>
> I would consider such an Ord instance to be hopelessly broken, and I
> don't think it's the responsibility of authors of functions with Ord
> constraints in their sigs (such as sort) to consider such  
> possibilities
> or specify and control the behaviour of their behaviour for such
> instances. Trying to do this is what leads to horrors such as the  
> "left
> biasing" of Data.Map (for example).

Data.Map is implicitly using such an Ord instance behind the scenes,  
and I think it has to to maintain its own invariants.  If I take the  
`union' of two maps that take the same key to different values, I  
have to decide which value to use, even if every Ord instance  
supplied by my clients is 100% Adrian-compliant.

jcc



More information about the Haskell-Cafe mailing list