[Haskell-cafe] instance Enum Double considered not entirely great?

Casey McCann cam at uptoisomorphism.net
Wed Sep 21 15:57:22 CEST 2011


On Tue, Sep 20, 2011 at 11:47 PM, Richard O'Keefe <ok at cs.otago.ac.nz> wrote:
>
> On 21/09/2011, at 2:18 PM, Casey McCann wrote:
>>
>> I still don't see why it makes sense to add separate IEEE comparisons
>> instead of just adding a standard partial order class, though.
>
> In any mathematical partial order, we expect
>        x `le` x
> to be a law.  But in IEEE arithmetic, if x is a NaN, x `le` x is
> false.  I don't see how to reconcile these.

Ah, true. There is an obvious way to reconcile this that almost
suffices, and is what I'd had in mind--simply declare that, just as
positive and negative zero are distinct values but identified with
each other by the ordering, let NaN be "disidentified" with itself.
Essentially this treats NaN as representing an unbounded collection of
distinct, but indistinguishable and incomparable, values, where you
never end up getting the same one twice. This interpretation is
self-consistent so long as the expressions being compared are distinct
to begin with, but now that you point it out explicitly I realize it
not only can't be justified when comparing syntactically identical
terms, but that given equivalent expressions it would imply that a
pure function gives different results each time, which is not in any
way a satisfactory result of something that's trying to *improve* the
semantics involved!

So that's a bust. Bother. Specialized comparisons providing IEEE
semantics seems the best option after all, then. I'd still like to see
a standard partial order type class, but apparently it wouldn't help
in this case.

- C.



More information about the Haskell-Cafe mailing list