Yampa-0.11: Library for programming hybrid systems.

Safe HaskellNone



Apply SFs only under certain conditions.



provided :: (a -> Bool) -> SF a b -> SF a b -> SF a b Source #

Runs a signal function only when a given predicate is satisfied, otherwise runs the other signal function.

This is similar to ArrowChoice, except that this resets the SFs after each transition.

For example, the following integrates the incoming input numbers, using one integral if the numbers are even, and another if the input numbers are odd. Note how, every time we "switch", the old value of the integral is discarded.

>>> embed (provided (even . round) integral integral) (deltaEncode 1 [1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2 :: Double])

pause :: b -> SF a Bool -> SF a b -> SF a b Source #

Given a value in an accumulator (b), a predicate signal function (sfC), and a second signal function (sf), pause will produce the accumulator b if sfC input is True, and will transform the signal using sf otherwise. It acts as a pause with an accumulator for the moments when the transformation is paused.