A state transformer monad parameterized by:
- g - A representable functor used to memoize results for a
state Rep g
- m - The inner monad.
The
return function leaves the state unchanged, while
>>= uses the final state of the first computation as
the initial state of the second.