The
runIO function lets you run an I/O computation in the
Q monad. Take care: you are guaranteed the ordering of calls to
runIO within a single
Q computation, but not about the
order in which splices are run.
Note: for various murky reasons, stdout and stderr handles are not
necessarily flushed when the compiler finishes running, so you should
flush them yourself.