keid-core-0.1.8.0: Core parts of Keid engine.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Engine.Worker

Synopsis

Documentation

data Versioned a Source #

Constructors

Versioned 

Fields

Instances

Instances details
Foldable Versioned Source # 
Instance details

Defined in Engine.Worker

Methods

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

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

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

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

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

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

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

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

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

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

null :: Versioned a -> Bool Source #

length :: Versioned a -> Int Source #

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

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

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

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

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

Traversable Versioned Source # 
Instance details

Defined in Engine.Worker

Methods

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

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

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

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

Functor Versioned Source # 
Instance details

Defined in Engine.Worker

Methods

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

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

Show a => Show (Versioned a) Source # 
Instance details

Defined in Engine.Worker

Eq (Versioned a) Source # 
Instance details

Defined in Engine.Worker

Ord (Versioned a) Source # 
Instance details

Defined in Engine.Worker

HasInput (Var a) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetInput (Var a) Source #

Methods

getInput :: Var a -> Var (GetInput (Var a)) Source #

HasOutput (Var a) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Var a) Source #

Methods

getOutput :: Var a -> Var (GetOutput (Var a)) Source #

type GetInput (Var a) Source # 
Instance details

Defined in Engine.Worker

type GetInput (Var a) = a
type GetOutput (Var a) Source # 
Instance details

Defined in Engine.Worker

type GetOutput (Var a) = a

type Var a = TVar (Versioned a) Source #

newVar :: MonadUnliftIO m => a -> m (Var a) Source #

readVar :: MonadUnliftIO m => Var a -> m a Source #

stateVar :: HasInput var => var -> StateVar (GetInput var) Source #

stateVarMap :: HasInput var => (GetInput var -> a) -> (a -> GetInput var -> GetInput var) -> var -> StateVar a Source #

class HasInput a where Source #

Associated Types

type GetInput a Source #

Methods

getInput :: a -> Var (GetInput a) Source #

Instances

Instances details
HasInput (Var a) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetInput (Var a) Source #

Methods

getInput :: Var a -> Var (GetInput (Var a)) Source #

HasInput a => HasInput (a, b) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetInput (a, b) Source #

Methods

getInput :: (a, b) -> Var (GetInput (a, b)) Source #

pushInput :: (MonadIO m, HasInput var) => var -> (GetInput var -> GetInput var) -> m () Source #

pushInputSTM :: HasInput var => var -> (GetInput var -> GetInput var) -> STM () Source #

updateInput :: (MonadIO m, HasInput var) => var -> (GetInput var -> Maybe (GetInput var)) -> m () Source #

updateInputSTM :: HasInput var => var -> (GetInput var -> Maybe (GetInput var)) -> STM () Source #

getInputData :: (HasInput worker, MonadIO m) => worker -> m (GetInput worker) Source #

getInputDataSTM :: HasInput worker => worker -> STM (GetInput worker) Source #

class HasConfig a where Source #

Associated Types

type GetConfig a Source #

Methods

getConfig :: a -> TVar (GetConfig a) Source #

Instances

Instances details
HasConfig (TVar a) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetConfig (TVar a) Source #

Methods

getConfig :: TVar a -> TVar (GetConfig (TVar a)) Source #

HasConfig (Timed config output) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetConfig (Timed config output) Source #

Methods

getConfig :: Timed config output -> TVar (GetConfig (Timed config output)) Source #

modifyConfig :: (MonadIO m, HasConfig var) => var -> (GetConfig var -> GetConfig var) -> m () Source #

modifyConfigSTM :: HasConfig var => var -> (GetConfig var -> GetConfig var) -> STM () Source #

class HasOutput a where Source #

Associated Types

type GetOutput a Source #

Methods

getOutput :: a -> Var (GetOutput a) Source #

Instances

Instances details
HasOutput (Merge o) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Merge o) Source #

Methods

getOutput :: Merge o -> Var (GetOutput (Merge o)) Source #

HasOutput (Var a) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Var a) Source #

Methods

getOutput :: Var a -> Var (GetOutput (Var a)) Source #

HasOutput (Timed config output) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Timed config output) Source #

Methods

getOutput :: Timed config output -> Var (GetOutput (Timed config output)) Source #

HasOutput b => HasOutput (a, b) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (a, b) Source #

Methods

getOutput :: (a, b) -> Var (GetOutput (a, b)) Source #

pushOutput :: (MonadIO m, HasOutput var) => var -> (GetOutput var -> GetOutput var) -> m () Source #

pushOutputSTM :: HasOutput var => var -> (GetOutput var -> GetOutput var) -> STM () Source #

updateOutput :: (MonadIO m, HasOutput var) => var -> (GetOutput var -> Maybe (GetOutput var)) -> m () Source #

updateOutputSTM :: HasOutput var => var -> (GetOutput var -> Maybe (GetOutput var)) -> STM () Source #

getOutputData :: (HasOutput worker, MonadIO m) => worker -> m (GetOutput worker) Source #

getOutputDataSTM :: HasOutput worker => worker -> STM (GetOutput worker) Source #

type Cell input output = (Var input, Merge output) Source #

Updatable cell for composite input or costly output.

spawnCell :: (MonadUnliftIO m, MonadResource m) => (input -> output) -> input -> m (Cell input output) Source #

data Timed config output Source #

Timer-driven stateful producer.

Constructors

Timed 

Fields

Instances

Instances details
HasConfig (Timed config output) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetConfig (Timed config output) Source #

Methods

getConfig :: Timed config output -> TVar (GetConfig (Timed config output)) Source #

HasOutput (Timed config output) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Timed config output) Source #

Methods

getOutput :: Timed config output -> Var (GetOutput (Timed config output)) Source #

type GetConfig (Timed config output) Source # 
Instance details

Defined in Engine.Worker

type GetConfig (Timed config output) = config
type GetOutput (Timed config output) Source # 
Instance details

Defined in Engine.Worker

type GetOutput (Timed config output) = output

spawnTimed :: (MonadUnliftIO m, MonadResource m) => Bool -> Either Int (config -> Int) -> (config -> m (output, state)) -> (state -> config -> m (Maybe output, state)) -> config -> m (Timed config output) Source #

spawnTimed_ :: (MonadUnliftIO m, MonadResource m) => Bool -> Int -> output -> m output -> m (Timed () output) Source #

data Merge o Source #

Supply-driven step cell.

Constructors

Merge 

Instances

Instances details
HasOutput (Merge o) Source # 
Instance details

Defined in Engine.Worker

Associated Types

type GetOutput (Merge o) Source #

Methods

getOutput :: Merge o -> Var (GetOutput (Merge o)) Source #

type GetOutput (Merge o) Source # 
Instance details

Defined in Engine.Worker

type GetOutput (Merge o) = o

spawnMerge1 :: (MonadUnliftIO m, MonadResource m, HasOutput i) => (GetOutput i -> o) -> i -> m (Merge o) Source #

spawnMerge2 :: (MonadUnliftIO m, MonadResource m, HasOutput i1, HasOutput i2) => (GetOutput i1 -> GetOutput i2 -> o) -> i1 -> i2 -> m (Merge o) Source #

spawnMerge3 :: (MonadUnliftIO m, MonadResource m, HasOutput i1, HasOutput i2, HasOutput i3) => (GetOutput i1 -> GetOutput i2 -> GetOutput i3 -> o) -> i1 -> i2 -> i3 -> m (Merge o) Source #

spawnMerge4 :: (MonadUnliftIO m, MonadResource m, HasOutput i1, HasOutput i2, HasOutput i3, HasOutput i4) => (GetOutput i1 -> GetOutput i2 -> GetOutput i3 -> GetOutput i4 -> o) -> i1 -> i2 -> i3 -> i4 -> m (Merge o) Source #

spawnMergeT :: (Traversable t, HasOutput input, MonadUnliftIO m, MonadResource m) => (t (GetOutput input) -> output) -> t input -> m (Merge output) Source #

Spawn a merge over a homogeneous traversable collection of processes.

A merging function will receive a collection of outputs to summarize.

observeIO :: (MonadUnliftIO m, HasOutput output) => output -> ObserverIO a -> (a -> GetOutput output -> m a) -> m a Source #

observeIO_ :: (MonadUnliftIO m, HasOutput output) => output -> ObserverIO a -> (a -> GetOutput output -> m a) -> m () Source #

data Source a Source #

pubSource :: (MonadUnliftIO m, UnagiPrim a) => Source a -> a -> m () Source #