I have been trying to understand the State Monad. Not so much how it is used, though that is not always easy to find, either. But every discussion I find of the State Monad ha
I have accepted @AlexyRaga's answer to my question. I think @Filippo's answer was very good as well and, in fact, gave me some additional food for thought. Thanks to both of you.
I think the conceptual difficulty I was having was really mostly to do with 'what does the run
method 'mean'. That is, what is its purpose and result. I was looking at it as a 'transition' function (from one state to the next). And, after a fashion, that is what it does. However, it doesn't transition from a given (this
) state to the next state. Instead, it takes an initial State
and returns the (this
) state's value and a new 'current' state (not the next state in the state-transition sequence).
That is why the flatMap
method is implemented the way it is. When you generate a new State
then you need the current value/state pair from it based on the passed-in initial state which can then be wrapped in a new State
object as a function. You are not really transitioning to a new state. Just re-wrapping the generated state in a new State
object.
I was too steeped in traditional state machines to see what was going on here.
Thank, again, everyone.