[Haskell-cafe] Justification for Ord inheriting from Eq?
David Menendez
zednenem at psualum.com
Fri Apr 7 19:09:02 EDT 2006
Robert Dockins writes:
> On Thursday 06 April 2006 06:44 pm, John Meacham wrote:
> > On Thu, Apr 06, 2006 at 10:52:52PM +0100, Brian Hulley wrote:
>
> [snip a question about Eq and Ord classes]
>
> > well, there are a few reasons you would want to use inheritance in
> > haskell, some good, some bad.
> >
> > 1. one really does logically derive from the other, Eq and Ord are
> > like this, the rules of Eq says it must be an equivalance relation
> > and that Ord defines a total order over that equivalance relation.
> > this is a good thing, as it lets you write code that depends on
> > these properties.
>
> <PUBLIC SERVICE ANNOUNCEMENT>
>
> Many of you probably know this already, but for those who might not
> know:
>
> Prelude> let x = read "NaN" :: Float
> Prelude> x == x
> False
> Prelude> x == 0
> False
> Prelude> 0 < x
> False
> Prelude> x < 0
> False
>
> Ewwwwww! Be careful how far you depend on properties of typeclasses,
> and make sure you document it when you do.
It's worse than that.
Prelude> let x = read "NaN" :: Float
Prelude> compare x x
GT
Prelude> x > x
False
So far as I can tell, report does not actualy *require* that |x > y| iff
|compare x y == GT|, but this is an unfortunate inconsistency.
--
David Menendez <zednenem at psualum.com> | "In this house, we obey the laws
<http://www.eyrie.org/~zednenem> | of thermodynamics!"
More information about the Haskell-Cafe
mailing list