Using IO Safely With Heavily Stateful Problem

Effect systems seem rather irreplaceable for properly testable production-grade code that doesn’t need to be fast. The other two, yes: mtl seems mostly useless (either use an effect system or just work in IO directly) and typeclasses tend to be overused in places that don’t really need them.

I assume trying to make everything an object means you need constant workarounds for things that aren’t objects (which is most things), hence the proliferation of patterns. I’m talking out of my butt however, I have not been exposed to OOP enough to properly understand it.