On 2010-04-15 06:18, Nick Bowler wrote:
Your definitions seem very strange, because according to this, the
functions
f :: Double -> Double
f x = 1/x
and
g :: Double -> Double
g x = 1/x
are not equal, since (-0.0 == 0.0) yet f (-0.0) /= g (0.0).
There's an impedance mismatch between the IEEE notion of equality (under
which -0.0 == 0.0), and the Haskell notion of equality (where we'd want
x == y to imply f x == f y).
A Haskellish solution would be to implement Eq so that it compares the
bits of the representations of Float and Double, thus -0.0 /= 0.0, NaN
== NaN (if it's the same NaN). But this might surprise people expecting
IEEE equality, which is probably almost everyone using Float or Double.
--
Ashley Yakeley
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe