Safe Haskell | None |
---|
- delay :: (ArrowApply a, Occasional b) => ProcessA a b b
- hold :: ArrowApply a => b -> ProcessA a (Event b) b
- accum :: ArrowApply a => b -> ProcessA a (Event (b -> b)) b
- edge :: (ArrowApply a, Eq b) => ProcessA a b (Event b)
- passRecent :: (ArrowApply a, Occasional o) => ProcessA a e (Event b) -> ProcessA a (e, b) o -> ProcessA a e o
- withRecent :: (ArrowApply a, Occasional o) => ProcessA a (e, b) o -> ProcessA a (e, Event b) o
- feedback1 :: (ArrowApply a, Occasional d) => ProcessA a (e, d) (c, d) -> ProcessA a e c
- feedback :: (ArrowApply a, Occasional d) => ProcessA a (e, d) b -> ProcessA a (e, b) (c, d) -> ProcessA a e c
- switch :: ArrowApply a => ProcessA a b (c, Event t) -> (t -> ProcessA a b c) -> ProcessA a b c
- dSwitch :: ArrowApply a => ProcessA a b (c, Event t) -> (t -> ProcessA a b c) -> ProcessA a b c
- rSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, Event (ProcessA a b c)) c
- drSwitch :: ArrowApply a => ProcessA a b c -> ProcessA a (b, Event (ProcessA a b c)) c
- 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 c
- 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 c
- 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)
- 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)
- 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)
- 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)
- tee :: ArrowApply a => ProcessA a (Event b1, Event b2) (Event (Either b1 b2))
- gather :: (ArrowApply a, Foldable f) => ProcessA a (f (Event b)) (Event b)
- sample :: ArrowApply a => ProcessA a (Event b1, Event b2) [b1]
- source :: ArrowApply a => [c] -> ProcessA a (Event b) (Event c)
- fork :: (ArrowApply a, Foldable f) => ProcessA a (Event (f b)) (Event b)
- filter :: ArrowApply a => a o Bool -> ProcessA a (Event o) (Event o)
- echo :: ArrowApply a => ProcessA a (Event b) (Event b)
- anytime :: ArrowApply a => a b c -> ProcessA a (Event b) (Event c)
- par :: (ArrowApply a, Traversable col) => (forall sf. b -> col sf -> col (ext, sf)) -> col (ProcessA a ext c) -> ProcessA a b (col c)
- parB :: (ArrowApply a, Traversable col) => col (ProcessA a b c) -> ProcessA a b (col c)
- onEnd :: (ArrowApply a, Occasional b) => ProcessA a b (Event ())
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
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
feedback1 :: (ArrowApply a, Occasional d) => ProcessA a (e, d) (c, d) -> ProcessA a e cSource
Event version of loop (member of ArrowLoop
).
Yielding an event to feedback output always creates a new process cycle.
So be careful to make an infinite loop.
feedback :: (ArrowApply a, Occasional d) => ProcessA a (e, d) b -> ProcessA a (e, b) (c, d) -> ProcessA a e cSource
Artificially split into two arrow to use binary operator notation rather than banana brackets.
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
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
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.
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