{-# LANGUAGE Safe #-}
module
Control.Arrow.Machine.Misc.Exception
(
catch,
handle,
bracket,
bracket_,
bracketOnError,
finally,
onException
)
where
import Control.Arrow.Machine.Types
catch :: Monad m =>
PlanT i o m a -> PlanT i o m a -> PlanT i o m a
catch = catchP
handle :: Monad m =>
PlanT i o m a -> PlanT i o m a -> PlanT i o m a
handle = flip catch
bracket :: Monad m =>
PlanT i o m a -> (a -> PlanT i o m b)-> (a -> PlanT i o m c) -> PlanT i o m c
bracket before after thing =
do
a <- before
r <- thing a `catch` (after a >> stop)
_ <- after a
return r
bracket_ :: Monad m =>
PlanT i o m a -> PlanT i o m b-> PlanT i o m c -> PlanT i o m c
bracket_ before after thing =
do
_ <- before
r <- thing `catch` (after >> stop)
_ <- after
return r
bracketOnError :: Monad m =>
PlanT i o m a -> (a -> PlanT i o m b)-> (a -> PlanT i o m c) -> PlanT i o m c
bracketOnError before after thing =
do
a <- before
r <- thing a `catch` (after a >> stop)
return r
finally :: Monad m =>
PlanT i o m a -> PlanT i o m b-> PlanT i o m a
finally thing after =
do
r <- thing `catch` (after >> stop)
_ <- after
return r
onException :: Monad m =>
PlanT i o m a -> PlanT i o m b-> PlanT i o m a
onException thing after =
do
thing `catch` (after >> stop)