monad-task-0.1.0: A monad transformer that turns event processing into co-routine programming.

Safe HaskellSafe-Infered

Control.Monad.Task.Class

Contents

Description

The MonadTask class that defines the set of combinators to work with Task monad.

The operations for MonadTask are similar to those of co-routines, with the addition of watching and signaling events.

We also define a set of auto lifting for common transformers. Note that we purposely leave a case undefined where a state transformer goes on top of a task monad, because such an operation is either unsound or has to roll back the state (see liftCallCC). So it's recommended to keep TaskT on top of all StateT in a transformer stack.

Synopsis

MonadTask class

class Monad m => MonadTask e m | m -> e whereSource

MonadTask specifies a task monad m over an event type e.

Methods

yield :: m ()Source

yield temporarily suspends current task to let others run.

fork :: m a -> m ()Source

fork spawns a task and runs it immediate until it ends or suspends before returning to current task.

watch :: (e -> Maybe a) -> m aSource

watch suspends current task to wait for future events, and will resume execution when an event triggers its watching function.

signal :: e -> m ()Source

signal broadcasts an event to all other tasks that are watching, and give those who wake up the priority to run.

exit :: m ()Source

exit ends all tasks and return immediately.

Instances

(Monad m, MonadTask a m) => MonadTask a (MaybeT m) 
(Monad m, MonadTask a m) => MonadTask a (ListT m) 
(Monad m, MonadTask a m) => MonadTask a (IdentityT m) 
(Monoid w, Monad m, MonadTask a m) => MonadTask a (WriterT w m) 
(Monoid w, Monad m, MonadTask a m) => MonadTask a (WriterT w m) 
(Monad m, MonadTask a m) => MonadTask a (ReaderT r m) 
(Error e, Monad m, MonadTask a m) => MonadTask a (ErrorT e m) 
Monad m => MonadTask e (TaskT e m) 

orElse :: (e -> Maybe a) -> (e -> Maybe b) -> e -> Maybe (Either a b)Source

orElse is a helper function for combining two trigger functions disjuctively, favoring the first one.