| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Control.Eff.Concurrent.Observer
Description
Observer Effects
This module supports the implementation of observers and observables. One
more concrete perspective might be to understand observers as event listeners
and observables as event sources. The tools in this module are tailored
towards Api endpoints
- class (Typeable p, Observable o) => Observer p o where
- class (Typeable o, Typeable (Observation o)) => Observable o where
- data Observation o
- notifyObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o, HasCallStack) => Server p -> Server o -> Observation o -> Eff r ()
- registerObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o, HasCallStack) => Server p -> Server o -> Eff r ()
- forgetObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o) => Server p -> Server o -> Eff r ()
- data SomeObserver o where
- SomeObserver :: (Show (Server p), Typeable p, Observer p o) => Server p -> SomeObserver o
- notifySomeObserver :: (Member Process r, Member MessagePassing r, Observable o, HasCallStack) => Server o -> Observation o -> SomeObserver o -> Eff r ()
- data Observers o
- manageObservers :: Eff (State (Observers o) ': r) a -> Eff r a
- addObserver :: (Member MessagePassing r, Member (State (Observers o)) r, Observable o) => SomeObserver o -> Eff r ()
- removeObserver :: (Member MessagePassing r, Member (State (Observers o)) r, Observable o) => SomeObserver o -> Eff r ()
- notifyObservers :: forall o r. (Observable o, Member MessagePassing r, Member Process r, Member (State (Observers o)) r) => Observation o -> Eff r ()
- data CallbackObserver o
- spawnCallbackObserver :: forall o r. (HasDispatcherIO r, Typeable o, Show (Observation o), Observable o) => (Server o -> Observation o -> Eff ProcIO Bool) -> Eff r (Server (CallbackObserver o))
Documentation
class (Typeable p, Observable o) => Observer p o where Source #
An Api index that support observation of the
another Api that is Observable.
Minimal complete definition
Methods
observationMessage :: Server o -> Observation o -> Api p Asynchronous Source #
Wrap the Observation and the ProcessId (i.e. the Server)
that caused the observation into a Api value that the
Observable understands.
Instances
| Observable o => Observer (CallbackObserver o) o Source # | |
class (Typeable o, Typeable (Observation o)) => Observable o where Source #
Minimal complete definition
Methods
registerObserverMessage :: SomeObserver o -> Api o Asynchronous Source #
forgetObserverMessage :: SomeObserver o -> Api o Asynchronous Source #
notifyObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o, HasCallStack) => Server p -> Server o -> Observation o -> Eff r () Source #
Send an Observation to an Observer
registerObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o, HasCallStack) => Server p -> Server o -> Eff r () Source #
Send the registerObserverMessage
forgetObserver :: (Member Process r, Member MessagePassing r, Observable o, Observer p o) => Server p -> Server o -> Eff r () Source #
Send the forgetObserverMessage
data SomeObserver o where Source #
An existential wrapper around a Server of an Observer.
Needed to support different types of observers to observe the
same Observable in a general fashion.
Constructors
| SomeObserver :: (Show (Server p), Typeable p, Observer p o) => Server p -> SomeObserver o |
Instances
| Eq (SomeObserver o) Source # | |
| Ord (SomeObserver o) Source # | |
| Show (SomeObserver o) Source # | |
notifySomeObserver :: (Member Process r, Member MessagePassing r, Observable o, HasCallStack) => Server o -> Observation o -> SomeObserver o -> Eff r () Source #
Send an Observation to SomeObserver.
manageObservers :: Eff (State (Observers o) ': r) a -> Eff r a Source #
Keep track of registered Observers Observers can be added and removed,
and an Observation can be sent to all registerd observers at once.
addObserver :: (Member MessagePassing r, Member (State (Observers o)) r, Observable o) => SomeObserver o -> Eff r () Source #
Add an Observer to the Observers managed by manageObservers.
removeObserver :: (Member MessagePassing r, Member (State (Observers o)) r, Observable o) => SomeObserver o -> Eff r () Source #
Delete an Observer from the Observers managed by manageObservers.
notifyObservers :: forall o r. (Observable o, Member MessagePassing r, Member Process r, Member (State (Observers o)) r) => Observation o -> Eff r () Source #
Send an Observation to all SomeObservers in the Observers state.
data CallbackObserver o Source #
An Observer that dispatches the observations to an effectful callback.
Instances
| Observable o => Observer (CallbackObserver o) o Source # | |
| Show (Observation o) => Show (Api (CallbackObserver o) r) Source # | |
| data Api (CallbackObserver o) Source # | |
spawnCallbackObserver :: forall o r. (HasDispatcherIO r, Typeable o, Show (Observation o), Observable o) => (Server o -> Observation o -> Eff ProcIO Bool) -> Eff r (Server (CallbackObserver o)) Source #
Start a new process for an Observer that dispatches
all observations to an effectful callback.