module Control.Wire.Controller
(
animate,
control,
newEvent,
onEvent,
stepWire
)
where
import Control.Wire.Internal
animate :: (Applicative m) => Wire m (m a) a
animate = let w = Wire (fmap (, w)) in w
control :: (Monad m) => Wire m () (Event b) -> m b
control w' = do
(mx, w) <- stepWire w' ()
event (control w) pure mx
newEvent :: (Functor m) => Wire m (m (Maybe b)) (Event b)
newEvent = Wire $ fmap (\mx -> (maybe NotNow Now mx, newEvent))
onEvent :: (Applicative m) => Wire m (Event (m a)) (Event a)
onEvent =
Wire $
event (pure (NotNow, onEvent))
(fmap $ \x -> (Now x, onEvent))