Arrows and the IO monad