libraft-0.5.0.0: Raft consensus algorithm

Safe HaskellNone
LanguageHaskell2010

Raft.Monad

Synopsis

Documentation

class Monad m => MonadRaftChan v m where Source #

The typeclass specifying the datatype used as the core event channel in the main raft event loop, as well as functions for creating, reading, and writing to the channel, and how to fork a computation that performs some action with the channel.

Note: This module uses AllowAmbiguousTypes which removes the necessity for Proxy value arguments in lieu of TypeApplication. For example:

  newRaftChan @v

instead of

  newRaftChan (Proxy :: Proxy v)

Associated Types

type RaftEventChan v m Source #

Instances
MonadRaftChan v ConcIO Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftEventChan v ConcIO :: Type Source #

MonadRaftChan v IO Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftEventChan v IO :: Type Source #

MonadRaftChan v m => MonadRaftChan v (RaftPostgresT m) Source # 
Instance details

Defined in Raft.Log.PostgreSQL

Associated Types

type RaftEventChan v (RaftPostgresT m) :: Type Source #

MonadRaftChan v m => MonadRaftChan v (RaftPersistFileStoreT m) Source # 
Instance details

Defined in Examples.Raft.FileStore.Persistent

Associated Types

type RaftEventChan v (RaftPersistFileStoreT m) :: Type Source #

MonadRaftChan v m => MonadRaftChan v (RaftLogFileStoreT m) Source # 
Instance details

Defined in Examples.Raft.FileStore.Log

Associated Types

type RaftEventChan v (RaftLogFileStoreT m) :: Type Source #

MonadRaftChan v m => MonadRaftChan v (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftEventChan v (RaftSocketT sm v m) :: Type Source #

class Monad m => MonadRaftFork m where Source #

The typeclass encapsulating the concurrency operations necessary for the implementation of the main event handling loop.

Associated Types

type RaftThreadId m Source #

Methods

raftFork Source #

Arguments

:: RaftThreadRole

The role of the current thread being forked

-> m ()

The action to fork

-> m (RaftThreadId m) 
Instances
MonadRaftFork IO Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftThreadId IO :: Type Source #

MonadRaftFork ConcIO Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftThreadId ConcIO :: Type Source #

(MonadIO m, MonadRaftFork m) => MonadRaftFork (RaftPostgresT m) Source # 
Instance details

Defined in Raft.Log.PostgreSQL

Associated Types

type RaftThreadId (RaftPostgresT m) :: Type Source #

(MonadIO m, MonadRaftFork m) => MonadRaftFork (RaftPersistFileStoreT m) Source # 
Instance details

Defined in Examples.Raft.FileStore.Persistent

Associated Types

type RaftThreadId (RaftPersistFileStoreT m) :: Type Source #

(MonadIO m, MonadRaftFork m) => MonadRaftFork (RaftLogFileStoreT m) Source # 
Instance details

Defined in Examples.Raft.FileStore.Log

Associated Types

type RaftThreadId (RaftLogFileStoreT m) :: Type Source #

MonadRaftFork m => MonadRaftFork (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftThreadId (RaftT v m) :: Type Source #

Methods

raftFork :: RaftThreadRole -> RaftT v m () -> RaftT v m (RaftThreadId (RaftT v m)) Source #

(MonadIO m, MonadRaftFork m) => MonadRaftFork (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftThreadId (RaftSocketT sm v m) :: Type Source #

Methods

raftFork :: RaftThreadRole -> RaftSocketT sm v m () -> RaftSocketT sm v m (RaftThreadId (RaftSocketT sm v m)) Source #

data RaftEnv v m Source #

The raft server environment composed of the concurrent variables used in the effectful raft layer.

Instances
Monad m => MonadReader (RaftEnv v m) (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

ask :: RaftT v m (RaftEnv v m) #

local :: (RaftEnv v m -> RaftEnv v m) -> RaftT v m a -> RaftT v m a #

reader :: (RaftEnv v m -> a) -> RaftT v m a #

initializeRaftEnv :: MonadIO m => RaftEventChan v m -> m () -> m () -> RaftNodeConfig -> LogCtx (RaftT v m) -> m (RaftEnv v m) Source #

data RaftT v m a Source #

Instances
Monad m => RaftLogger v (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

MonadTrans (RaftT v) Source # 
Instance details

Defined in Raft.Monad

Methods

lift :: Monad m => m a -> RaftT v m a #

Monad m => MonadState (RaftNodeState v) (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

get :: RaftT v m (RaftNodeState v) #

put :: RaftNodeState v -> RaftT v m () #

state :: (RaftNodeState v -> (a, RaftNodeState v)) -> RaftT v m a #

Monad m => Monad (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

(>>=) :: RaftT v m a -> (a -> RaftT v m b) -> RaftT v m b #

(>>) :: RaftT v m a -> RaftT v m b -> RaftT v m b #

return :: a -> RaftT v m a #

fail :: String -> RaftT v m a #

Functor m => Functor (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

fmap :: (a -> b) -> RaftT v m a -> RaftT v m b #

(<$) :: a -> RaftT v m b -> RaftT v m a #

MonadFail m => MonadFail (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

fail :: String -> RaftT v m a #

Monad m => Applicative (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

pure :: a -> RaftT v m a #

(<*>) :: RaftT v m (a -> b) -> RaftT v m a -> RaftT v m b #

liftA2 :: (a -> b -> c) -> RaftT v m a -> RaftT v m b -> RaftT v m c #

(*>) :: RaftT v m a -> RaftT v m b -> RaftT v m b #

(<*) :: RaftT v m a -> RaftT v m b -> RaftT v m a #

MonadPlus m => Alternative (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

empty :: RaftT v m a #

(<|>) :: RaftT v m a -> RaftT v m a -> RaftT v m a #

some :: RaftT v m a -> RaftT v m [a] #

many :: RaftT v m a -> RaftT v m [a] #

MonadPlus m => MonadPlus (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

mzero :: RaftT v m a #

mplus :: RaftT v m a -> RaftT v m a -> RaftT v m a #

MonadIO m => MonadIO (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

liftIO :: IO a -> RaftT v m a #

MonadThrow m => MonadThrow (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

throwM :: Exception e => e -> RaftT v m a #

MonadCatch m => MonadCatch (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

catch :: Exception e => RaftT v m a -> (e -> RaftT v m a) -> RaftT v m a #

MonadMask m => MonadMask (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

mask :: ((forall a. RaftT v m a -> RaftT v m a) -> RaftT v m b) -> RaftT v m b #

uninterruptibleMask :: ((forall a. RaftT v m a -> RaftT v m a) -> RaftT v m b) -> RaftT v m b #

generalBracket :: RaftT v m a -> (a -> ExitCase b -> RaftT v m c) -> (a -> RaftT v m b) -> RaftT v m (b, c) #

Monad m => MonadMetrics (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

getMetrics :: RaftT v m Metrics #

MonadRaftFork m => MonadRaftFork (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Associated Types

type RaftThreadId (RaftT v m) :: Type Source #

Methods

raftFork :: RaftThreadRole -> RaftT v m () -> RaftT v m (RaftThreadId (RaftT v m)) Source #

Monad m => MonadReader (RaftEnv v m) (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

Methods

ask :: RaftT v m (RaftEnv v m) #

local :: (RaftEnv v m -> RaftEnv v m) -> RaftT v m a -> RaftT v m a #

reader :: (RaftEnv v m -> a) -> RaftT v m a #

type RaftThreadId (RaftT v m) Source # 
Instance details

Defined in Raft.Monad

runRaftT :: Monad m => RaftNodeState v -> RaftEnv v m -> RaftT v m a -> m a Source #

logInfo :: MonadIO m => Text -> RaftT v m () Source #

logDebug :: MonadIO m => Text -> RaftT v m () Source #

logCritical :: MonadIO m => Text -> RaftT v m () Source #