UPDATE (2014/03/01) It turns out that there was a better way to do this, please see this new post. Rationale I am currently experimenting with the operational package. This post provides a rough outline on how I moved from an IO based monad stack to an isomorphic pure representation of the computation. I am unfortunately not well endowed on the theoretical side, so this will be a very practical po