module FRP.Timeless.Run
(
testSignal
, runBox
)
where
import Control.Monad.IO.Class
import FRP.Timeless.Session
import FRP.Timeless.Signal
import Data.Functor.Identity
import System.IO
testSignal ::
(MonadIO m, Show b)
=> Session m s
-> (forall a. Signal s Identity a b)
-> m c
testSignal s0 n0 = loop s0 n0
where
loop s n = do
(ds, s') <- stepSession s
let Identity (mx, n') = stepSignal n ds (Just ())
liftIO $ do
putChar '\r'
putStr (maybe "Inhibited" show mx)
putStr "\027[K"
hFlush stdout
loop s' n'
runBox :: (Monad m) => Session m s -> Signal s m () () -> m ()
runBox s n = do
(ds, s') <- stepSession s
(mq, n') <- stepSignal n ds (Just ())
case mq of
Just _ -> runBox s' n'
Nothing -> return ()