Back in October'06 Carlos Pita sent a message to this list:

Currently I'm trying to grasp haskell exception handling and although
I find it mostly clear I'm a bit confused regarding the lack of a
throwDynIO action "paralelling" throwIO, as there are dynamic variants
for the other throw functions:

throwDyn  - throw
throwDynTo - throwTo

I understand that the same effect could be conjured up by

throwIO (DynException (...)))

magic. But the lack of symmetry still disturbes me. Am I missing something?

As far as I can tell, his question was left unanswered. As another Haskell newcomer (crossing over from the OCaml world), I found the absence of throwDynIO weird as well - as far as I understand things, throwing an error in the IO monad seems like a safer thing to do (as I'd know precisely when to expect it to be raised) than throwing it from a pure code and then relying on the "imprecise exceptions" mechanism to get it right.

Looking at the ghc-6.8.2/libraries/base/Control/Exception.hs in the GHC source code, I see the following definitions:

throw = unsafePerformIO . throwIO
throwDyn exception = throw (DynException (toDyn exception))

so I guess I can get define throwDynIO myself by "taking back" the unsafePerformIO:

throwDynIO exception = throwIO (DynException (toDyn exception))

but I am still wondering whether the library is simply incomplete here, or whether there is some reason for not defining/using throwDynIO.

Thanks in advance for any clarifications!

Aleksey
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to