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 ObservationQueueReader a = Reader (ObservationQueue a)
- observe :: forall event eventSource e q len b. (HasCallStack, HasProcesses e q, LogIo q, LogIo e, IsObservable eventSource event, Integral len, Server (ObservationQueue event) (Processes q)) => len -> Endpoint eventSource -> Eff (ObservationQueueReader event ': e) b -> Eff e b
- await :: forall event r. (Member (ObservationQueueReader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r event
- tryRead :: forall event r. (Member (ObservationQueueReader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r (Maybe event)
- flush :: forall event r. (Member (ObservationQueueReader event) r, HasCallStack, MonadIO (Eff r), Typeable event, Member Logs r) => Eff r [event]
Documentation
newtype ObservationQueue a Source #
Instances
type ObservationQueueReader a = Reader (ObservationQueue a) Source #
A Reader
for an ObservationQueue
.
observe :: forall event eventSource e q len b. (HasCallStack, HasProcesses e q, LogIo q, LogIo e, IsObservable eventSource event, Integral len, Server (ObservationQueue event) (Processes q)) => len -> Endpoint eventSource -> Eff (ObservationQueueReader 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 <- start SomeObservable OQ.observe 100 observed $ do ... cast observed DoSomething evt <- OQ.await @TestEvent ...
Since: 0.28.0
await :: forall event r. (Member (ObservationQueueReader 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 (ObservationQueueReader 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 (ObservationQueueReader 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