A free monad interface to the canvas