Safe Haskell | None |
---|---|
Language | Haskell2010 |
A small process to capture and _share_ observation's by enqueueing them into an STM TBQueue
.
Synopsis
- newtype ObservationQueue a = ObservationQueue (TBQueue a)
- type Reader a = Reader (ObservationQueue a)
- observe :: forall event eventSource e q len b h. (HasCallStack, HasProcesses e q, LogsTo h e, LogsTo h q, LogsTo h (Processes q), Lifted IO e, Lifted IO q, IsObservable eventSource event, Integral len, Server (ObservationQueue event) (Processes q), Tangible (Pdu eventSource Asynchronous)) => len -> Endpoint eventSource -> Eff (Reader event ': e) b -> Eff e b
- await :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r event
- tryRead :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r (Maybe event)
- flush :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r [event]
Documentation
newtype ObservationQueue a Source #
Instances
type Reader a = Reader (ObservationQueue a) Source #
A Reader
for an ObservationQueue
.
observe :: forall event eventSource e q len b h. (HasCallStack, HasProcesses e q, LogsTo h e, LogsTo h q, LogsTo h (Processes q), Lifted IO e, Lifted IO q, IsObservable eventSource event, Integral len, Server (ObservationQueue event) (Processes q), Tangible (Pdu eventSource Asynchronous)) => len -> Endpoint eventSource -> Eff (Reader event ': e) b -> Eff e b Source #
Listen to, and capture observations in an ObservationQueue
.
Fork an Observer
process that runs only while the body expression is executed.
Register the observer to the observable process passed to this function.
The captured observations can be obtained by await
,
tryRead
and flush
.
The queue size is limited to the given number.
Example
import qualified Control.Eff.Concurrent.Observer.Queue as OQ foo = do observed <- startLink SomeObservable OQ.observe 100 observed $ do ... cast observed DoSomething evt <- OQ.await @TestEvent ...
Since: 0.28.0
await :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r event Source #
Read queued observations captured and enqueued in the shared ObservationQueue
by observe
.
This blocks until something was captured or an interrupt or exceptions was thrown. For a non-blocking
variant use tryRead
or flush
.
Since: 0.28.0
tryRead :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r (Maybe event) Source #
Read queued observations captured and enqueued in the shared ObservationQueue
by observe
.
Return the oldest enqueued observation immediately or Nothing
if the queue is empty.
Use await
to block until an observation is observerRegistryNotify.
Since: 0.28.0
flush :: forall event r. (Member (Reader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r [event] Source #
Read at once all currently queued observations captured and enqueued
in the shared ObservationQueue
by observe
.
This returns immediately all currently enqueued observations.
For a blocking variant use await
.
Since: 0.28.0