It is sometimes useful to sequence the evaluation relative to IO actions. For instance one might spark a computation in parallel, while the main thread is waiting for further input.
I have written a (ghc only) patch that provides functions that allow this (Borgvall@3d5b0fb). You might consider merging it.
The downside is, it depends on the internal representation of IO and Eval, and adds functions to the external interface.