crdt-event-fold-1.8.0.0: Garbage collected event folding CRDT.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.CRDT.EventFold.Monad

Description

 
Synopsis

Documentation

class MonadUpdateEF o p e m | m -> o p e where Source #

The interface for monadically updating an EventFold, where the monadic context is intended to manage:

  • The local participant.
  • The current state of the EventFold.
  • The accumulated consistent outputs.
  • Whether the EventFold needs to be propagated to other participants.

Methods

event :: e -> m (Output e, EventId p) Source #

Apply an event. See event.

fullMerge :: EventFold o p e -> m (Either (MergeError o p e) ()) Source #

Perform a full merge. See fullMerge.

diffMerge :: Diff o p e -> m (Either (MergeError o p e) ()) Source #

Perform a diff merge. See diffMerge.

participate :: p -> m (EventId p) Source #

Allow a new participant to join in the cluster. See participate.

disassociate :: p -> m (EventId p) Source #

Remove a peer from participation. See disassociate.

getResult :: m (UpdateResult o p e) Source #

Get the outstanding update results.

Instances

Instances details
(Eq (Output e), Eq e, Eq o, Event p e, Monad m, Ord p) => MonadUpdateEF o p e (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

event :: e -> EventFoldT o p e m (Output e, EventId p) Source #

fullMerge :: EventFold o p e -> EventFoldT o p e m (Either (MergeError o p e) ()) Source #

diffMerge :: Diff o p e -> EventFoldT o p e m (Either (MergeError o p e) ()) Source #

participate :: p -> EventFoldT o p e m (EventId p) Source #

disassociate :: p -> EventFoldT o p e m (EventId p) Source #

getResult :: EventFoldT o p e m (UpdateResult o p e) Source #

class Monad m => MonadInspectEF o p e m | m -> o p e where Source #

Interface for inspecting an Eventfold contained within the monadic context.

Minimal complete definition

Nothing

Methods

efAsks :: (EventFold o p e -> a) -> m a Source #

efAsk :: m (EventFold o p e) Source #

Instances

Instances details
Monad m => MonadInspectEF o p e (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

efAsks :: (EventFold o p e -> a) -> EventFoldT o p e m a Source #

efAsk :: EventFoldT o p e m (EventFold o p e) Source #

data EventFoldT o p e m a Source #

A transformer providing MonadUpdateEF and MonadInspectEF.

Instances

Instances details
Monad m => MonadInspectEF o p e (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

efAsks :: (EventFold o p e -> a) -> EventFoldT o p e m a Source #

efAsk :: EventFoldT o p e m (EventFold o p e) Source #

(Eq (Output e), Eq e, Eq o, Event p e, Monad m, Ord p) => MonadUpdateEF o p e (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

event :: e -> EventFoldT o p e m (Output e, EventId p) Source #

fullMerge :: EventFold o p e -> EventFoldT o p e m (Either (MergeError o p e) ()) Source #

diffMerge :: Diff o p e -> EventFoldT o p e m (Either (MergeError o p e) ()) Source #

participate :: p -> EventFoldT o p e m (EventId p) Source #

disassociate :: p -> EventFoldT o p e m (EventId p) Source #

getResult :: EventFoldT o p e m (UpdateResult o p e) Source #

MonadTrans (EventFoldT o p e) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

lift :: Monad m => m a -> EventFoldT o p e m a #

MonadIO m => MonadIO (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

liftIO :: IO a -> EventFoldT o p e m a #

Monad m => Applicative (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

pure :: a -> EventFoldT o p e m a #

(<*>) :: EventFoldT o p e m (a -> b) -> EventFoldT o p e m a -> EventFoldT o p e m b #

liftA2 :: (a -> b -> c) -> EventFoldT o p e m a -> EventFoldT o p e m b -> EventFoldT o p e m c #

(*>) :: EventFoldT o p e m a -> EventFoldT o p e m b -> EventFoldT o p e m b #

(<*) :: EventFoldT o p e m a -> EventFoldT o p e m b -> EventFoldT o p e m a #

Functor m => Functor (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

fmap :: (a -> b) -> EventFoldT o p e m a -> EventFoldT o p e m b #

(<$) :: a -> EventFoldT o p e m b -> EventFoldT o p e m a #

Monad m => Monad (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

(>>=) :: EventFoldT o p e m a -> (a -> EventFoldT o p e m b) -> EventFoldT o p e m b #

(>>) :: EventFoldT o p e m a -> EventFoldT o p e m b -> EventFoldT o p e m b #

return :: a -> EventFoldT o p e m a #

MonadThrow m => MonadThrow (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

throwM :: Exception e0 => e0 -> EventFoldT o p e m a #

MonadLogger m => MonadLogger (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> EventFoldT o p e m () #

MonadLoggerIO m => MonadLoggerIO (EventFoldT o p e m) Source # 
Instance details

Defined in Data.CRDT.EventFold.Monad

Methods

askLoggerIO :: EventFoldT o p e m (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) #

runEventFoldT Source #

Arguments

:: Ord p 
=> p

The local participant.

-> EventFold o p e

Initial event fold value.

-> EventFoldT o p e m a

The action to run.

-> m (a, UpdateResult o p e)

Returns the result of the action, plus all the accumulated UpdateResults, which contain the new EventFold value, all of the consistent outputs, and a flag indicating whether the new EventFold value should be propagated to the other participants.