[Haskell-cafe] Mystery of an Eq instance

Mike Meyer mwm at mired.org
Sat Sep 21 10:26:54 CEST 2013


On Sat, Sep 21, 2013 at 2:21 AM, Bardur Arantsson <spam at scientician.net>
wrote:
> On 2013-09-21 06:16, Mike Meyer wrote:
> >  The single biggest gotcha is that two calculations
> > we expect to be equal often aren't. As a result of this, we warn
> > people not to do equality comparison on floats.
> The Eq instance for Float violates at least one expected law of Eq:
>
>   Prelude> let nan = 0/0
>   Prelude> nan == nan
>   False

Yeah, Nan's are a whole 'nother bucket of strange.

But if violating an expected law of a class is a reason to drop it as
an instance, consider:

Prelude> e > 0
True
Prelude> 1 + e > 1
False

Of course, values "not equal when you expect them to be" breaking
equality means that they also don't order the way you expect:

Prelude> e + e + 1 > 1 + e + e
True

So, should Float's also not be an instance of Ord?

I don't think you can turn IEEE 754 floats into a well-behaved numeric
type. A wrapper around a hardware type for people who want that
performance and can deal with its quirks should provide access to
as much of the types behavior as possible, and equality comparison
is part of IEEE 754 floats.

   <mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130921/ab99f542/attachment.htm>


More information about the Haskell-Cafe mailing list