[Haskell-cafe] Re: Control.Exceptions and MonadIO
Brian Hulley
brianh at metamilk.com
Sun Apr 23 21:02:43 EDT 2006
I've started work on a module to replace Control.Exception by wrapping all
the original Control.Exception functions in more general monadic functions
and using two type classes as follows:
class MonadIO m => MonadException m where
catch :: m a -> (Exception -> m a) -> m a
catchDyn :: Typeable exception => m a -> (exception -> m a) -> m a
catchJust :: (Exception -> Maybe b) -> m a -> (b -> m a) -> m a
try :: m a -> m (Either Exception a)
tryJust :: (Exception -> Maybe b) -> m a -> m (Either b a)
and
class MonadIO m => MonadIOU m where
getUnliftIO :: m (m a -> IO a)
All the other functions can be implemented just using MonadIO or MonadIOU or
MonadException in place of IO (depending on the function eg bracket needs
MonadIOU) - just in case anyone is interested.
As far as I can tell this seems to be the one and only way to do it with the
minimal sized classes but I'd be interested if anyone has found a better
way.
Regards, Brian.
More information about the Haskell-Cafe
mailing list