A LOT of monad tutorial on the net. Just one example; the State Monad
DrawScene
to State Screen DrawScene
; still pure.
main = drawImage (width,height)
drawImage :: Screen -> DrawScene
drawImage screen =
drawPoint p screen
drawCircle c screen
drawRectangle r screen
drawPoint point screen = ...
drawCircle circle screen = ...
drawRectangle rectangle screen = ...
main = do
put (Screen 1024 768)
drawImage
drawImage :: State Screen DrawScene
drawImage = do
drawPoint p
drawCircle c
drawRectangle r
drawPoint :: Point -> State Screen DrawScene
drawPoint p = do
Screen width height <- get
...