@lambdageek "coroutines are also a monad"
Oh, I am *so* happy to hear that.
And I think I was unclear, the halt/resume version is something I believe I can implement with Either. Like, I can implement that without even changing the program much using only features that exist in OCaml.