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

Marconi.Core.Query

Description

A set of queries that can be implemented by any indexer

See Marconi.Core for documentation.

Synopsis

Documentation

data EventAtQuery event #

Get the event stored by the indexer at a given point in time

Constructors

EventAtQuery 

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 (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)) #

(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)) #

Show (EventAtQuery event) # 
Instance details

Defined in Marconi.Core.Query

Eq (EventAtQuery event) # 
Instance details

Defined in Marconi.Core.Query

Methods

(==) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

(/=) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

Ord (EventAtQuery event) # 
Instance details

Defined in Marconi.Core.Query

Methods

compare :: EventAtQuery event -> EventAtQuery event -> Ordering Source #

(<) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

(<=) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

(>) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

(>=) :: EventAtQuery event -> EventAtQuery event -> Bool Source #

max :: EventAtQuery event -> EventAtQuery event -> EventAtQuery event Source #

min :: EventAtQuery event -> EventAtQuery event -> EventAtQuery event Source #

type Result (EventAtQuery event) #

The result of EventAtQuery is always an event. The error cases are handled by the query interface.

Instance details

Defined in Marconi.Core.Query

type Result (EventAtQuery event) = Maybe event

newtype EventsMatchingQuery event #

Query an indexer to find all events that match a given predicate

The result should return the most recent first

Constructors

EventsMatchingQuery (event -> Maybe event) 

Instances

Instances details
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)) #

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)) #

type Result (EventsMatchingQuery event) #

The result of an EventMatchingQuery

Instance details

Defined in Marconi.Core.Query

type Result (EventsMatchingQuery event) = [Timed (Point event) event]
type Result (WithStability (EventsMatchingQuery event)) # 
Instance details

Defined in Marconi.Core.Query

type Result (WithStability (EventsMatchingQuery event)) = [Stability (Timed (Point event) event)]

allEvents :: EventsMatchingQuery event #

Get all the events that are stored in the indexer

newtype LatestEventsQuery event #

Get the nbOfEvents last non empty events from the indexer before the point given in the query

Constructors

LatestEventsQuery Word 

Instances

Instances details
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 (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)) #

type Result (LatestEventsQuery event) # 
Instance details

Defined in Marconi.Core.Query

type Result (LatestEventsQuery event) = [Timed (Point event) event]

latestEvent :: LatestEventsQuery event #

Get the latest non empty event before the point given in the query

newtype EventsFromQuery event #

Get the non empty events from the given point (excluded) to the one of the query (included)

Constructors

EventsFromQuery (Point event) 

Instances

Instances details
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 (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)) #

(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)) #

type Result (EventsFromQuery event) # 
Instance details

Defined in Marconi.Core.Query

type Result (EventsFromQuery event) = [Timed (Point event) event]
type Result (WithStability (EventsFromQuery event)) # 
Instance details

Defined in Marconi.Core.Query

type Result (WithStability (EventsFromQuery event)) = [Stability (Timed (Point event) event)]

data Stability a #

Represents whether an event is considered to stable or not.

Constructors

Stable a 
Volatile a 

Instances

Instances details
Foldable Stability # 
Instance details

Defined in Marconi.Core.Query

Methods

fold :: Monoid m => Stability m -> m Source #

foldMap :: Monoid m => (a -> m) -> Stability a -> m Source #

foldMap' :: Monoid m => (a -> m) -> Stability a -> m Source #

foldr :: (a -> b -> b) -> b -> Stability a -> b Source #

foldr' :: (a -> b -> b) -> b -> Stability a -> b Source #

foldl :: (b -> a -> b) -> b -> Stability a -> b Source #

foldl' :: (b -> a -> b) -> b -> Stability a -> b Source #

foldr1 :: (a -> a -> a) -> Stability a -> a Source #

foldl1 :: (a -> a -> a) -> Stability a -> a Source #

toList :: Stability a -> [a] Source #

null :: Stability a -> Bool Source #

length :: Stability a -> Int Source #

elem :: Eq a => a -> Stability a -> Bool Source #

maximum :: Ord a => Stability a -> a Source #

minimum :: Ord a => Stability a -> a Source #

sum :: Num a => Stability a -> a Source #

product :: Num a => Stability a -> a Source #

Traversable Stability # 
Instance details

Defined in Marconi.Core.Query

Methods

traverse :: Applicative f => (a -> f b) -> Stability a -> f (Stability b) Source #

sequenceA :: Applicative f => Stability (f a) -> f (Stability a) Source #

mapM :: Monad m => (a -> m b) -> Stability a -> m (Stability b) Source #

sequence :: Monad m => Stability (m a) -> m (Stability a) Source #

Functor Stability # 
Instance details

Defined in Marconi.Core.Query

Methods

fmap :: (a -> b) -> Stability a -> Stability b Source #

(<$) :: a -> Stability b -> Stability a Source #

Comonad Stability # 
Instance details

Defined in Marconi.Core.Query

Methods

extract :: Stability a -> a

duplicate :: Stability a -> Stability (Stability a)

extend :: (Stability a -> b) -> Stability a -> Stability b

Show a => Show (Stability a) # 
Instance details

Defined in Marconi.Core.Query

Eq a => Eq (Stability a) # 
Instance details

Defined in Marconi.Core.Query

Ord a => Ord (Stability a) # 
Instance details

Defined in Marconi.Core.Query

isStable :: Stability a -> Bool #

Tests for stability

calcStability :: Ord point => (event -> point) -> point -> event -> Stability event #

Helper function to wrap an event in Stability based on the last stable point and a given way to get a point.

Asks: Is the provided point less than (from a time before) or equal to (from the time of) the last stable point?

newtype WithStability query #

A wrapper representing the demand that the result of a query should come with Stability data

Constructors

WithStability 

Fields

Instances

Instances details
type Result (WithStability (EventsFromQuery event)) # 
Instance details

Defined in Marconi.Core.Query

type Result (WithStability (EventsFromQuery event)) = [Stability (Timed (Point event) event)]
type Result (WithStability (EventsMatchingQuery event)) # 
Instance details

Defined in Marconi.Core.Query

type Result (WithStability (EventsMatchingQuery event)) = [Stability (Timed (Point event) event)]

withStabilityM #

Arguments

:: (Result query ~ f event, Result (WithStability query) ~ f (Stability event), MonadError (QueryError (WithStability query)) m, Traversable f) 
=> (event -> Stability event)

A function to calculate Stability of an event

-> ExceptT (QueryError query) m (f event)

In ExceptT action whose result is an event

-> m (f (Stability event)) 

Convert a non-Stability supporting instance to a Stability supporting instance.

withStability #

Arguments

:: forall event m indexer f. (Monad m, Ord (Point event), IsSync m event indexer, Traversable f) 
=> indexer event

An indexer

-> f (Timed (Point event) event)

A traversable of query results

-> m (f (Stability (Timed (Point event) event))) 

Given an indexer and some traversable of timed query results, calculate the stability of all the query results.

withStabilityAt #

Arguments

:: forall result m event indexer f. (Monad m, Ord (Point event), IsSync m event indexer, Applicative f) 
=> indexer event

An indexer

-> Point event

A specific point to compare against the last stable point

-> f result

A traversable of query results

-> m (f (Stability result)) 

Given an indexer, a Point and some traversable of query results, calculate the stability of all the query results.

queryErrorWithStability :: (Result (WithStability query) ~ f (Stability event), Result query ~ f event) => (f event -> f (Stability event)) -> QueryError query -> QueryError (WithStability query) #