{-# language FlexibleContexts, TypeFamilies #-}
module Main where
import Reflex
import Reflex.Host.Basic
import Control.Concurrent (threadDelay)
import Control.Monad.Fix (MonadFix)
import Control.Monad.IO.Class (liftIO)
myNetwork :: (Reflex t, MonadHold t m, MonadFix m) => Event t () -> m (Dynamic t Int)
myNetwork eTick = count eTick
myGuest :: BasicGuestConstraints t m => BasicGuest t m ((), Event t ())
myGuest = do
(eTick, sendTick) <- newTriggerEvent
dCount <- myNetwork eTick
let
eCountUpdated = updated dCount
eQuit = () <$ ffilter (==5) eCountUpdated
repeatUntilQuit (threadDelay 1000000 *> sendTick ()) eQuit
performEvent_ $ liftIO . print <$> eCountUpdated
pure ((), eQuit)
main :: IO ()
main = basicHostWithQuit myGuest