[Haskell-cafe] How odd...
Ian Lynagh
igloo at earth.li
Sat Aug 4 14:41:39 EDT 2007
On Sat, Aug 04, 2007 at 04:38:08PM +0100, Andrew Coppin wrote:
>
> BTW, I recently had some code like this:
>
> foo x
> | x < 0 = ...
> | x == 0 = ...
> | x > 0 = ...
>
> I was most perplexed when I got a "non-exhaustive patterns" exception...
> It turns out there was a NaN in there. I forget about that.
If you use guards then you can get non-exhaustive pattern warnings
anyway, e.g.:
myNot x
| x == True = False
| x == False = True
gives
Warning: Pattern match(es) are non-exhaustive
In the definition of `myNot': Patterns not matched: _
as it is (in general) undecidable whether all patterns are covered.
> >While working through this I also came across the following case which
> >technically is a bug:
> >
> >> 0 ** 0
> >1.0
> >
> >> exp (log 0 * 0)
> >NaN
> >
> >I suspect that GHCi is using a built-in exponentiation operator that
> >doesn't quite conform to the standard in this case.
Hmm, according to the report the Floating class has a default method
x ** y = exp (log x * y)
but the Double instance is just
instance Floating Double where ...
so could define something different.
6.4.3 says
0**y is undefined.
Thanks
Ian
More information about the Haskell-Cafe
mailing list