Safe Haskell | None |
---|---|
Language | Haskell2010 |
- class MonadEffect (Signal a b) m => MonadEffectSignal a b m | m a -> b where
- data ResumeOrBreak b c
- throwSignal :: MonadEffectSignal a Void m => a -> m b
- handleSignal :: Monad m => (a -> m (ResumeOrBreak b c)) -> EffectHandler (Signal a b) (ExceptT c m) c -> m c
- handleAsException :: Monad m => (a -> m c) -> EffectHandler (Signal a b) (ExceptT c m) c -> m c
- module Control.Effects
Documentation
class MonadEffect (Signal a b) m => MonadEffectSignal a b m | m a -> b where Source #
This class allows you to "throw" a signal. For the most part signals are the same as checked exceptions. The difference here is that the handler has the option to provide the value that will be the result _of calling the signal function_. This effectibvely allows you to have recoverable exceptions at the call site, instead of just at the handling site.
This class can be considered an alias for MonadEffect (Signal a b)
so your code isn't
required to provide any instances.
There are no restrictions on the type of values that can be thrown or returned.
(MonadEffectSignal a b m, MonadTrans t, Monad (t m)) => MonadEffectSignal a b (t m) Source # | |
data ResumeOrBreak b c Source #
The handle function will return a value of this type.
throwSignal :: MonadEffectSignal a Void m => a -> m b Source #
Throw a signal with no possible recovery. The handler is forced to only return the Break
constructor because it cannot construct a Void
value.
If this function is used along with handleAsException
, this module behaves like regular
checked exceptions.
handleSignal :: Monad m => (a -> m (ResumeOrBreak b c)) -> EffectHandler (Signal a b) (ExceptT c m) c -> m c Source #
Handle signals of a computation. The handler function has the option to provide a value
to the caller of signal
and continue execution there, or do what regular exception handlers
do and continue execution after the handler.
handleAsException :: Monad m => (a -> m c) -> EffectHandler (Signal a b) (ExceptT c m) c -> m c Source #
This handler can only behave like a regular exception handler. If used along with throwSignal
this module behaves like regular checked exceptions.
module Control.Effects