-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Monad-transformer compatible version of the Control.Exception module
--   
--   Provides functions to throw and catch exceptions. Unlike the functions
--   from <tt>Control.Exception</tt>, which work in <tt>IO</tt>, these work
--   in any stack of monad transformers (from the <a>transformers</a>
--   package) with <tt>IO</tt> as the base monad. You can extend this
--   functionality to other monads, by creating an instance of the
--   <tt>MonadCatchIO</tt> class. Warning: this package is deprecated. Use
--   the <a>exceptions</a> package instead, if possible.
@package MonadCatchIO-transformers
@version 0.3.1.3


-- | Please consider using the package <a>exceptions</a> instead, if
--   possible.
--   
--   The functions <tt>block</tt> and <tt>unblock</tt>, which are part of
--   the <tt>MonadCatchIO</tt> class, have known problems. The IO instances
--   of these functions, which are provided by the base library, have been
--   deprecated for some time, and have been removed in base-4.7.
module Control.Monad.CatchIO
class MonadIO m => MonadCatchIO m

-- | Generalized version of <a>catch</a>
catch :: (MonadCatchIO m, Exception e) => m a -> (e -> m a) -> m a
block :: MonadCatchIO m => m a -> m a
unblock :: MonadCatchIO m => m a -> m a
class (Typeable e, Show e) => Exception e
toException :: Exception e => e -> SomeException
fromException :: Exception e => SomeException -> Maybe e
displayException :: Exception e => e -> String

-- | Generalized version of <a>throwIO</a>
throw :: (MonadIO m, Exception e) => e -> m a

-- | Generalized version of <a>try</a>
try :: (MonadCatchIO m, Functor m, Exception e) => m a -> m (Either e a)

-- | Generalized version of <a>tryJust</a>
tryJust :: (MonadCatchIO m, Functor m, Exception e) => (e -> Maybe b) -> m a -> m (Either b a)

-- | Generalized version of <a>Handler</a>
data Handler m a
Handler :: (e -> m a) -> Handler m a

-- | Generalized version of <a>catches</a>
catches :: MonadCatchIO m => m a -> [Handler m a] -> m a

-- | Generalized version of <a>bracket</a>
bracket :: MonadCatchIO m => m a -> (a -> m b) -> (a -> m c) -> m c

-- | A variant of <a>bracket</a> where the return value from the first
--   computation is not required.
bracket_ :: MonadCatchIO m => m a -> m b -> m c -> m c

-- | Like <a>bracket</a>, but only performs the final action if there was
--   an exception raised by the in-between computation.
bracketOnError :: MonadCatchIO m => m a -> (a -> m b) -> (a -> m c) -> m c

-- | A specialised variant of <a>bracket</a> with just a computation to run
--   afterward.
finally :: MonadCatchIO m => m a -> m b -> m a

-- | Generalized version of <a>onException</a>
onException :: MonadCatchIO m => m a -> m b -> m a
instance Control.Monad.CatchIO.MonadCatchIO GHC.Types.IO
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Cont.ContT r m)
instance (Control.Monad.CatchIO.MonadCatchIO m, Control.Monad.Trans.Error.Error e) => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Error.ErrorT e m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Identity.IdentityT m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.List.ListT m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Maybe.MaybeT m)
instance (GHC.Base.Monoid w, Control.Monad.CatchIO.MonadCatchIO m) => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
instance (GHC.Base.Monoid w, Control.Monad.CatchIO.MonadCatchIO m) => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Reader.ReaderT r m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.State.Lazy.StateT s m)
instance Control.Monad.CatchIO.MonadCatchIO m => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.State.Strict.StateT s m)
instance (GHC.Base.Monoid w, Control.Monad.CatchIO.MonadCatchIO m) => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, Control.Monad.CatchIO.MonadCatchIO m) => Control.Monad.CatchIO.MonadCatchIO (Control.Monad.Trans.Writer.Strict.WriterT w m)

module Control.Monad.CatchIO.Try
tryIO :: (Error (ErrorType m), MonadError m, MonadCatchIO m, Functor m) => IO a -> m a
eitherIO :: (MonadCatchIO m, Functor m) => m a -> m (Either IOException a)
