Maintainer | Ertugrul Soeylemez <es@ertes.de> |
---|

Switching combinators. Note that `Wire`

also provides a
state-preserving `Control.Arrow.ArrowApply`

instance, which may be
more convenient than these combinators in many cases.

- switch :: Monad m => Wire m a (b, Event c) -> (c -> Wire m a b) -> Wire m a b
- dSwitch :: Monad m => Wire m a (b, Event c) -> (c -> Wire m a b) -> Wire m a b
- rSwitch :: Monad m => Wire m a b -> Wire m (a, Event (Wire m a b)) b
- drSwitch :: Monad m => Wire m a b -> Wire m (a, Event (Wire m a b)) b
- parB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m a (f b)
- rpSwitchB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m (a, Event (f (Wire m a b) -> f (Wire m a b))) (f b)
- drpSwitchB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m (a, Event (f (Wire m a b) -> f (Wire m a b))) (f b)
- par :: (Applicative m, Monad m, Traversable f) => (forall w. a -> f w -> f (b, w)) -> f (Wire m b c) -> Wire m a (f c)
- rpSwitch :: (Applicative m, Monad m, Traversable f) => (forall w. a -> f w -> f (b, w)) -> f (Wire m b c) -> Wire m (a, Event (f (Wire m b c) -> f (Wire m b c))) (f c)
- drpSwitch :: (Applicative m, Monad m, Traversable f) => (forall w. a -> f w -> f (b, w)) -> f (Wire m b c) -> Wire m (a, Event (f (Wire m b c) -> f (Wire m b c))) (f c)

# Basic switches

switch :: Monad m => Wire m a (b, Event c) -> (c -> Wire m a b) -> Wire m a bSource

This is the most basic switching combinator. It is an event-based one-time switch.

The first argument is the initial wire, which may produce a switching event at some point. When this event is produced, then the signal path switches to the wire produced by the second argument function.

dSwitch :: Monad m => Wire m a (b, Event c) -> (c -> Wire m a b) -> Wire m a bSource

Decoupled variant of `switch`

.

rSwitch :: Monad m => Wire m a b -> Wire m (a, Event (Wire m a b)) bSource

Combinator for recurrent switches. The wire produced by this switch takes switching events and switches to the wires contained in the events. The first argument is the initial wire.

drSwitch :: Monad m => Wire m a b -> Wire m (a, Event (Wire m a b)) bSource

Decoupled variant of `rSwitch`

.

# Broadcasters

parB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m a (f b)Source

Broadcast signal to a collection of signal functions. If any of the wires inhibits, then the whole parallel network inhibits.

rpSwitchB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m (a, Event (f (Wire m a b) -> f (Wire m a b))) (f b)Source

drpSwitchB :: (Applicative m, Monad m, Traversable f) => f (Wire m a b) -> Wire m (a, Event (f (Wire m a b) -> f (Wire m a b))) (f b)Source

Decoupled variant of `rpSwitchB`

.

# Routers

par :: (Applicative m, Monad m, Traversable f) => (forall w. a -> f w -> f (b, w)) -> f (Wire m b c) -> Wire m a (f c)Source

Route signal to a collection of signal functions using the supplied routing function. If any of the wires inhibits, the whole network inhibits.

rpSwitch :: (Applicative m, Monad m, Traversable f) => (forall w. a -> f w -> f (b, w)) -> f (Wire m b c) -> Wire m (a, Event (f (Wire m b c) -> f (Wire m b c))) (f c)Source