Change runIO to be churchy over an underlying monad