Safe Haskell | None |
---|---|
Language | Haskell2010 |
various ways to connect things up
Synopsis
- fromListE :: MonadConc m => [a] -> Cont m (Emitter m a)
- fromList_ :: Monad m => [a] -> Committer m a -> m ()
- toList_ :: Monad m => Emitter m a -> m [a]
- fromToList_ :: Monad m => [a] -> (Box (StateT (Seq b, Seq a) m) b a -> StateT (Seq b, Seq a) m r) -> m [b]
- emitQ :: MonadConc m => (Committer m a -> m r) -> Cont m (Emitter m a)
- commitQ :: MonadConc m => (Emitter m a -> m r) -> Cont m (Committer m a)
- sink :: MonadConc m => Int -> (a -> m ()) -> Cont m (Committer m a)
- source :: MonadConc m => Int -> m a -> Cont m (Emitter m a)
- forkEmit :: Monad m => Emitter m a -> Committer m a -> Emitter m a
- feedback :: MonadConc m => (a -> m (Maybe b)) -> Cont m (Box m b a) -> Cont m (Box m b a)
- queueCommitter :: MonadConc m => Committer m a -> Cont m (Committer m a)
- queueEmitter :: MonadConc m => Emitter m a -> Cont m (Emitter m a)
- concurrentE :: MonadConc m => Emitter m a -> Emitter m a -> Cont m (Emitter m a)
- concurrentC :: MonadConc m => Committer m a -> Committer m a -> Cont m (Committer m a)
- glueN :: Monad m => Int -> Committer m a -> Emitter m a -> m ()
Documentation
fromList_ :: Monad m => [a] -> Committer m a -> m () Source #
fromList_ directly supplies to a committer action
FIXME: fromList_ combined with cRef is failing dejavu concurrency testing...
toList_ :: Monad m => Emitter m a -> m [a] Source #
toList_ directly receives from an emitter
TODO: check isomorphism
toList_ == toListE
fromToList_ :: Monad m => [a] -> (Box (StateT (Seq b, Seq a) m) b a -> StateT (Seq b, Seq a) m r) -> m [b] Source #
take a list, emit it through a box, and output the committed result.
The pure nature of this computation is highly useful for testing, especially where parts of the box under investigation has non-deterministic attributes.
emitQ :: MonadConc m => (Committer m a -> m r) -> Cont m (Emitter m a) Source #
hook a committer action to a queue, creating an emitter continuation
commitQ :: MonadConc m => (Emitter m a -> m r) -> Cont m (Committer m a) Source #
hook a committer action to a queue, creating an emitter continuation
forkEmit :: Monad m => Emitter m a -> Committer m a -> Emitter m a Source #
glues an emitter to a committer, then resupplies the emitter
feedback :: MonadConc m => (a -> m (Maybe b)) -> Cont m (Box m b a) -> Cont m (Box m b a) Source #
a box modifier that feeds commits back to the emitter
queueCommitter :: MonadConc m => Committer m a -> Cont m (Committer m a) Source #
fuse a committer to a buffer
queueEmitter :: MonadConc m => Emitter m a -> Cont m (Emitter m a) Source #
fuse an emitter to a buffer
concurrentE :: MonadConc m => Emitter m a -> Emitter m a -> Cont m (Emitter m a) Source #
concurrently run two emitters
This differs from mappend in that the monoidal (and alternative) instance of an Emitter is left-biased (The left emitter exhausts before the right one is begun). This is non-deterministically concurrent.