
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