| Safe Haskell | Trustworthy |
|---|
Pipes.Concurrent
Description
Asynchronous communication between pipes
- newtype Input a = Input {}
- newtype Output a = Output {}
- fromInput :: MonadIO m => Input a -> Producer' a m ()
- toOutput :: MonadIO m => Output a -> Consumer' a m ()
- spawn :: Buffer a -> IO (Output a, Input a)
- spawn' :: Buffer a -> IO (Output a, Input a, STM ())
- data Buffer a
- module Control.Concurrent
- module Control.Concurrent.STM
- module System.Mem
Inputs and Outputs
Instances
Pipe utilities
Actors
spawn :: Buffer a -> IO (Output a, Input a)Source
Spawn a mailbox using the specified Buffer to store messages
- fails and returns
Falseif the mailbox is sealed, otherwise it: - retries if the mailbox is full, or:
- adds a message to the mailbox and returns
True.
- retrieves a message from the mailbox wrapped in
Justif the mailbox is not empty, otherwise it: - retries if the mailbox is not sealed, or:
- fails and returns
Nothing.
If either the Input or Output is garbage collected the mailbox will
become sealed.
spawn' :: Buffer a -> IO (Output a, Input a, STM ())Source
Like spawn, but also returns an action to manually seal the mailbox
early:
(output, input, seal) <- spawn' buffer ...
Use the seal action to allow early cleanup of readers and writers to the
mailbox without waiting for the next garbage collection cycle.
Buffer specifies how to buffer messages stored within the mailbox
Constructors
| Unbounded | Store an |
| Bounded Int | Store a |
| Single | Store a |
| Latest a | Only store the
|
Re-exports
Control.Concurrent re-exports forkIO, although I recommend using the
async library instead.
Control.Concurrent.STM re-exports atomically and STM.
System.Mem re-exports performGC.
module Control.Concurrent
module Control.Concurrent.STM
module System.Mem