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

Safe HaskellSafe
LanguageHaskell98

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 where Source #

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

Minimal complete definition

yield, fork, watch, signal, exit

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 immediately until it ends or suspends before returning to current task.

watch :: (e -> Maybe a) -> m a Source #

watch suspends the 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 returns immediately.

Instances

(Monad m, MonadTask a m) => MonadTask a (MaybeT m) Source # 

Methods

yield :: MaybeT m () Source #

fork :: MaybeT m a -> MaybeT m () Source #

watch :: (a -> Maybe a) -> MaybeT m a Source #

signal :: a -> MaybeT m () Source #

exit :: MaybeT m () Source #

(Monad m, MonadTask a m) => MonadTask a (ListT m) Source # 

Methods

yield :: ListT m () Source #

fork :: ListT m a -> ListT m () Source #

watch :: (a -> Maybe a) -> ListT m a Source #

signal :: a -> ListT m () Source #

exit :: ListT m () Source #

(Monoid w, Monad m, MonadTask a m) => MonadTask a (WriterT w m) Source # 

Methods

yield :: WriterT w m () Source #

fork :: WriterT w m a -> WriterT w m () Source #

watch :: (a -> Maybe a) -> WriterT w m a Source #

signal :: a -> WriterT w m () Source #

exit :: WriterT w m () Source #

(Monoid w, Monad m, MonadTask a m) => MonadTask a (WriterT w m) Source # 

Methods

yield :: WriterT w m () Source #

fork :: WriterT w m a -> WriterT w m () Source #

watch :: (a -> Maybe a) -> WriterT w m a Source #

signal :: a -> WriterT w m () Source #

exit :: WriterT w m () Source #

(Monad m, MonadTask a m) => MonadTask a (IdentityT * m) Source # 

Methods

yield :: IdentityT * m () Source #

fork :: IdentityT * m a -> IdentityT * m () Source #

watch :: (a -> Maybe a) -> IdentityT * m a Source #

signal :: a -> IdentityT * m () Source #

exit :: IdentityT * m () Source #

(Monad m, MonadTask a m) => MonadTask a (ExceptT e m) Source # 

Methods

yield :: ExceptT e m () Source #

fork :: ExceptT e m a -> ExceptT e m () Source #

watch :: (a -> Maybe a) -> ExceptT e m a Source #

signal :: a -> ExceptT e m () Source #

exit :: ExceptT e m () Source #

Monad m => MonadTask e (TaskT e m) Source # 

Methods

yield :: TaskT e m () Source #

fork :: TaskT e m a -> TaskT e m () Source #

watch :: (e -> Maybe a) -> TaskT e m a Source #

signal :: e -> TaskT e m () Source #

exit :: TaskT e m () Source #

(Monad m, MonadTask a m) => MonadTask a (ReaderT * r m) Source # 

Methods

yield :: ReaderT * r m () Source #

fork :: ReaderT * r m a -> ReaderT * r m () Source #

watch :: (a -> Maybe a) -> ReaderT * r m a Source #

signal :: a -> ReaderT * r m () Source #

exit :: ReaderT * r m () Source #

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.