Because the Exception datatype isn't extendible, we added an
interface for throwing and catching exceptions of type Dynamic
(see Section
Dynamic), which allows
exception values of any type in the Typeable class to be thrown
and caught.
throwDyn :: Typeable exception => exception -> b
catchDyn :: Typeable exception => IO a -> (exception -> IO a) -> IO a
The catchDyn function only catches exceptions of the required
type; all other exceptions are re-thrown as with catchIO and
friends above.