box-0.2.0: boxes

Safe HaskellNone
LanguageHaskell2010

Box.Connectors

Description

various ways to connect things up

Synopsis

Documentation

fuse_ :: Monad m => Emitter m a -> Committer m a -> m () Source #

fuse an emitter directly to a committer

fuseSTM_ :: MonadConc m => Emitter (STM m) a -> Committer (STM m) a -> m () Source #

slightly more efficient version

fuse :: Monad m => (a -> m (Maybe b)) -> Cont m (Box m b a) -> m () Source #

fuse a box

(fuse (pure . Just) $ liftB <$> (Box <$> cStdout 2 <*> emitter')) >> sleep 1

hi bye

etc () (Transducer id) == fuse (pure . pure) . fmap liftB

fuseSTM :: MonadConc m => (a -> STM m (Maybe b)) -> Cont m (Box (STM m) b a) -> m () Source #

fuse a box with an STM mapMaybe action

forkEmit :: Monad m => Emitter m a -> Committer m a -> Emitter m a Source #

fuse-branch an 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

feedbackE :: MonadConc m => (a -> m (Maybe a)) -> Emitter m a -> Cont m (Emitter m a) Source #

an emitter post-processor that cons transformed emissions back into the emitter

fuseEmit :: MonadConc m => Emitter (STM m) a -> Cont m (Emitter (STM m) a) Source #

fuse an emitter to a buffer

fuseEmitM :: MonadConc m => Emitter m a -> Cont m (Emitter m a) Source #

fuse an emitter to a buffer

fuseCommit :: MonadConc m => Committer (STM m) a -> Cont m (Committer (STM m) a) Source #

fuse a committer to a buffer

fuseCommitM :: MonadConc m => Committer m a -> Cont m (Committer m a) Source #

fuse a committer to a buffer

emerge :: MonadConc m => Cont m (Emitter (STM m) a, Emitter (STM m) a) -> Cont m (Emitter (STM m) a) Source #

merge two emitters

This differs from `liftA2 (<>)` in that the monoidal (and alternative) instance of an Emitter is left-biased (The left emitter exhausts before the right one is begun). This merge is concurrent.

emergeM :: MonadConc m => Cont m (Emitter m a, Emitter m a) -> Cont m (Emitter m a) Source #

monadic version

splitCommit :: MonadConc m => Cont m (Committer m a) -> Cont m (Either (Committer m a) (Committer m a)) Source #

split a committer

splitCommitSTM :: MonadConc m => Cont m (Committer (STM m) a) -> Cont m (Either (Committer (STM m) a) (Committer (STM m) a)) Source #

split a committer (STM m)

contCommit :: Either (Committer m a) (Committer m b) -> (Committer m a -> Committer m b) -> Committer m b Source #

use a split committer