> just out of curiosity, which is the proper idiom?
> 
> trace a  = r <- catch a (\e -> putStr "exceptional\n" >> throw e)
> trace a  = r <- catch a (\e -> putStr "exceptional\n" >> ioError e)
> 
> I am worried that one might subtly change the semantics of an 
> execption
> depending on how it was originally thrown... but i am uncertain how.
> probably some obscure case involving bottoms. But to be on the safe
> side, thought I'd ask.

The second is more correct, if you're using Prelude.catch.  If you're
using Control.Exception.catch, then you want throwIO instead of ioError.

The difference between throw and ioError is this:

  seq (throw e)   E  ==  throw e
  seq (ioError e) E  ==  E

Cheers,
        Simon

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to