Stateモナドのお勉強。なんとなくモナドの正体が見えたような。ただし、半分予測を含む理解なので正当性は保証しないです。後、実際の使用方法は全然気にしてなくて、意味だけ考えてます。*1
Stateモナドを理解するために頭の中に用意するのはa、bの集合(型)と、それに対応するState a、State bの集合。それと実際の状態を表すsの集合。State aの要素とaの要素には1-1の写像を持っている*2ので、State aはaと同じ物として扱ってよい*3。では、何が違うかと言えば、State aの要素はsの集合を変化させる写像を持っている。これが状態を変化させる肝となる。
ここまで理解できれば、これにa -> State bの写像fをバインドさせる定義は、自ずと出てくる。これはState aの要素をState bの要素に対応させる写像となるが、State a(b)がa(b)の要素への1-1対応とsの要素を変化させる性質を持っていることを思い出してみれば、
の両方の側面を持つ要素となる。バインド後の要素mbは、bと言う値と状態をs1(○)->s2(△)->s3(□)と変化させる写像を抱えている。
・・・と思う(笑) 。
参考はこちら。
【懺悔的追記】
Monad.Stateのgetやらput見る限り、この解釈は違う気がしてきました(笑)。またリベンジします。。。
【4/16 追記】
あまり酷い内容を放置だとまずいと思ったので、駄目っぽいとこを消しましたw