Catching IO exceptions in liftIO breaks primitives that rely on exceptions for control flow, e.g. timeout. I consider this a bug, and c-m-e pure no longer catches IO exceptions in liftIO.

In the IO version of c-m-e, we can handle them in catchWithSrcLoc. However this means that we cannot produce stack traces for asynchronous exceptions, which would be implemented by catching IO exceptions in bind itself.