Jonathan Cast wrote:
Xiao-Yong Jin wrote:
> > Xiao-Yong Jin wrote:
> > > So I have another question.  Is the following function safe
> > > and legitimate?
> > >
> > >> safeDiv :: (Exception e, Integral a) =>
> > >>            a -> a -> Either e a
> > >> safeDiv x y = unsafePerformIO . try . evaluate $ div x y
>
>> safeDiv' :: (Exception e, Integral a) =>
>>             a -> a -> Either e a
>> safeDiv' _ 0 = Left e
>> safeDiv' x y = Right $ div x y

[...]
Other than that, I think the imprecise exceptions paper guarantees that
these two functions are equivalent (albeit unwisely: see below).

I don't think so. The evaluation of x and y may throw errors before we get around to div.

* safeDiv' will evaluate y (to pattern match against 0) and may return an error, e, whereas safeDiv will return Left e if div is strict in y.

* safeDiv' postpones evaluating x and so may return Right e, whereas safeDiv will return Left e if div is strict in x.


--
Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to