module FRP.Spice.Graphics.Scene ( Scene
, fromElements
, renderScene
) where
import Control.Applicative
import Control.Monad
import FRP.Spice.Graphics.Element
data SceneT a = SceneT [Element] a
type Scene = SceneT ()
instance Functor SceneT where
fmap fn (SceneT elements v) = SceneT elements $ fn v
instance Applicative SceneT where
pure = return
(<*>) = ap
instance Monad SceneT where
return a = SceneT [] a
(SceneT elements v) >>= fn =
let (SceneT elements' v') = fn v in
SceneT (elements ++ elements') v'
fromElements :: [Element] -> Scene
fromElements elements =
SceneT elements ()
renderScene :: Scene -> IO ()
renderScene (SceneT elements _) =
forM_ elements renderElement