Simon Peyton Jones wrote:

It's not a big deal.

You can probably replace both those bindIOName uses with bindMName (i.e (>>=)), in TcRnDriver.  That will just make GHCi generate code with uses of overloaded (>>=) that must be evaluated, rather than calling bindIO directly.  It should work just fine, but it'll make everything a tiny bit slower and more indirect.  If it simplified the code a lot, then fine, but it doesn't really.  So I'm inclined to leave it.

That's fine; I don't know why my search didn't turn that up (perhaps it's referenced in some weird indirect way). If we're going to keep thenIO, we should surely define (*>) = (>>) = thenIO, right?