marconi-core-1.2.0.0: Modular indexing for rewindable ledger
Safe HaskellSafe-Inferred
LanguageHaskell2010

Marconi.Core.Class

Description

Base typeclasses to index events.

See Marconi.Core for documentation.

Synopsis

Documentation

class Monad m => IsIndex m event indexer where #

The base class of an indexer, providing its key functionalities: indexing events and handling rollbacks.

  • indexer the indexer implementation type
  • event the indexed events
  • m the monad in which our indexer operates

Rules:

  • Rollback to last indexed point do nothing: rollback p <=< index (Timed p evt) === index (Timed p evt);
  • Rollback eliminate intermediate indexing (precondition: none of the point in xs are equal to p): rollback p <=< indexAll events <=< index (Timed p evt) === index (Timed p evt);
  • Rollback is idempotent: rollback p <=< rollback p === rollback p.

Minimal complete definition

index, rollback, setLastStablePoint

Methods

index :: Eq (Point event) => Timed (Point event) (Maybe event) -> indexer event -> m (indexer event) #

index an event at a given point in time

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> indexer event -> m (indexer event) #

Index a bunch of event, associated to their point in time, in an indexer

The events must be sorted in ascending order (the most recent first)

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> indexer event -> m (indexer event) #

Index a bunch of event, associated to their point in time, in an indexer

The events must be sorted in descending order (the most recent first)

rollback :: Ord (Point event) => Point event -> indexer event -> m (indexer event) #

Rollback to a previous point

setLastStablePoint :: Ord (Point event) => Point event -> indexer event -> m (indexer event) #

Set the last stable point known by the indexer. Note that the last stable point should always increase, so implementation should usually filter out lower stable points.

Instances

Instances details
(MonadIO m, MonadError IndexerError m) => IsIndex m a LastEventIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastEventIndexer

(MonadIO m, MonadError IndexerError m) => IsIndex m event Coordinator # 
Instance details

Defined in Marconi.Core.Coordinator

Methods

index :: Timed (Point event) (Maybe event) -> Coordinator event -> m (Coordinator event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> Coordinator event -> m (Coordinator event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> Coordinator event -> m (Coordinator event) #

rollback :: Point event -> Coordinator event -> m (Coordinator event) #

setLastStablePoint :: Point event -> Coordinator event -> m (Coordinator event) #

(HasGenesis (Point event), Monad m) => IsIndex m event LastPointIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastPointIndexer

Methods

index :: Timed (Point event) (Maybe event) -> LastPointIndexer event -> m (LastPointIndexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> LastPointIndexer event -> m (LastPointIndexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> LastPointIndexer event -> m (LastPointIndexer event) #

rollback :: Point event -> LastPointIndexer event -> m (LastPointIndexer event) #

setLastStablePoint :: Point event -> LastPointIndexer event -> m (LastPointIndexer event) #

Monad m => IsIndex m event ListIndexer # 
Instance details

Defined in Marconi.Core.Indexer.ListIndexer

Methods

index :: Timed (Point event) (Maybe event) -> ListIndexer event -> m (ListIndexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> ListIndexer event -> m (ListIndexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> ListIndexer event -> m (ListIndexer event) #

rollback :: Point event -> ListIndexer event -> m (ListIndexer event) #

setLastStablePoint :: Point event -> ListIndexer event -> m (ListIndexer event) #

(MonadIO m, MonadError IndexerError m, ToRow (Point event)) => IsIndex m event SQLiteIndexer # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteIndexer

Methods

index :: Timed (Point event) (Maybe event) -> SQLiteIndexer event -> m (SQLiteIndexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> SQLiteIndexer event -> m (SQLiteIndexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> SQLiteIndexer event -> m (SQLiteIndexer event) #

rollback :: Point event -> SQLiteIndexer event -> m (SQLiteIndexer event) #

setLastStablePoint :: Point event -> SQLiteIndexer event -> m (SQLiteIndexer event) #

(MonadIO io, MonadError IndexerError io) => IsIndex io event (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

index :: Timed (Point event) (Maybe event) -> FileIndexer meta event -> io (FileIndexer meta event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> FileIndexer meta event -> io (FileIndexer meta event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> FileIndexer meta event -> io (FileIndexer meta event) #

rollback :: Point event -> FileIndexer meta event -> io (FileIndexer meta event) #

setLastStablePoint :: Point event -> FileIndexer meta event -> io (FileIndexer meta event) #

(MonadIO m, MonadError IndexerError m, IsIndex m event indexer) => IsIndex m event (WithAction indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithAction

Methods

index :: Timed (Point event) (Maybe event) -> WithAction indexer event -> m (WithAction indexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithAction indexer event -> m (WithAction indexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithAction indexer event -> m (WithAction indexer event) #

rollback :: Point event -> WithAction indexer event -> m (WithAction indexer event) #

setLastStablePoint :: Point event -> WithAction indexer event -> m (WithAction indexer event) #

(MonadIO m, IsIndex m event indexer, Ord (Point event)) => IsIndex m event (WithCatchup indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCatchup

Methods

index :: Timed (Point event) (Maybe event) -> WithCatchup indexer event -> m (WithCatchup indexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithCatchup indexer event -> m (WithCatchup indexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithCatchup indexer event -> m (WithCatchup indexer event) #

rollback :: Point event -> WithCatchup indexer event -> m (WithCatchup indexer event) #

setLastStablePoint :: Point event -> WithCatchup indexer event -> m (WithCatchup indexer event) #

(Monad m, IsIndex m event indexer, Ord (Point event)) => IsIndex m event (WithDelay indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithDelay

Methods

index :: Timed (Point event) (Maybe event) -> WithDelay indexer event -> m (WithDelay indexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithDelay indexer event -> m (WithDelay indexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithDelay indexer event -> m (WithDelay indexer event) #

rollback :: Point event -> WithDelay indexer event -> m (WithDelay indexer event) #

setLastStablePoint :: Point event -> WithDelay indexer event -> m (WithDelay indexer event) #

(MonadError IndexerError m, Ord (Point event), Prunable m event indexer, IsIndex m event indexer, HasGenesis (Point event)) => IsIndex m event (WithPruning indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

index :: Timed (Point event) (Maybe event) -> WithPruning indexer event -> m (WithPruning indexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithPruning indexer event -> m (WithPruning indexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithPruning indexer event -> m (WithPruning indexer event) #

rollback :: Point event -> WithPruning indexer event -> m (WithPruning indexer event) #

setLastStablePoint :: Point event -> WithPruning indexer event -> m (WithPruning indexer event) #

(Ord (Point event), Flushable m event mem, Traversable (Container mem), IsIndex m event store, IsIndex m event mem, IsSync m event mem) => IsIndex m event (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

index :: Timed (Point event) (Maybe event) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

rollback :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

setLastStablePoint :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

IsIndex m event indexer => IsIndex m event (IndexTransformer config indexer) # 
Instance details

Defined in Marconi.Core.Transformer.IndexTransformer

Methods

index :: Timed (Point event) (Maybe event) -> IndexTransformer config indexer event -> m (IndexTransformer config indexer event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> IndexTransformer config indexer event -> m (IndexTransformer config indexer event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> IndexTransformer config indexer event -> m (IndexTransformer config indexer event) #

rollback :: Point event -> IndexTransformer config indexer event -> m (IndexTransformer config indexer event) #

setLastStablePoint :: Point event -> IndexTransformer config indexer event -> m (IndexTransformer config indexer event) #

(Applicative m, IsIndex m event index, Queryable m event query index) => IsIndex m event (WithCache query index) #

This instances update all the cached queries with the incoming event and then pass this event to the underlying indexer.

Instance details

Defined in Marconi.Core.Transformer.WithCache

Methods

index :: Timed (Point event) (Maybe event) -> WithCache query index event -> m (WithCache query index event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithCache query index event -> m (WithCache query index event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithCache query index event -> m (WithCache query index event) #

rollback :: Point event -> WithCache query index event -> m (WithCache query index event) #

setLastStablePoint :: Point event -> WithCache query index event -> m (WithCache query index event) #

(MonadIO m, MonadError IndexerError m, IsIndex m event index) => IsIndex m event (WithTrace m index) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

index :: Timed (Point event) (Maybe event) -> WithTrace m index event -> m (WithTrace m index event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTrace m index event -> m (WithTrace m index event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTrace m index event -> m (WithTrace m index event) #

rollback :: Point event -> WithTrace m index event -> m (WithTrace m index event) #

setLastStablePoint :: Point event -> WithTrace m index event -> m (WithTrace m index event) #

(Applicative m, IsIndex m event index) => IsIndex m event (WithTracer m index) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

index :: Timed (Point event) (Maybe event) -> WithTracer m index event -> m (WithTracer m index event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTracer m index event -> m (WithTracer m index event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTracer m index event -> m (WithTracer m index event) #

rollback :: Point event -> WithTracer m index event -> m (WithTracer m index event) #

setLastStablePoint :: Point event -> WithTracer m index event -> m (WithTracer m index event) #

(Point output ~ Point input, IsIndex m output indexer, Ord (Point output)) => IsIndex m input (WithTransform indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithTransform

Methods

index :: Timed (Point input) (Maybe input) -> WithTransform indexer output input -> m (WithTransform indexer output input) #

indexAll :: (Eq (Point input), Traversable f) => f (Timed (Point input) (Maybe input)) -> WithTransform indexer output input -> m (WithTransform indexer output input) #

indexAllDescending :: (Eq (Point input), Traversable f) => f (Timed (Point input) (Maybe input)) -> WithTransform indexer output input -> m (WithTransform indexer output input) #

rollback :: Point input -> WithTransform indexer output input -> m (WithTransform indexer output input) #

setLastStablePoint :: Point input -> WithTransform indexer output input -> m (WithTransform indexer output input) #

(HasGenesis (Point output), Point input ~ Point output, IsSync m output indexer, IsIndex m output indexer, Ord (Point output)) => IsIndex m input (WithFold m indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithFold

Methods

index :: Timed (Point input) (Maybe input) -> WithFold m indexer output input -> m (WithFold m indexer output input) #

indexAll :: (Eq (Point input), Traversable f) => f (Timed (Point input) (Maybe input)) -> WithFold m indexer output input -> m (WithFold m indexer output input) #

indexAllDescending :: (Eq (Point input), Traversable f) => f (Timed (Point input) (Maybe input)) -> WithFold m indexer output input -> m (WithFold m indexer output input) #

rollback :: Point input -> WithFold m indexer output input -> m (WithFold m indexer output input) #

setLastStablePoint :: Point input -> WithFold m indexer output input -> m (WithFold m indexer output input) #

(MonadTrans t, MonadIO m, MonadIO (t m), MonadError IndexerError (t m), IsIndex (t m) event index) => IsIndex (t m) event (WithTrace m index) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

index :: Timed (Point event) (Maybe event) -> WithTrace m index event -> t m (WithTrace m index event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTrace m index event -> t m (WithTrace m index event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTrace m index event -> t m (WithTrace m index event) #

rollback :: Point event -> WithTrace m index event -> t m (WithTrace m index event) #

setLastStablePoint :: Point event -> WithTrace m index event -> t m (WithTrace m index event) #

(MonadTrans t, Monad m, Monad (t m), IsIndex (t m) event index) => IsIndex (t m) event (WithTracer m index) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

index :: Timed (Point event) (Maybe event) -> WithTracer m index event -> t m (WithTracer m index event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTracer m index event -> t m (WithTracer m index event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> WithTracer m index event -> t m (WithTracer m index event) #

rollback :: Point event -> WithTracer m index event -> t m (WithTracer m index event) #

setLastStablePoint :: Point event -> WithTracer m index event -> t m (WithTracer m index event) #

indexIfJust #

Arguments

:: IsIndex m event indexer 
=> (Timed (Point event) event -> indexer event -> m (indexer event))

the function that adds the event

-> (Point event -> indexer event -> m (indexer event))

the function that update the last point, called in any case

-> Timed (Point event) (Maybe event) 
-> indexer event 
-> m (indexer event) 

If the event is Nothing, just updat the last sync event. Otherwise, store the event and update the last sync event.

indexEither :: (IsIndex (ExceptT err m) event indexer, Eq (Point event)) => Timed (Point event) (Maybe event) -> indexer event -> m (Either err (indexer event)) #

Like index, but internalise its error in the result.

It's useful when you don't want to internalise the error in the monad stack to handle it explicitly, it's often used when we target IO as we don't want to mess with IOException.

indexAllEither :: (IsIndex (ExceptT err m) event indexer, Traversable f, Ord (Point event)) => f (Timed (Point event) (Maybe event)) -> indexer event -> m (Either err (indexer event)) #

Like indexAll, but internalise the error in the result.

indexAllDescendingEither :: (IsIndex (ExceptT err m) event indexer, Traversable f, Ord (Point event)) => f (Timed (Point event) (Maybe event)) -> indexer event -> m (Either err (indexer event)) #

Like indexAllDescending, but internalise the error in the result.

class HasGenesis (Point event) => Resetable m event indexer where #

We can reset an indexer, clearing all its content

  • indexer is the indexer implementation type
  • event the indexer events
  • m the monad in which our indexer operates

Methods

reset :: indexer event -> m (indexer event) #

Instances

Instances details
(HasGenesis (Point event), Applicative m) => Resetable m event ListIndexer # 
Instance details

Defined in Marconi.Core.Indexer.ListIndexer

Methods

reset :: ListIndexer event -> m (ListIndexer event) #

(Applicative m, Resetable m event indexer) => Resetable m event (WithCatchup indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCatchup

Methods

reset :: WithCatchup indexer event -> m (WithCatchup indexer event) #

(Applicative m, Resetable m event indexer) => Resetable m event (WithDelay indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithDelay

Methods

reset :: WithDelay indexer event -> m (WithDelay indexer event) #

(Monad m, Prunable m event indexer, Resetable m event indexer, HasGenesis (Point event), Ord (Point event)) => Resetable m event (WithPruning indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

reset :: WithPruning indexer event -> m (WithPruning indexer event) #

(Monad m, Resetable m event index, HasGenesis (Point event), Ord (Point event), Queryable m event query index) => Resetable m event (WithCache query index) #

Rollback the underlying indexer, clear the cache, repopulate it with queries to the underlying indexer.

Instance details

Defined in Marconi.Core.Transformer.WithCache

Methods

reset :: WithCache query index event -> m (WithCache query index event) #

(HasGenesis (Point event), Functor m, Resetable m event indexer) => Resetable m event (WithTrace m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

reset :: WithTrace m indexer event -> m (WithTrace m indexer event) #

(HasGenesis (Point event), Functor m, Resetable m event indexer) => Resetable m event (WithTracer m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

reset :: WithTracer m indexer event -> m (WithTracer m indexer event) #

(Functor m, Resetable m output indexer, HasGenesis (Point event)) => Resetable m event (WithTransform indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithTransform

Methods

reset :: WithTransform indexer output event -> m (WithTransform indexer output event) #

(Functor m, Resetable m output indexer, HasGenesis (Point event)) => Resetable m event (WithFold m indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithFold

Methods

reset :: WithFold m indexer output event -> m (WithFold m indexer output event) #

(MonadTrans t, Monad m, Monad (t m), HasGenesis (Point event), Resetable (t m) event indexer) => Resetable (t m) event (WithTrace m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

reset :: WithTrace m indexer event -> t m (WithTrace m indexer event) #

(MonadTrans t, Monad m, Monad (t m), HasGenesis (Point event), Resetable (t m) event indexer) => Resetable (t m) event (WithTracer m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

reset :: WithTracer m indexer event -> t m (WithTracer m indexer event) #

class Queryable m event query indexer where #

The indexer can answer a Query to produce the corresponding result of that query.

  • indexer is the indexer implementation type
  • event the indexer events
  • query the type of query we want to answer
  • m the monad in which our indexer operates

Minimal complete definition

query

Methods

query :: Ord (Point event) => Point event -> query -> indexer event -> m (Result query) #

Query an indexer at a given point in time It can be read as: "With the knowledge you have at that point in time, what is your answer to this query?"

queryLatest :: (IsSync m event indexer, Monad m, Ord (Point event)) => query -> indexer event -> m (Result query) #

Like query, but use the latest point of the indexer instead of a provided one

Instances

Instances details
Queryable m event query indexer => Queryable m event query (WithAction indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithAction

Methods

query :: Point event -> query -> WithAction indexer event -> m (Result query) #

queryLatest :: query -> WithAction indexer event -> m (Result query) #

Queryable m event query indexer => Queryable m event query (WithCatchup indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCatchup

Methods

query :: Point event -> query -> WithCatchup indexer event -> m (Result query) #

queryLatest :: query -> WithCatchup indexer event -> m (Result query) #

Queryable m event query indexer => Queryable m event query (WithDelay indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithDelay

Methods

query :: Point event -> query -> WithDelay indexer event -> m (Result query) #

queryLatest :: query -> WithDelay indexer event -> m (Result query) #

Queryable m event query indexer => Queryable m event query (WithPruning indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

query :: Point event -> query -> WithPruning indexer event -> m (Result query) #

queryLatest :: query -> WithPruning indexer event -> m (Result query) #

(AppendResult m event query ListIndexer, Queryable m event query store) => Queryable m event query (MixedIndexer store ListIndexer) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

query :: Point event -> query -> MixedIndexer store ListIndexer event -> m (Result query) #

queryLatest :: query -> MixedIndexer store ListIndexer event -> m (Result query) #

Queryable m event query indexer => Queryable m event query (IndexTransformer config indexer) # 
Instance details

Defined in Marconi.Core.Transformer.IndexTransformer

Methods

query :: Point event -> query -> IndexTransformer config indexer event -> m (Result query) #

queryLatest :: query -> IndexTransformer config indexer event -> m (Result query) #

(Ord query, Ord (Point event), IsSync m event index, MonadError (QueryError query) m, Monad m, Queryable m event query index) => Queryable m event query (WithCache query index) # 
Instance details

Defined in Marconi.Core.Transformer.WithCache

Methods

query :: Point event -> query -> WithCache query index event -> m (Result query) #

queryLatest :: query -> WithCache query index event -> m (Result query) #

(Queryable m event query indexer, MonadIO m, MonadError (QueryError e) m) => Queryable m event query (WithTrace IO indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

query :: Point event -> query -> WithTrace IO indexer event -> m (Result query) #

queryLatest :: query -> WithTrace IO indexer event -> m (Result query) #

Queryable m event query indexer => Queryable m event query (WithTracer n indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

query :: Point event -> query -> WithTracer n indexer event -> m (Result query) #

queryLatest :: query -> WithTracer n indexer event -> m (Result query) #

(Queryable m output query indexer, Point output ~ Point input) => Queryable m input query (WithTransform indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithTransform

Methods

query :: Point input -> query -> WithTransform indexer output input -> m (Result query) #

queryLatest :: query -> WithTransform indexer output input -> m (Result query) #

(Queryable m output query indexer, Point input ~ Point output) => Queryable m input query (WithFold n indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithFold

Methods

query :: Point input -> query -> WithFold n indexer output input -> m (Result query) #

queryLatest :: query -> WithFold n indexer output input -> m (Result query) #

(MonadIO m, MonadError (QueryError (GetLastQuery event)) m) => Queryable m event (GetLastQuery event) LastEventIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastEventIndexer

Methods

query :: Point event -> GetLastQuery event -> LastEventIndexer event -> m (Result (GetLastQuery event)) #

queryLatest :: GetLastQuery event -> LastEventIndexer event -> m (Result (GetLastQuery event)) #

MonadError (QueryError (EventAtQuery event)) m => Queryable m event (EventAtQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventAtQuery event -> ListIndexer event -> m (Result (EventAtQuery event)) #

queryLatest :: EventAtQuery event -> ListIndexer event -> m (Result (EventAtQuery event)) #

MonadError (QueryError (EventsFromQuery event)) m => Queryable m event (EventsFromQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventsFromQuery event -> ListIndexer event -> m (Result (EventsFromQuery event)) #

queryLatest :: EventsFromQuery event -> ListIndexer event -> m (Result (EventsFromQuery event)) #

MonadError (QueryError (EventsMatchingQuery event)) m => Queryable m event (EventsMatchingQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventsMatchingQuery event -> ListIndexer event -> m (Result (EventsMatchingQuery event)) #

queryLatest :: EventsMatchingQuery event -> ListIndexer event -> m (Result (EventsMatchingQuery event)) #

MonadError (QueryError (LatestEventsQuery event)) m => Queryable m event (LatestEventsQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> LatestEventsQuery event -> ListIndexer event -> m (Result (LatestEventsQuery event)) #

queryLatest :: LatestEventsQuery event -> ListIndexer event -> m (Result (LatestEventsQuery event)) #

(MonadIO m, MonadError (QueryError (EventAtQuery event)) m) => Queryable m event (EventAtQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventAtQuery event -> FileIndexer meta event -> m (Result (EventAtQuery event)) #

queryLatest :: EventAtQuery event -> FileIndexer meta event -> m (Result (EventAtQuery event)) #

(MonadIO m, MonadError (QueryError (EventsFromQuery event)) m) => Queryable m event (EventsFromQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventsFromQuery event -> FileIndexer meta event -> m (Result (EventsFromQuery event)) #

queryLatest :: EventsFromQuery event -> FileIndexer meta event -> m (Result (EventsFromQuery event)) #

(MonadIO m, MonadError (QueryError (LatestEventsQuery event)) m) => Queryable m event (LatestEventsQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> LatestEventsQuery event -> FileIndexer meta event -> m (Result (LatestEventsQuery event)) #

queryLatest :: LatestEventsQuery event -> FileIndexer meta event -> m (Result (LatestEventsQuery event)) #

queryEither :: Queryable (ExceptT (QueryError query) m) event query indexer => Ord (Point event) => Point event -> query -> indexer event -> m (Either (QueryError query) (Result query)) #

Like 'queryEither, but internalise QueryError in the result.

queryLatestEither :: Queryable (ExceptT (QueryError query) m) event query indexer => IsSync m event indexer => Monad m => Ord (Point event) => query -> indexer event -> m (Either (QueryError query) (Result query)) #

Like queryEither, but use the latest point of the indexer instead of a provided one

class AppendResult m event query indexer where #

The indexer can take a result and complete it with its events

Methods

appendResult :: Ord (Point event) => Point event -> query -> indexer event -> m (Result query) -> m (Result query) #

Instances

Instances details
MonadError (QueryError (EventAtQuery event)) m => AppendResult m event (EventAtQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

appendResult :: Point event -> EventAtQuery event -> ListIndexer event -> m (Result (EventAtQuery event)) -> m (Result (EventAtQuery event)) #

MonadError (QueryError (EventsFromQuery event)) m => AppendResult m event (EventsFromQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

appendResult :: Point event -> EventsFromQuery event -> ListIndexer event -> m (Result (EventsFromQuery event)) -> m (Result (EventsFromQuery event)) #

MonadError (QueryError (EventsMatchingQuery event)) m => AppendResult m event (EventsMatchingQuery event) ListIndexer # 
Instance details

Defined in Marconi.Core.Query

Methods

appendResult :: Point event -> EventsMatchingQuery event -> ListIndexer event -> m (Result (EventsMatchingQuery event)) -> m (Result (EventsMatchingQuery event)) #

class Closeable m indexer where #

We know how to close an indexer

Methods

close :: indexer event -> m () #

Instances

Instances details
MonadIO m => Closeable m Coordinator # 
Instance details

Defined in Marconi.Core.Coordinator

Methods

close :: Coordinator event -> m () #

MonadIO m => Closeable m LastEventIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastEventIndexer

Methods

close :: LastEventIndexer event -> m () #

Applicative m => Closeable m ListIndexer # 
Instance details

Defined in Marconi.Core.Indexer.ListIndexer

Methods

close :: ListIndexer event -> m () #

MonadIO m => Closeable m SQLiteIndexer # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteIndexer

Methods

close :: SQLiteIndexer event -> m () #

(MonadIO m, MonadError IndexerError m) => Closeable m (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

close :: FileIndexer meta event -> m () #

Closeable m indexer => Closeable m (WithAction indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithAction

Methods

close :: WithAction indexer event -> m () #

Closeable m indexer => Closeable m (WithCatchup indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCatchup

Methods

close :: WithCatchup indexer event -> m () #

Closeable m indexer => Closeable m (WithDelay indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithDelay

Methods

close :: WithDelay indexer event -> m () #

Closeable m indexer => Closeable m (WithPruning indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

close :: WithPruning indexer event -> m () #

(Closeable m store, Closeable m mem, Monad m) => Closeable m (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

close :: MixedIndexer store mem event -> m () #

MonadIO m => Closeable m (SQLiteAggregateQuery m point) # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteAggregateQuery

Methods

close :: SQLiteAggregateQuery m point event -> m () #

Closeable m index => Closeable m (IndexTransformer config index) # 
Instance details

Defined in Marconi.Core.Transformer.IndexTransformer

Methods

close :: IndexTransformer config index event -> m () #

Closeable m indexer => Closeable m (WithCache query indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCache

Methods

close :: WithCache query indexer event -> m () #

(MonadIO m, Closeable m indexer) => Closeable m (WithTrace m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

close :: WithTrace m indexer event -> m () #

(Applicative m, Closeable m indexer) => Closeable m (WithTracer m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

close :: WithTracer m indexer event -> m () #

Closeable m indexer => Closeable m (WithTransform indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithTransform

Methods

close :: WithTransform indexer output event -> m () #

Closeable m indexer => Closeable m (WithFold m indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithFold

Methods

close :: WithFold m indexer output event -> m () #

(MonadTrans t, MonadIO (t m), MonadIO m, MonadError IndexerError (t m), Closeable (t m) indexer) => Closeable (t m) (WithTrace m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

close :: WithTrace m indexer event -> t m () #

(MonadTrans t, Applicative (t m), Monad m, Closeable (t m) indexer) => Closeable (t m) (WithTracer m indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

close :: WithTracer m indexer event -> t m () #

class Functor m => IsSync m event indexer where #

We know how far an indexer went in the indexation of events.

Methods

lastStablePoint :: indexer event -> m (Point event) #

Get the latest stable point known by the indexer

lastSyncPoint :: indexer event -> m (Point event) #

Last sync point of the indexer.

Instances

Instances details
(Ord (Point event), MonadIO m, MonadError IndexerError m) => IsSync m event Coordinator # 
Instance details

Defined in Marconi.Core.Coordinator

Methods

lastStablePoint :: Coordinator event -> m (Point event) #

lastSyncPoint :: Coordinator event -> m (Point event) #

Applicative m => IsSync m event LastEventIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastEventIndexer

Methods

lastStablePoint :: LastEventIndexer event -> m (Point event) #

lastSyncPoint :: LastEventIndexer event -> m (Point event) #

Applicative m => IsSync m event LastPointIndexer # 
Instance details

Defined in Marconi.Core.Indexer.LastPointIndexer

Methods

lastStablePoint :: LastPointIndexer event -> m (Point event) #

lastSyncPoint :: LastPointIndexer event -> m (Point event) #

Applicative m => IsSync m event ListIndexer # 
Instance details

Defined in Marconi.Core.Indexer.ListIndexer

Methods

lastStablePoint :: ListIndexer event -> m (Point event) #

lastSyncPoint :: ListIndexer event -> m (Point event) #

Monad m => IsSync m event SQLiteIndexer # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteIndexer

Methods

lastStablePoint :: SQLiteIndexer event -> m (Point event) #

lastSyncPoint :: SQLiteIndexer event -> m (Point event) #

Applicative m => IsSync m event (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

lastStablePoint :: FileIndexer meta event -> m (Point event) #

lastSyncPoint :: FileIndexer meta event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithAction indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithAction

Methods

lastStablePoint :: WithAction indexer event -> m (Point event) #

lastSyncPoint :: WithAction indexer event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithCatchup indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCatchup

Methods

lastStablePoint :: WithCatchup indexer event -> m (Point event) #

lastSyncPoint :: WithCatchup indexer event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithDelay indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithDelay

Methods

lastStablePoint :: WithDelay indexer event -> m (Point event) #

lastSyncPoint :: WithDelay indexer event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithPruning indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

lastStablePoint :: WithPruning indexer event -> m (Point event) #

lastSyncPoint :: WithPruning indexer event -> m (Point event) #

(IsSync event m mem, Monad event) => IsSync event m (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

lastStablePoint :: MixedIndexer store mem m -> event (Point m) #

lastSyncPoint :: MixedIndexer store mem m -> event (Point m) #

IsSync event m index => IsSync event m (IndexTransformer config index) # 
Instance details

Defined in Marconi.Core.Transformer.IndexTransformer

Methods

lastStablePoint :: IndexTransformer config index m -> event (Point m) #

lastSyncPoint :: IndexTransformer config index m -> event (Point m) #

(MonadIO m, Ord point, point ~ Point event) => IsSync m event (SQLiteAggregateQuery m point) # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteAggregateQuery

Methods

lastStablePoint :: SQLiteAggregateQuery m point event -> m (Point event) #

lastSyncPoint :: SQLiteAggregateQuery m point event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithCache query indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithCache

Methods

lastStablePoint :: WithCache query indexer event -> m (Point event) #

lastSyncPoint :: WithCache query indexer event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithTrace n indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

lastStablePoint :: WithTrace n indexer event -> m (Point event) #

lastSyncPoint :: WithTrace n indexer event -> m (Point event) #

IsSync m event indexer => IsSync m event (WithTracer n indexer) # 
Instance details

Defined in Marconi.Core.Transformer.WithTracer

Methods

lastStablePoint :: WithTracer n indexer event -> m (Point event) #

lastSyncPoint :: WithTracer n indexer event -> m (Point event) #

(Point output ~ Point event, IsSync m output indexer) => IsSync m event (WithTransform indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithTransform

Methods

lastStablePoint :: WithTransform indexer output event -> m (Point event) #

lastSyncPoint :: WithTransform indexer output event -> m (Point event) #

(Point output ~ Point event, IsSync m output indexer) => IsSync m event (WithFold m indexer output) # 
Instance details

Defined in Marconi.Core.Transformer.WithFold

Methods

lastStablePoint :: WithFold m indexer output event -> m (Point event) #

lastSyncPoint :: WithFold m indexer output event -> m (Point event) #

(MonadIO m, MonadTrans t, Monad (t m), Ord point, point ~ Point event) => IsSync (t m) event (SQLiteAggregateQuery m point) # 
Instance details

Defined in Marconi.Core.Indexer.SQLiteAggregateQuery

Methods

lastStablePoint :: SQLiteAggregateQuery m point event -> t m (Point event) #

lastSyncPoint :: SQLiteAggregateQuery m point event -> t m (Point event) #

isAheadOfSync :: (Ord (Point event), IsSync m event indexer) => Point event -> indexer event -> m Bool #

Check if the given point is ahead of the last syncPoint of an indexer

class HasGenesis t where #

Any type that has a starting point

Methods

genesis :: t #