delta-0.2.1.0: src/System/Delta/FRPUtils.hs
module System.Delta.FRPUtils where
import Control.Concurrent
import Control.Monad
import FRP.Sodium
data Ticker a = Ticker{ tickerInterval :: Int
, tickerEvent :: Event a
, tickerTerminate :: IO ()
}
periodical :: Int -- ^ Milliseconds
-> a -- ^ Item that is sent periodically
-> IO (Ticker a)
periodical ms v = do
(e,push) <- sync $ newEvent
tId <- forkIO . forever $ do
threadDelay $ 1000 * ms
sync $ push v
return $ Ticker ms e (killThread tId)