Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
.
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.
Observable o => Observer (CallbackObserver o) o Source # | |
class (Typeable o, Typeable (Observation o)) => Observable o where Source #
data Observation o Source #
Type of observations visible on this observable
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.
SomeObserver :: (Show (Server p), Typeable p, Observer p o) => Server p -> SomeObserver o |
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 Observer
s 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 SomeObserver
s in the Observers
state.
data CallbackObserver o Source #
An Observer
that dispatches the observations to an effectful callback.
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.