LT駆動開発14に参加した。
ゼノブレイドクロス発売記念でモナドの話をしといた。
Stateモナドを簡約して、Stateモナドを説明しようとおもったけどうまくいかなくてボツになりました。
そんなわけでHaskell/圏論 - Wikibooksを元ネタにモナド則を辿ってみました。
a -> M b
って型の関数を並べるにはfmapしてjoinしてを間にはさむことがポイントな気がしたことがあったのでその話です。
a -> M b
な関数を組み合わせると M b -> M (M c)
になって M (M c) -> M (M (M d))
とどんどんMが増えていってしまうのですが、モナドであればM d
にできるわけです。
a -> M b
ってなんなんだって話になってきますがM a -> M b
でも良いけど、a -> M b
のほうがあつかいやすいよね。だってM
は外せないんだから外れているものが受け取れたら便利じゃないですか。
結果的に残ったものは 何度も同じことをしないといけない部分を隠すことができます。
その内容を自由に取り替えできちゃうのがモナドの魅力なのだと思う。
そしてMに関する操作は裏でひそかに行われて、命令書を構築したり、失敗していたら何もしなかったり、可能性すべてを記録したり、単に設定した値をおけるだけだったり、するだけだと思われます。