2015年5月23日土曜日

モナドまとめ

これまで List,State,Maybe の3種類のモナドを見てきたが、結局のところモナドでは表向きは

m >>= f >>= g >>= h
 
と単純に左から右に値を流しているように見せかけて(ドットによる通常の結合と逆向きなのは何か深い意味があるんだろうか)実のところは bind によりリストの展開とか、状態の受け渡しとか、条件による処理の変更などを行っている。

こういった関数の間の繋ぎをするのがモナドで、やはり目的としては「どう繋がるか」ではなく「何と何が繋がっているのか」を明確にしたいというのがあるのだろうか。そのために、「どう繋がるか」の部分はモナドにより ">>=" 記号の中に埋め込まれるというのが「文脈に意味を持たせる」ということなのだろう。

本当に状況によっていろんなことが出来るので、一口にモナドはこんなもんだと簡単に説明できないのはよくわかった。

まだ遅延評価や型などもあるが、とりあえずこんなもんで関数型言語についてなんとなくは理解できたかな。
しばらくは Haskeller になるつもりはないが、最近C++やC#なんかでもラムダ式とかに対応し始めたので、うまく使えそうな機会があれば活用してみようと思う。

0 件のコメント:

コメントを投稿