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)
- readObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r o
- tryReadObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r (Maybe o)
- flushObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r [o]
- withObservationQueue :: forall o b e len. (HasCallStack, Typeable o, Show o, Member Logs e, Lifted IO e, Integral len, Member Interrupts e) => len -> Eff (ObservationQueueReader o ': e) b -> Eff e b
- spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) Asynchronous, Member Logs q, Lifted IO q, LogsTo h (InterruptableProcess q), HasCallStack) => ObservationQueue o -> Eff (InterruptableProcess q) (Observer o)
Documentation
newtype ObservationQueue a Source #
Contains a TBQueue
capturing observations.
See spawnLinkObservationQueueWriter
, readObservationQueue
.
Instances
(TangibleObserver o, TangiblePdu (Observer o) Asynchronous, Lifted IO q, Member Logs q) => Server (ObservationQueue o) q Source # | |
Defined in Control.Eff.Concurrent.Protocol.Observer.Queue data StartArgument (ObservationQueue o) q :: Type Source # type Protocol (ObservationQueue o) :: Type Source # type Model (ObservationQueue o) :: Type Source # type Settings (ObservationQueue o) :: Type Source # setup :: StartArgument (ObservationQueue o) q -> Eff (InterruptableProcess q) (Model (ObservationQueue o), Settings (ObservationQueue o)) Source # update :: StartArgument (ObservationQueue o) q -> Event (Protocol (ObservationQueue o)) -> Eff (ModelState (ObservationQueue o) ': (SettingsReader (ObservationQueue o) ': InterruptableProcess q)) () Source # | |
data StartArgument (ObservationQueue o) q Source # | |
type Protocol (ObservationQueue o) Source # | |
type Model (ObservationQueue o) Source # | |
type Settings (ObservationQueue o) Source # | |
type ObservationQueueReader a = Reader (ObservationQueue a) Source #
A Reader
for an ObservationQueue
.
readObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r o Source #
Read queued observations captured and enqueued in the shared TBQueue
by spawnLinkObservationQueueWriter
.
This blocks until something was captured or an interrupt or exceptions was thrown. For a non-blocking
variant use tryReadObservationQueue
or flushObservationQueue
.
tryReadObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r (Maybe o) Source #
Read queued observations captured and enqueued in the shared TBQueue
by spawnLinkObservationQueueWriter
.
Return the oldest enqueued observation immediately or Nothing
if the queue is empty.
Use readObservationQueue
to block until an observation is observed.
flushObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r [o] Source #
Read at once all currently queued observations captured and enqueued
in the shared TBQueue
by spawnLinkObservationQueueWriter
.
This returns immediately all currently enqueued observations.
For a blocking variant use readObservationQueue
.
withObservationQueue :: forall o b e len. (HasCallStack, Typeable o, Show o, Member Logs e, Lifted IO e, Integral len, Member Interrupts e) => len -> Eff (ObservationQueueReader o ': e) b -> Eff e b Source #
Create a mutable queue for observations. Use spawnLinkObservationQueueWriter
for a simple way to get
a process that enqueues all observations.
Example
withObservationQueue 100 $ do q <- ask @(ObservationQueueReader TestEvent) wq <- spawnLinkObservationQueueWriter q registerObserver wq testServer ... cast testServer DoSomething evt <- readObservationQueue @TestEvent ...
Since: 0.18.0
spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) Asynchronous, Member Logs q, Lifted IO q, LogsTo h (InterruptableProcess q), HasCallStack) => ObservationQueue o -> Eff (InterruptableProcess q) (Observer o) Source #
Spawn a process that can be used as an Observer
that enqueues the observations into an
ObservationQueue
. See withObservationQueue
for an example.
The observations can be obtained by readObservationQueue
. All observations are captured up to
the queue size limit, such that the first message received will be first message
returned by readObservationQueue
.
Since: 0.18.0