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

Marconi.Core.Worker

Description

Workers are wrapper around indexers that hide there type parameters.

See Core for documentation.

Synopsis

Documentation

data WorkerIndexer m input event indexer #

Worker which also provides direct access to the indexer hidden inside it.

Constructors

WorkerIndexer 

Fields

type WorkerIndexerType n event indexer = (IsIndex n event indexer, IsSync n event indexer, Closeable n indexer) #

Type alias for the type classes that are required to build a worker for an indexer

data WorkerM m input point #

A worker hides the shape of an indexer and integrates the data needed to interact with a coordinator.

Constructors

forall indexer event n.(WorkerIndexerType n event indexer, Point event ~ point) => Worker 

Fields

type Worker = WorkerM IO #

A worker that operates in IO.

createWorker :: (MonadIO f, WorkerIndexerType (ExceptT IndexerError m) event indexer) => Text -> (input -> Maybe event) -> indexer event -> f (WorkerIndexer m input event indexer) #

create a worker for an indexer that already throws IndexerError

createWorkerPure :: (MonadIO f, MonadIO m, WorkerIndexerType m event indexer) => Text -> Preprocessor (ExceptT IndexerError m) (Point event) input event -> indexer event -> f (WorkerIndexer m input event indexer) #

create a worker for an indexer that doesn't throw error

createWorkerHoist :: (MonadIO f, WorkerIndexerType n event indexer) => (forall a. n a -> ExceptT IndexerError m a) -> Text -> Preprocessor (ExceptT IndexerError m) (Point event) input event -> indexer event -> f (WorkerIndexer m input event indexer) #

create a worker for an indexer, retuning the worker and the MVar it's using internally

createWorkerWithPreprocessing :: (MonadIO f, WorkerIndexerType (ExceptT IndexerError m) event indexer) => Text -> Preprocessor (ExceptT IndexerError m) (Point event) input event -> indexer event -> f (WorkerIndexer m input event indexer) #

create a worker for an indexer that already throws IndexerError

startWorker :: forall input m. MonadIO m => Ord (Point input) => TChan (ProcessedInput (Point input) input) -> MVar IndexerError -> QSemN -> QSemN -> Worker input (Point input) -> m ThreadId #

The worker notify its coordinator that it's ready and starts waiting for new events and process them as they come