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