| Copyright | (c) Samuel Schlesinger 2020 |
|---|---|
| License | MIT |
| Maintainer | sgschlesinger@gmail.com |
| Stability | experimental |
| Portability | POSIX, Windows |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.Concurrent.Actor
Description
Synopsis
- data ActionT message m a
- data Actor message
- send :: Actor message -> message -> STM ()
- addAfterEffect :: Actor message -> (Maybe SomeException -> IO ()) -> STM ()
- threadId :: Actor message -> ThreadId
- actFinally :: (Either SomeException a -> IO ()) -> ActionT message IO a -> IO (Actor message)
- act :: ActionT message IO a -> IO (Actor message)
- receiveSTM :: MonadIO m => (message -> STM a) -> ActionT message m a
- receive :: MonadIO m => (message -> ActionT message m a) -> ActionT message m a
- hoistActionT :: (forall x. m x -> n x) -> ActionT message m a -> ActionT message n a
- link :: MonadIO m => Actor message -> ActionT message' m ()
- linkSTM :: Actor message -> Actor message' -> STM ()
- data LinkKill = LinkKill ThreadId
- self :: Applicative m => ActionT message m (Actor message)
- murder :: MonadIO m => Actor message -> m ()
Documentation
data ActionT message m a Source #
A type that contains the actions that Actors will do.
Instances
| (MonadWriter w m, MonadReader r m, MonadState s m) => MonadRWS r w s (ActionT message m) Source # | |
Defined in Control.Concurrent.Actor | |
| MonadWriter w m => MonadWriter w (ActionT message m) Source # | |
| MonadState s m => MonadState s (ActionT message m) Source # | |
| MonadReader r m => MonadReader r (ActionT message m) Source # | |
| MonadError e m => MonadError e (ActionT message m) Source # | |
Defined in Control.Concurrent.Actor Methods throwError :: e -> ActionT message m a # catchError :: ActionT message m a -> (e -> ActionT message m a) -> ActionT message m a # | |
| MonadTrans (ActionT message) Source # | |
Defined in Control.Concurrent.Actor | |
| Monad m => Monad (ActionT message m) Source # | |
| Functor m => Functor (ActionT message m) Source # | |
| Applicative m => Applicative (ActionT message m) Source # | |
Defined in Control.Concurrent.Actor Methods pure :: a -> ActionT message m a # (<*>) :: ActionT message m (a -> b) -> ActionT message m a -> ActionT message m b # liftA2 :: (a -> b -> c) -> ActionT message m a -> ActionT message m b -> ActionT message m c # (*>) :: ActionT message m a -> ActionT message m b -> ActionT message m b # (<*) :: ActionT message m a -> ActionT message m b -> ActionT message m a # | |
| MonadIO m => MonadIO (ActionT message m) Source # | |
Defined in Control.Concurrent.Actor | |
| MonadCont m => MonadCont (ActionT message m) Source # | |
A handle to do things to actors, like sending them messages, fiddling with their threads, or adding an effect that will occur after they've finished executing.
addAfterEffect :: Actor message -> (Maybe SomeException -> IO ()) -> STM () Source #
actFinally :: (Either SomeException a -> IO ()) -> ActionT message IO a -> IO (Actor message) Source #
Perform some ActionT in a thread, with some cleanup afterwards.
receiveSTM :: MonadIO m => (message -> STM a) -> ActionT message m a Source #
Receive a message and, in the same transaction, produce some result.
receive :: MonadIO m => (message -> ActionT message m a) -> ActionT message m a Source #
Receive a message and do some ActionT with it.
hoistActionT :: (forall x. m x -> n x) -> ActionT message m a -> ActionT message n a Source #
Use a natural transformation to transform an ActionT on one base
monad to another.
The exception thrown when an actor we've linked with has died.
Instances
| Show LinkKill Source # | |
| Exception LinkKill Source # | |
Defined in Control.Concurrent.Actor Methods toException :: LinkKill -> SomeException # fromException :: SomeException -> Maybe LinkKill # displayException :: LinkKill -> String # | |
self :: Applicative m => ActionT message m (Actor message) Source #
Returns the ThreadId of the actor executing this action. This is
possibly more efficient than liftIOing myThreadId, but more than
that, it gives us the ability to grab it in arbitrary Applicative
contexts, rather than only in MonadIO ones.