2013年1月29日火曜日

ClojureのKeywordはLensなのですy

春休みヤッター!
ブログの更新頻度も上げていくつもりです。

Lens


Lensはあるフィールドに対するgetterとsetterを持つ。
コードにするとこんな感じ。



見てわかるとおり、lgetはgetで、lsetはassocで十分なのだ。


Lensの特徴


getとsetがあればmodifyが定義できる。



Clojureにはupdate-inがある。


Lensは合成が可能だ。



Clojureの{get, assoc, update}-in関数は複数のKeywordをとることで、ネストしたレコードに対しても有効です。


LensはStateモナドと組み合わせると素敵です。
更新途中の状態を取得することは出来ないけれど、Clojureにはアローマクロが存在します。



KeywordがLensだということを意識すれば、Lensの考え方を応用することが出来ますね。