Could you breakdown the types of boilerplate you're finding? IME most of it is from having generic (Hinze style) ways of handling datatypes instead of specific ones.
With the State monad, all modules share all the state, as passed around by each and every function. Maximum coupling. Anti-modular.
-
-
Even if you're passing around one big state in "the" State monad, it can still be modular if your PL has row-polymorphic types (i.e. you can 'type' partial use of big state). Alternatively, you could use state per module, use `runState` where suitable.
-
If you want to reproduce the modularity of state with a state monad or with algebraic effects, you need not just "row polymorphism", but associative-commutative row polymorphism with unions and intersections of row variables... Who can do that?
@kmett's Ermine? Chlipala's Ur?
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.
Read my blog!