PartialEq and is_nan


#1

I was thinking about how NAN is responsible for the existence of the PartialEq. Floating point types are already providing a is_nan method. Now wouldn’t it make sense to have some is_unequatable(&self) -> bool method directly in the trait PartialEq to identify values that are different from themselves? Of course x != x is always possible but it’s not that readable and the raison d’etre of is_nan methods is typically to avoid this kind of awkward comparison.


#2

There’s more than just NAN, though, so I’m unsure how helpful it’d be generically.

Imagine an enum Either<TL,TR> { Left(TL), Right(TR) }. That should be only PartialEq even if TL:Eq and TR:Eq because the two sides are incomparable: Left(0) != Right("A") even though Left(0) == Left(0) and Right("A") == Right("A").


#3

I’m afraid I don’t understand your point. If both TL and TR are Eq your enum can perfectly be Eq. An “unequatable” value would be a value that is not equal to itself (and applying axioms in the doc not equal to any value of the type).


#4

My apologies; you’re absolutely right. I was thinking PartialOrd (!(Left(0) < Right("A")) && !(Left(0) > Right("A")) && !(Left(0) == Right("A"))), not PartialEq.