An alternative edition of monad-control that forces all state data types to:
- be exposed at the
Constraint
level - be aligned s.t. the state is of kind
* -> *
, wherein the subject data type is indeed the monadic valuea
inm a
; this opposes theStateT
andWriterT
definitions, whose state types are in the form of(a, s)
; opposing curried type application indeed. Our edition enforces instances in the form of(,) s
- thus leaving the last applied type polymorphic, achieving our goal of* -> *
aligned [tm] state type.
This just allows us to use extractable-singleton to run our state type - useful for obtaining the subject data while running in a lifted context - basically exactly the same as what monad-unlift does.