exceptions-0.10.4: Extensible optionally-pure exceptions
Copyright (C) Edward Kmett 2013-2015 (c) Google Inc. 2012
License BSD-style (see the file LICENSE)
Maintainer Edward Kmett <ekmett@gmail.com>
Stability experimental
Portability non-portable
Safe Haskell Trustworthy
Language Haskell98

Control.Monad.Catch.Pure

Description

This module supplies a 'pure' monad transformer that can be used for mock-testing code that throws exceptions, so long as those exceptions are always thrown with throwM .

Do not mix CatchT with IO . Choose one or the other for the bottom of your transformer stack!

Synopsis

Transformer

The transformers -style monad transfomer

newtype CatchT m a Source #

Add Exception handling abilities to a Monad .

This should never be used in combination with IO . Think of CatchT as an alternative base monad for use with mocking code that solely throws exceptions via throwM .

Note: that IO monad has these abilities already, so stacking CatchT on top of it does not add any value and can possibly be confusing:

>>> (error "Hello!" :: IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)
Hello!
>>> runCatchT $ (error "Hello!" :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)
*** Exception: Hello!
>>> runCatchT $ (throwM (ErrorCall "Hello!") :: CatchT IO ()) `catch` (\(e :: ErrorCall) -> liftIO $ print e)
Hello!

Instances

Instances details
MonadTrans CatchT Source #
Instance details

Defined in Control.Monad.Catch.Pure

Methods

lift :: Monad m => m a -> CatchT m a Source #

MonadRWS r w s m => MonadRWS r w s ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

MonadWriter w m => MonadWriter w ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

MonadState s m => MonadState s ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

MonadReader e m => MonadReader e ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => Monad ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => Functor ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Methods

fmap :: (a -> b) -> CatchT m a -> CatchT m b Source #

(<$) :: a -> CatchT m b -> CatchT m a Source #

MonadFix m => MonadFix ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Methods

mfix :: (a -> CatchT m a) -> CatchT m a Source #

Monad m => MonadFail ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => Applicative ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Foldable m => Foldable ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

( Monad m, Traversable m) => Traversable ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

MonadIO m => MonadIO ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => Alternative ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => MonadPlus ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => MonadMask ( CatchT m) Source #

Note: This instance is only valid if the underlying monad has a single exit point!

For example, IO or Either would be invalid base monads, but Reader or State would be acceptable.

Instance details

Defined in Control.Monad.Catch.Pure

Methods

mask :: (( forall a. CatchT m a -> CatchT m a) -> CatchT m b) -> CatchT m b Source #

uninterruptibleMask :: (( forall a. CatchT m a -> CatchT m a) -> CatchT m b) -> CatchT m b Source #

generalBracket :: CatchT m a -> (a -> ExitCase b -> CatchT m c) -> (a -> CatchT m b) -> CatchT m (b, c) Source #

Monad m => MonadCatch ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

Monad m => MonadThrow ( CatchT m) Source #
Instance details

Defined in Control.Monad.Catch.Pure

mapCatchT :: (m ( Either SomeException a) -> n ( Either SomeException b)) -> CatchT m a -> CatchT n b Source #

Map the unwrapped computation using the given function.

runCatchT (mapCatchT f m) = f (runCatchT m)

Typeclass

The mtl style typeclass