久しぶりのLensの記事です. 5億回は繰り返されてきたであろうLens再実装を通して, Lens, Getter, Setter, Iso, Equality, Traversal, Prism, Foldの仕組みを理解するのが目的です. 亜Lens family Getter Getterは基本的にはConstをかぶせる操作とそれを剥がす操作で実現可能です. つまりgetConst (Const k) = kですが, このConst kがデータであり, getConstは値を取り出すgetterになります. アクセサの型がGetting r s aであるとき, sからaを取り出せる(=s -> aなるgetterである)という意味です. (^.)はGetterとデータから具体的に値を取り出し, toは函数をGetterに変換するための函数です. type Getting r s a =