-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | ExceptT, but uses IO instead of Either
--
-- Please see the README on Github at
-- https://github.com/parsonsmatt/exceptiot#readme
@package exceptiot
@version 0.0.1.0
module Control.Monad.Except.Catch
-- | This type is useful for translating a MonadError constraint
-- into MonadCatch. This type does not have an Either
-- return, which means we can provide a MonadUnliftIO instance.
newtype ExceptCatchT e m a
ExceptCatchT :: m a -> ExceptCatchT e m a
[unsafeRunExceptCatchT] :: ExceptCatchT e m a -> m a
-- | Run an ExceptCatchT action. This will catch any thrown
-- e exceptions, regardless of whether you used throwM or
-- throwError.
--
-- Any exception that is not mentioned in e will be thrown -
-- this does not catch all exceptions!
runExceptCatchT :: (Exception e, MonadCatch m) => ExceptCatchT e m a -> m (Either e a)
-- | Like modifyError, but it selects the ExceptCatchT
-- instance for IO exceptions instead of the ExceptT
-- instance with an Either error.
modifyError :: (Exception e, MonadCatch m, MonadError e' m) => (e -> e') -> ExceptCatchT e m a -> m a
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.IO.Unlift.MonadUnliftIO m => Control.Monad.IO.Unlift.MonadUnliftIO (Control.Monad.Except.Catch.ExceptCatchT e m)
instance GHC.Base.Monoid (m a) => GHC.Base.Monoid (Control.Monad.Except.Catch.ExceptCatchT e m a)
instance GHC.Base.Semigroup (m a) => GHC.Base.Semigroup (Control.Monad.Except.Catch.ExceptCatchT e m a)
instance GHC.Base.Alternative m => GHC.Base.Alternative (Control.Monad.Except.Catch.ExceptCatchT e m)
instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Control.Monad.Except.Catch.ExceptCatchT e m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Except.Catch.ExceptCatchT e m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Except.Catch.ExceptCatchT e m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Except.Catch.ExceptCatchT e m)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Except.Catch.ExceptCatchT e m)
instance (Control.Monad.Catch.MonadCatch m, GHC.Exception.Type.Exception e) => Control.Monad.Error.Class.MonadError e (Control.Monad.Except.Catch.ExceptCatchT e m)
module Control.Monad.Except.IO
-- | This type is useful for providing a MonadError constraint to an
-- IO action for a given type. It can replace ExceptT.
--
-- Note that catchError will use the behavior from UnliftIO
-- - so catch won't catch an asynchronous exception.
newtype ExceptIOT e m a
ExceptIOT :: m a -> ExceptIOT e m a
[unsafeRunExceptIOT] :: ExceptIOT e m a -> m a
-- | Run an ExceptIOT action. This catches the thrown exception, but
-- only if it is the e that the type mentions. All other
-- exceptions will remain uncaught.
runExceptIOT :: (Exception e, MonadUnliftIO m) => ExceptIOT e m a -> m (Either e a)
-- | Like modifyError, but it selects the ExceptIOT instance
-- for IO exceptions instead of the ExceptT instance with
-- an Either error.
modifyError :: (Exception e, MonadUnliftIO m, MonadError e' m) => (e -> e') -> ExceptIOT e m a -> m a
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.IO.Unlift.MonadUnliftIO m => Control.Monad.IO.Unlift.MonadUnliftIO (Control.Monad.Except.IO.ExceptIOT e m)
instance GHC.Base.Monoid (m a) => GHC.Base.Monoid (Control.Monad.Except.IO.ExceptIOT e m a)
instance GHC.Base.Semigroup (m a) => GHC.Base.Semigroup (Control.Monad.Except.IO.ExceptIOT e m a)
instance GHC.Base.Alternative m => GHC.Base.Alternative (Control.Monad.Except.IO.ExceptIOT e m)
instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Control.Monad.Except.IO.ExceptIOT e m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Except.IO.ExceptIOT e m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Except.IO.ExceptIOT e m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Except.IO.ExceptIOT e m)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Except.IO.ExceptIOT e m)
instance (Control.Monad.IO.Unlift.MonadUnliftIO m, GHC.Exception.Type.Exception e) => Control.Monad.Error.Class.MonadError e (Control.Monad.Except.IO.ExceptIOT e m)