What are the drawbacks of System.IO / Base being bound to the MonadIO typeclass instead of straight IO?
Effect systems are becoming quite popular, and MTL has been normative for years. Polymorphic System.IO would make it much more convenient to use Prelude IO functions (i.e, saving you a ton of liftIOs), and the same would apply to corresponding functions in quasi-base like ByteString and Text.