30 Jul
2003
30 Jul
'03
12:40 p.m.
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
8430
Age (days ago)
8430
Last active (days ago)
0 comments
1 participants
participants (1)
-
Simon Marlow