Safe Haskell | None |
---|
Concurrency for Haste. Includes MVars, forking, Ajax and more.
- data Recv
- data Send
- type Inbox = MBox Recv
- type Outbox = MBox Send
- data MBox t a
- receive :: MonadConc m => Inbox a -> m a
- spawn :: MonadConc m => (Inbox a -> m ()) -> m (Outbox a)
- statefully :: MonadConc m => st -> (st -> evt -> m (Maybe st)) -> m (Outbox evt)
- (!) :: MonadConc m => Outbox a -> a -> m ()
- (<!) :: MonadConc m => Outbox a -> m a -> m ()
- wait :: Int -> CIO ()
Documentation
An MBox is a read/write-only MVar, depending on its first type parameter. Used to communicate with server processes.
receive :: MonadConc m => Inbox a -> m aSource
Block until a message arrives in a mailbox, then return it.
spawn :: MonadConc m => (Inbox a -> m ()) -> m (Outbox a)Source
Creates a generic process and returns a MBox which may be used to pass messages to it. While it is possible for a process created using spawn to transmit its inbox to someone else, this is a very bad idea; don't do it.
statefully :: MonadConc m => st -> (st -> evt -> m (Maybe st)) -> m (Outbox evt)Source
Creates a generic stateful process. This process is a function taking a
state and an event argument, returning an updated state or Nothing.
statefully
creates a MBox
that is used to pass events to the process.
Whenever a value is written to this MBox, that value is passed to the
process function together with the function's current state.
If the process function returns Nothing, the process terminates.
If it returns a new state, the process again blocks on the event MBox,
and will use the new state to any future calls to the server function.
(!) :: MonadConc m => Outbox a -> a -> m ()Source
Write a value to a MBox. Named after the Erlang message sending operator, as both are intended for passing messages to processes. This operation does not block until the message is delivered, but returns immediately.