import Haste import Haste.Graphics.Canvas import Haste.DOM import Pages ball :: Double -> Picture () ball y = fill $ circle (100,y) 10 fall :: Canvas -> Elem -> Int -> IO () fall can boom v = do render can $ ball y if y < 600 then setTimer (Once 20) (fall can boom (v+1)) >> return () else set boom [ prop "innerHTML" =: "!!! *** BOOM *** !!!" ] where v' = fromIntegral v y = 0.08 * v'^2 main :: IO () main = do canvas <- mkCanvas 300 600 boom <- newElem "span" `with` [style "fontSize" =: "150%"] column documentBody [canvas,boom] Just can <- getCanvas canvas fall can boom 0