Safe Haskell | None |
---|---|
Language | Haskell2010 |
queues Follows pipes-concurrency
Synopsis
- data Queue a
- queue :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m (l, r)
- queueC :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l
- queueC' :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l
- queueE :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r
- queueE' :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r
- queueCM :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m l
- queueCM' :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m l
- queueEM :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m r
- queueEM' :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m r
- waitCancel :: MonadConc m => m b -> m a -> m b
- ends :: MonadSTM stm => Queue a -> stm (a -> stm (), stm a)
- withQ :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m (l, r)
- withQE :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r
- withQC :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l
- toBox :: MonadSTM stm => Queue a -> stm (Box stm a a, stm ())
- concurrentlyLeft :: MonadConc m => m a -> m b -> m a
- concurrentlyRight :: MonadConc m => m a -> m b -> m b
Documentation
Queue
specifies how messages are queued
queue :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m (l, r) Source #
create an unbounded queue
queueC :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l Source #
create an unbounded queue, returning the committer result
queueC' :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l Source #
create an unbounded queue, returning the committer result
queueE :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r Source #
create an unbounded queue, returning the emitter result
queueE' :: MonadConc m => (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r Source #
queueCM :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m l Source #
create an unbounded queue, returning the emitter result
queueCM' :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m l Source #
create an unbounded queue, returning the emitter result
queueEM :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m r Source #
create an unbounded queue, returning the emitter result
queueEM' :: MonadConc m => (Committer m a -> m l) -> (Emitter m a -> m r) -> m r Source #
create an unbounded queue, returning the emitter result
waitCancel :: MonadConc m => m b -> m a -> m b Source #
wait for the first action, and then cancel the second
ends :: MonadSTM stm => Queue a -> stm (a -> stm (), stm a) Source #
create a queue, returning the ends
withQ :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m (l, r) Source #
connect a committer and emitter action via spawning a queue, and wait for both to complete.
withQE :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m r Source #
connect a committer and emitter action via spawning a queue, and wait for emitter to complete.
withQC :: MonadConc m => Queue a -> (Queue a -> STM m (Box (STM m) a a, STM m ())) -> (Committer (STM m) a -> m l) -> (Emitter (STM m) a -> m r) -> m l Source #
connect a committer and emitter action via spawning a queue, and wait for committer to complete.
toBox :: MonadSTM stm => Queue a -> stm (Box stm a a, stm ()) Source #
turn a queue into a box (and a seal)
concurrentlyLeft :: MonadConc m => m a -> m b -> m a Source #
run two actions concurrently, but wait and return on the left result.
concurrentlyRight :: MonadConc m => m a -> m b -> m b Source #
run two actions concurrently, but wait and return on the right result.