W3cubDocs

/Haskell 9

Control.Monad.Catch.Pure

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

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!

Transformer

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!

Constructors

CatchT

Fields

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

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

Defined in Control.Monad.Catch.Pure

Methods

ask :: CatchT m e Source

local :: (e -> e) -> CatchT m a -> CatchT m a Source

reader :: (e -> a) -> CatchT m a Source

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

Defined in Control.Monad.Catch.Pure

Methods

get :: CatchT m s Source

put :: s -> CatchT m () Source

state :: (s -> (a, s)) -> CatchT m a Source

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

Defined in Control.Monad.Catch.Pure

Methods

writer :: (a, w) -> CatchT m a Source

tell :: w -> CatchT m () Source

listen :: CatchT m a -> CatchT m (a, w) Source

pass :: CatchT m (a, w -> w) -> CatchT m a Source

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

Defined in Control.Monad.Catch.Pure

Methods

catch :: (HasCallStack, Exception e) => CatchT m a -> (e -> CatchT m a) -> CatchT m a Source

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 :: 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
Instance details

Defined in Control.Monad.Catch.Pure

Methods

throwM :: (HasCallStack, Exception e) => e -> CatchT m a Source

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

Defined in Control.Monad.Catch.Pure

Methods

empty :: CatchT m a

(<|>) :: CatchT m a -> CatchT m a -> CatchT m a

some :: CatchT m a -> CatchT m [a]

many :: CatchT m a -> CatchT m [a]

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

Defined in Control.Monad.Catch.Pure

Methods

pure :: a -> CatchT m a

(<*>) :: CatchT m (a -> b) -> CatchT m a -> CatchT m b

liftA2 :: (a -> b -> c) -> CatchT m a -> CatchT m b -> CatchT m c

(*>) :: CatchT m a -> CatchT m b -> CatchT m b

(<*) :: CatchT m a -> CatchT m b -> CatchT m a

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

Defined in Control.Monad.Catch.Pure

Methods

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

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

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

Defined in Control.Monad.Catch.Pure

Methods

(>>=) :: CatchT m a -> (a -> CatchT m b) -> CatchT m b

(>>) :: CatchT m a -> CatchT m b -> CatchT m b

return :: a -> CatchT m a

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

Defined in Control.Monad.Catch.Pure

Methods

mzero :: CatchT m a

mplus :: CatchT m a -> CatchT m a -> CatchT m a

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

Defined in Control.Monad.Catch.Pure

Methods

fail :: String -> CatchT m a

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

Defined in Control.Monad.Catch.Pure

Methods

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

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

Defined in Control.Monad.Catch.Pure

Methods

liftIO :: IO a -> CatchT m a

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

Defined in Control.Monad.Catch.Pure

Methods

fold :: 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

toList :: CatchT m a -> [a]

null :: CatchT m a -> Bool

length :: CatchT m a -> Int

elem :: Eq a => a -> CatchT m a -> Bool

maximum :: Ord a => CatchT m a -> a

minimum :: Ord a => CatchT m a -> a

sum :: Num a => CatchT m a -> a

product :: Num a => CatchT m a -> a

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

Defined in Control.Monad.Catch.Pure

Methods

traverse :: Applicative f => (a -> f b) -> CatchT m a -> f (CatchT m b)

sequenceA :: Applicative f => CatchT m (f a) -> f (CatchT m a)

mapM :: Monad m0 => (a -> m0 b) -> CatchT m a -> m0 (CatchT m b)

sequence :: Monad m0 => CatchT m (m0 a) -> m0 (CatchT m a)

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)

Typeclass

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