2014年6月20日金曜日

モナドについて少し考えた

函手(functor)、モナドについて少し分かった??
ある要素をある「機能」をもったコンテナに格納する。(unit constractor)
その要素に対する演算を定義して、それをコンテナにも適用可能。(map, functor)
その要素に対する演算を行って更にコンテナに格納(constractor)する演算(アクション)を、コンテナが入れ子にならない様に適用可能(flatmap, monad)
この「機能」はOptionやCollectionやStateのようなものだったり、I/Oの様に言語上では実装を表現できないシステム依存の物でも良い。
アクションを適用する際に副作用が発生する様にすれば、flatmapの連続で副作用を連続的に実行できる??
コンテナに格納した値を取り出す時には、前のアクションが評価済の必要があるので、評価の順序を制御出来る??

I/Oモナドに関する下記が分かり易かった。
http://cs.hatenablog.jp/entry/2013/08/23/075647

下記は内容は理解できていない。。。
http://www.mew.org/~kazu/material/2012-monad.pdf
DSL、制御構造を表せる、チューリング完全、リスト内包表現、scalaのfor...
文脈、前の値を使える、関数の連続から入れ子に変換出来る。
mapは関数の連続適用、fmapは関数の入れ子適用。
計算の階層化、抽象化、大枠を個別の値に関係無く共通的に扱う。
隠ぺい、包む、コンテナ、ブラックボックス
状態系、失敗系
Functor, Applicative, Monad

参照透過と言うのは同じ引数なら常に同じ戻り値になると言う事。
常に同じ内部処理が実行される必要はない!
外から見て同じならそれでOK。

0 件のコメント:

コメントを投稿