eventful-core-0.1.2: Core module for eventful

Safe HaskellNone




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.




  • 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.

getLatestGlobalProjection :: Monad m => GloballyOrderedEventStore serialized m -> Projection proj (ProjectionEvent serialized) -> Maybe (proj, SequenceNumber) -> m (proj, SequenceNumber) Source #

Gets globally ordered events from the event store and builds a Projection based on ProjectionEvent. Optionally accepts the current projection state as an argument.

serializedProjection :: Projection state event -> Serializer event serialized -> Projection state serialized Source #

Use a Serializer to wrap a Projection with event type event so it uses the serialized type.