Comparability has very similar semantics to orderability with the following exceptions:
1. NaN is not equal to anything, including itself, and cannot be compared to anything:
equals(NaN, anything) = FALSE
compare(NaN, anything) = ERROR
2. Unlike Orderability, Comparability is limited to a single type space:
compare(type1, type2) = ERROR
Note that because of type errors for Comparability, equals(a,b) does not necessarily produce the same result
as compare(a,b) == 0. Make sure to use equals(a,b) for P.eq/neq.