import FRP.Netwire hiding (when) import Prelude hiding ((.), id) import Data.Time.Clock import Control.Wire hiding (when) import Control.Wire.Session import Control.Monad import qualified Graphics.UI.SDL as SDL netwireIsCool :: (Monad m) => Wire (Timed NominalDiffTime ()) () m a String netwireIsCool = for 2.5 . pure "Once upon a time..." --> for 3 . pure "... games were completely imperative..." --> for 2 . pure "... but then..." --> for 10 . (pure "Netwire 5! " <> anim) --> netwireIsCool where anim = holdFor 0.5 . periodic 1 . pure "Hoo..." <|> pure "...ray!" --main :: IO () --main = testWire clockSession_ netwireIsCool main = SDL.withInit [SDL.InitVideo, SDL.InitTimer, SDL.InitJoystick] $ do loop clockSession_ netwireIsCool "" where loop s w x = do (ds, s') <- stepSession s (ex, w') <- stepWire w ds (Right x) let x' = either (const "") id ex Control.Monad.when (x /= x' && x /= "") $ putStrLn x let framerate = 30 let delay = 1000 `div` framerate - 1000 * (floor $ dtime ds) SDL.delay (delay) loop s' w' x'