
I wrote:
Maybe there should be a separate FloatOrd class if you want the fourth possibility of "false due to NaN" in your comparisons of floating-point numbers, so that Float/Double can be made proper members of PrimOrd.
Then there are non-total orderings such as subset relations or many lattices... which often get demoted to using `lt` and `gt` symbols. Of course, Floats are not well-behaved even in Eq. Prelude> let x = 0/0 :: Double in x == x False And there is no simple operation based on their (<), (<=)... that fulfills even the requirements for a partial order... http://en.wikipedia.org/wiki/Partially_ordered_set A newtype of them that becomes _|_ upon isNaN would make a true total order AFAIK (the infinities -at least in IEEE arithmetic- are well-behaved with respect to ordering and equalling themselves). Isaac