Off the top of my head: the side effect of calling C code that performs reads/writes gets muddled in with stuff like console output. It would be nice to know when code only performs memory reads/writes. But then we’d want FFI code that reads/writes memory to be embedded in “grand IO” sometimes.
That seems worth pursuing. I’m not sure these “mtl replacements” will pan out in terms of effort—lots of wrangling typeclass inference, which is much less studied than some other aspects of FP, and thus harder to justify/know it’s good.
inside Haskell, there’s another language; a halfway Prolog interpreter with lots of extensions which say few people know how to get amazing things done; I’m convinced in the end, this is not the way we want to do them. So I think this is going the wrong way; take things away from the current state of depenetly typed languages; this is not teachable or transferable. Libraries depend on these extensions; it’s not clear if it’s coherent or not.