monad-control-0.2.0.2: Lift control operations, like exception catching, through monad transformers

Portabilitynon-portable (extended exceptions)
Stabilityexperimental
MaintainerBas van Dijk <v.dijk.bas@gmail.com>

Control.Exception.Control

Contents

Description

This is a wrapped version of Control.Exception with types generalized from IO to all monads in MonadControlIO.

Synopsis

Documentation

Throwing exceptions

throwIO :: (MonadIO m, Exception e) => e -> m αSource

Generalized version of throwIO.

ioError :: MonadIO m => IOError -> m αSource

Generalized version of ioError.

Catching exceptions

The catch functions

catchSource

Arguments

:: (MonadControlIO m, Exception e) 
=> m α

The computation to run

-> (e -> m α)

Handler to invoke if an exception is raised

-> m α 

Generalized version of catch.

catches :: MonadControlIO m => m α -> [Handler m α] -> m αSource

Generalized version of catches.

data Handler m α Source

Generalized version of Handler.

Constructors

forall e . Exception e => Handler (e -> m α) 

catchJustSource

Arguments

:: (MonadControlIO m, Exception e) 
=> (e -> Maybe β)

Predicate to select exceptions

-> m α

Computation to run

-> (β -> m α)

Handler

-> m α 

Generalized version of catchJust.

The handle functions

handle :: (MonadControlIO m, Exception e) => (e -> m α) -> m α -> m αSource

Generalized version of handle.

handleJust :: (MonadControlIO m, Exception e) => (e -> Maybe β) -> (β -> m α) -> m α -> m αSource

Generalized version of handleJust.

The try functions

try :: (MonadControlIO m, Exception e) => m α -> m (Either e α)Source

Generalized version of try.

tryJust :: (MonadControlIO m, Exception e) => (e -> Maybe β) -> m α -> m (Either β α)Source

Generalized version of tryJust.

The evaluate function

evaluate :: MonadIO m => α -> m αSource

Generalized version of evaluate.

Asynchronous Exceptions

Asynchronous exception control

The following functions allow a thread to control delivery of asynchronous exceptions during a critical region.

mask :: MonadControlIO m => ((forall α. m α -> m α) -> m β) -> m βSource

Generalized version of mask.

mask_ :: MonadControlIO m => m α -> m αSource

Generalized version of mask_.

uninterruptibleMask :: MonadControlIO m => ((forall α. m α -> m α) -> m β) -> m βSource

Generalized version of uninterruptibleMask.

uninterruptibleMask_ :: MonadControlIO m => m α -> m αSource

Generalized version of uninterruptibleMask_.

getMaskingState :: MonadIO m => m MaskingStateSource

Generalized version of getMaskingState.

Brackets

bracketSource

Arguments

:: MonadControlIO m 
=> m α

computation to run first ("acquire resource")

-> (α -> m β)

computation to run last ("release resource")

-> (α -> m γ)

computation to run in-between

-> m γ 

Generalized version of bracket. Note, any monadic side effects in m of the "release" computation will be discarded; it is run only for its side effects in IO.

Note that when your acquire and release computations are of type IO it will be more efficient to write:

liftIOOp (bracket acquire release)

bracket_Source

Arguments

:: MonadControlIO m 
=> m α

computation to run first ("acquire resource")

-> m β

computation to run last ("release resource")

-> m γ

computation to run in-between

-> m γ 

Generalized version of bracket_. Note, any monadic side effects in m of both the "acquire" and "release" computations will be discarded. To keep the monadic side effects of the "acquire" computation, use bracket with constant functions instead.

Note that when your acquire and release computations are of type IO it will be more efficient to write:

liftIOOp_ (bracket_ acquire release)

bracketOnErrorSource

Arguments

:: MonadControlIO m 
=> m α

computation to run first ("acquire resource")

-> (α -> m β)

computation to run last ("release resource")

-> (α -> m γ)

computation to run in-between

-> m γ 

Generalized version of bracketOnError. Note, any monadic side effects in m of the "release" computation will be discarded.

Note that when your acquire and release computations are of type IO it will be more efficient to write:

liftIOOp (bracketOnError acquire release)

Utilities

finallySource

Arguments

:: MonadControlIO m 
=> m α

computation to run first

-> m β

computation to run afterward (even if an exception was raised)

-> m α 

Generalized version of finally. Note, any monadic side effects in m of the "afterward" computation will be discarded.

onException :: MonadControlIO m => m α -> m β -> m αSource

Generalized version of onException. Note, any monadic side effects in m of the "afterward" computation will be discarded.