[Haskell-cafe] Justification for Ord inheriting from Eq?

Robert Dockins robdockins at fastmail.fm
Fri Apr 7 09:38:23 EDT 2006


On Apr 7, 2006, at 1:36 AM, ajb at spamcop.net wrote:

> G'day all.
>
> Quoting Robert Dockins <robdockins at fastmail.fm>:
>
>> Ewwwwww! Be careful how far you depend on properties of  
>> typeclasses, and make
>> sure you document it when you do.
>
> The behaviour of NaN actually makes perfect sense when you realise  
> that
> it is Not a Number.  Things that are not numbers are incomparable with
> things that are.
>
> Yes, NaN can be of type Float.  But it's not a Float.

If you take that tack, then you have to concede that the type system  
isn't doing what it should (keeping me from having something not-a- 
float where I expect a float).  Any way you slice it, its an  
unfortunate situation.

I'd personally rather that any operation generating NaN raises an  
exception, a la divide by 0 at Int.  I think (although I'm not sure)  
that the floating point infinities play nice wrt equality and  
ordering, so getting rid of NaN would restore at least _some_  
semblance of proper algebraic behavior to the floating point  
representations.  (And the FFI already has CFloat/CDouble, so you  
should use those when you really need to actually do something with  
NaN generated by external code, and CFloat/CDobule should not be  
members of Eq and Ord).

Or at the very least, attempting to compare NaN using (==) or (<) and  
friends should raise an exception, rather than just returning broken  
results.


> Cheers,
> Andrew Bromage


Rob Dockins

Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
           -- TMBG



More information about the Haskell-Cafe mailing list