bearriver-0.14.12: FRP Yampa replacement implemented with Monadic Stream Functions.
Copyright(c) Ivan Perez 2014-2022
(c) George Giorgidze 2007-2012
(c) Henrik Nilsson 2005-2006
(c) Antony Courtney and Henrik Nilsson Yale University 2003-2004
LicenseBSD-style (see the LICENSE file in the distribution)
Maintainerivan.perez@keera.co.uk
Stabilityprovisional
Portabilitynon-portable (GHC extensions)
Safe HaskellSafe-Inferred
LanguageHaskell2010

FRP.BearRiver.Conditional

Description

Apply SFs only under certain conditions.

Synopsis

Guards and automata-oriented combinators

provided :: Monad m => (a -> Bool) -> SF m a b -> SF m a b -> SF m 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])
[0.0,1.0,2.0,0.0,2.0,4.0,0.0,1.0,2.0,0.0,2.0,4.0]

Variable pause

pause :: Monad m => b -> SF m a Bool -> SF m a b -> SF m 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.