machinecell-1.0.1: Arrow based stream transducers

Safe HaskellNone

Control.Arrow.Machine.Utils

Contents

Synopsis

AFRP-like utilities

delay :: (ArrowApply a, Occasional b) => ProcessA a b bSource

hold :: ArrowApply a => b -> ProcessA a (Event b) bSource

accum :: ArrowApply a => b -> ProcessA a (Event (b -> b)) bSource

edge :: (ArrowApply a, Eq b) => ProcessA a b (Event b)Source

passRecent :: (ArrowApply a, Occasional o) => ProcessA a e (Event b) -> ProcessA a (e, b) o -> ProcessA a e oSource

withRecent :: (ArrowApply a, Occasional o) => ProcessA a (e, b) o -> ProcessA a (e, Event b) oSource

Switches

Switches inspired by Yampa library. Signature is almost same, but collection requirement is not only Functor, but Traversable. This is because of side effects.

switch :: ArrowApply a => ProcessA a b (c, Event t) -> (t -> ProcessA a b c) -> ProcessA a b cSource

dSwitch :: ArrowApply a => ProcessA a b (c, Event t) -> (t -> ProcessA a b c) -> ProcessA a b cSource

rSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, Event (ProcessA a b c)) cSource

drSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, Event (ProcessA a b c)) cSource

kSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, c) (Event t) -> (ProcessA a b c -> t -> ProcessA a b c) -> ProcessA a b cSource

dkSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, c) (Event t) -> (ProcessA a b c -> t -> ProcessA a b c) -> ProcessA a b cSource

pSwitch :: (ArrowApply a, Traversable col) => (forall sf. b -> col sf -> col (ext, sf)) -> col (ProcessA a ext c) -> ProcessA a (b, col c) (Event mng) -> (col (ProcessA a ext c) -> mng -> ProcessA a b (col c)) -> ProcessA a b (col c)Source

pSwitchB :: (ArrowApply a, Traversable col) => col (ProcessA a b c) -> ProcessA a (b, col c) (Event mng) -> (col (ProcessA a b c) -> mng -> ProcessA a b (col c)) -> ProcessA a b (col c)Source

rpSwitch :: (ArrowApply a, Traversable col) => (forall sf. b -> col sf -> col (ext, sf)) -> col (ProcessA a ext c) -> ProcessA a (b, Event (col (ProcessA a ext c) -> col (ProcessA a ext c))) (col c)Source

rpSwitchB :: (ArrowApply a, Traversable col) => col (ProcessA a b c) -> ProcessA a (b, Event (col (ProcessA a b c) -> col (ProcessA a b c))) (col c)Source

Other utility arrows

tee :: ArrowApply a => ProcessA a (Event b1, Event b2) (Event (Either b1 b2))Source

gather :: (ArrowApply a, Foldable f) => ProcessA a (f (Event b)) (Event b)Source

sample :: ArrowApply a => ProcessA a (Event b1, Event b2) [b1]Source

source :: ArrowApply a => [c] -> ProcessA a (Event b) (Event c)Source

It's also possible that source is defined without any await.

But awaits are useful to synchronize other inputs.

fork :: (ArrowApply a, Foldable f) => ProcessA a (Event (f b)) (Event b)Source

filter :: ArrowApply a => a o Bool -> ProcessA a (Event o) (Event o)Source

echo :: ArrowApply a => ProcessA a (Event b) (Event b)Source

anytime :: ArrowApply a => a b c -> ProcessA a (Event b) (Event c)Source

par :: (ArrowApply a, Traversable col) => (forall sf. b -> col sf -> col (ext, sf)) -> col (ProcessA a ext c) -> ProcessA a b (col c)Source

parB :: (ArrowApply a, Traversable col) => col (ProcessA a b c) -> ProcessA a b (col c)Source

onEnd :: (ArrowApply a, Occasional b) => ProcessA a b (Event ())Source