designing an AO runtime monad