1. 10
  1.  

  2. 2

    Either the criticism towards the mtl style is unfair here, or maybe I’m mistaken and there’s a fifth alternative with a different name, but my impression is that the mtl people don’t suggest you to write your business logic against StateT, rather, the business logic should have the constraint MonadState. I’m personally in the “why do you keep saying Monad all the time, it’s just one of a bazillion abstractions” camp, but among the ones mentioned in the post, I lean towards MonadState, because it gives the most expressivity, while being the simplest one. Despite the name, MonadState doesn’t even have to imply a Monad, you could easily have a stateful applicative, or even a monoid, among other things.