compare on Double

Ian Lynagh igloo at earth.li
Tue Mar 20 13:04:16 EDT 2007


On Tue, Mar 20, 2007 at 03:53:58PM +0000, Malcolm Wallace wrote:
> Ian Lynagh <igloo at earth.li> wrote:
> 
> >     (D# x) `compare` (D# y) | x <## y   = LT
> >                             | x ==## y  = EQ
> >                             | otherwise = GT
> > 
> > becomes
> > 
> >     (D# x) `compare` (D# y) | x <## y   = LT
> >                             | x ==## y  = EQ
> >                             | x >## y   = GT
> >                             | otherwise = error "Incomparable values"
> 
> I'm pretty uncomfortable with calling 'error' in this situation.  How
> about throwing an imprecise exception instead?

Doesn't error throw an imprecise exception?

We already have things like

    remInteger ia ib
     | ib == 0 = error "Prelude.Integral.rem{Integer}: divide by 0"

We could

    throw (ArithException something)

instead if that's what you mean, but I think we'd need a new constructor
for something. I'm not sure if it should be an ArithException or not.

(should remInteger above throw (ArithException DivideByZero)? We'd give
a less useful message to the developer, but have something possibly more
useful to catch. I've wished for exceptions to have a stack of locations
in the past; perhaps that should be another proposal.)


Thanks
Ian



More information about the Libraries mailing list