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.

# PartialEq and is_nan

**burakumin**#1

**scottmcm**#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")`

.

**burakumin**#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).

**scottmcm**#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.