| Copyright | (C) Edward Kmett 2013-2015 (c) Google Inc. 2012 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <[email protected]> |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
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!
The transformers-style monad transfomer
newtype CatchT (m :: Type -> Type) 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!
| CatchT | |
Fields
| |
| MonadTrans CatchT Source | |
Defined in Control.Monad.Catch.Pure | |
| MonadRWS r w s m => MonadRWS r w s (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure | |
| MonadReader e m => MonadReader e (CatchT m) Source | |
| MonadState s m => MonadState s (CatchT m) Source | |
| MonadWriter w m => MonadWriter w (CatchT m) Source | |
| Monad m => MonadCatch (CatchT m) Source | |
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, |
Defined in Control.Monad.Catch.Pure Methodsmask :: HasCallStack => ((forall a. CatchT m a -> CatchT m a) -> CatchT m b) -> CatchT m b Source uninterruptibleMask :: HasCallStack => ((forall a. CatchT m a -> CatchT m a) -> CatchT m b) -> CatchT m b Source generalBracket :: HasCallStack => CatchT m a -> (a -> ExitCase b -> CatchT m c) -> (a -> CatchT m b) -> CatchT m (b, c) Source | |
| Monad m => MonadThrow (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure MethodsthrowM :: (HasCallStack, Exception e) => e -> CatchT m a Source | |
| Monad m => Alternative (CatchT m) Source | |
| Monad m => Applicative (CatchT m) Source | |
| Monad m => Functor (CatchT m) Source | |
| Monad m => Monad (CatchT m) Source | |
| Monad m => MonadPlus (CatchT m) Source | |
| Monad m => MonadFail (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure | |
| MonadFix m => MonadFix (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure | |
| MonadIO m => MonadIO (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure | |
| Foldable m => Foldable (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure Methodsfold :: Monoid m0 => CatchT m m0 -> m0 foldMap :: Monoid m0 => (a -> m0) -> CatchT m a -> m0 foldMap' :: Monoid m0 => (a -> m0) -> CatchT m a -> m0 foldr :: (a -> b -> b) -> b -> CatchT m a -> b foldr' :: (a -> b -> b) -> b -> CatchT m a -> b foldl :: (b -> a -> b) -> b -> CatchT m a -> b foldl' :: (b -> a -> b) -> b -> CatchT m a -> b foldr1 :: (a -> a -> a) -> CatchT m a -> a foldl1 :: (a -> a -> a) -> CatchT m a -> a elem :: Eq a => a -> CatchT m a -> Bool maximum :: Ord a => CatchT m a -> a minimum :: Ord a => CatchT m a -> a | |
| (Monad m, Traversable m) => Traversable (CatchT m) Source | |
Defined in Control.Monad.Catch.Pure | |
type Catch = CatchT Identity Source
runCatch :: Catch a -> Either SomeException a Source
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)
The mtl style typeclass
module Control.Monad.Catch
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/exceptions-0.10.9-0424/Control-Monad-Catch-Pure.html