レンズが定義されたデータ構造があるとします。たとえば、次のようになります。
import Control.Lens
data Thing =
Thing {
_a :: String
, _b :: String
, _c :: Int
, _d :: Int
}
makeLenses ''Thing
そして、いくつかのゲッターを使用して呼び出したい関数があるとします。たとえば、次のようになります。
fun :: Int -> String -> Int -> String -> Bool
fun = undefined
現時点では、各フィールドにアクセスするためにかっこを使用すると、多くの醜さが生じます。次に例を示します。
thing = Thing "hello" "there" 5 1
answer = fun (thing^.c) (thing^.a) (thing^.d) (thing^.b)
他のほとんどの状況でのライブラリの簡潔さを考えると、lens
もう少しエレガントなものを望んでいましたが、この特定のケースに役立つコンビネータが見つかりません。