Sure, but only in the sense that pure () :: MonadState Int m => m ()
is a lie. It’s not a very bad lie.
With what you propose you lose this propoerty, don’t you?
Yes, it’s a lie that acts against that nice property.
Looks like he’s using a polymorphic monad and class constraints
Yes maybe. I’m having trouble understanding the baseline for comparison, which is why I’m having trouble making a concrete suggestion. Most of my dialogue in this thread has been Socratic.
That said, I’ve been doing some experiments with “handles as arguments” and so far I’m very pleased with the experience, versus “handles only in a type-level list”.