eventful-core-0.1.1: Core module for eventful

Safe HaskellNone
LanguageHaskell2010

Eventful.Projection

Synopsis

Documentation

data Projection state event Source #

A Projection is a piece of state that is constructed only from events. A Projection is how you reconstruct event sourced state from the ordered stream of events that constitute that state. The "seed" of a Projection is the initial state before any events are applied. The event handler for a projection is the function that actually modifies state based on the given event.

Constructors

Projection 

Fields

  • projectionSeed :: state

    Initial state of a projection

  • projectionEventHandler :: state -> event -> state

    The function that applies and event to the current state, producing a new state.

latestProjection :: Foldable t => Projection state event -> t event -> state Source #

Computes the latest state of a Projection from some events.

allProjections :: Projection state event -> [event] -> [state] Source #

Given a list of events, produce all the Projections that were ever produced. Just a scanl using projectionEventHandler. This function is useful for testing Projections; you can easily assert that all the states of a Projection are valid given a list of events.

getLatestProjection :: Monad m => EventStore serialized m -> Projection proj serialized -> UUID -> m (proj, EventVersion) Source #

Gets the latest projection from a store by using getEvents and then applying the events using the Projection's event handler.