module Control.Wire.Prefab.Sample
(
discrete,
keep
)
where
import Control.Arrow
import Control.Wire.Classes
import Control.Wire.Prefab.Simple
import Control.Wire.Types
discrete ::
forall b e t (>~). (ArrowClock (>~), Num t, Ord t, Time (>~) ~ t)
=> Wire e (>~) (t, b) b
discrete =
mkGen $ proc (_, x) -> do
t <- arrTime -< ()
returnA -< (Right x, discrete' t x)
where
discrete' :: t -> b -> Wire e (>~) (t, b) b
discrete' t' x0 =
mkGen $ proc (dt, x) -> do
t <- arrTime -< ()
returnA -<
if (t t' >= dt)
then (Right x, discrete' t x)
else (Right x0, discrete' t' x0)
keep :: Wire e (>~) b b
keep = mkPure $ \x -> (Right x, constant x)