packages feed

reflex-basic-host-0.1: example/Counter.hs

{-# 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