## Monads useful?

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
        ...