给定一些定义了镜头的数据结构,例如:
import Control.Lens
data Thing =
Thing {
_a :: String
, _b :: String
, _c :: Int
, _d :: Int
}
makeLenses ''Thing
并给出一些我想使用几个 getter 调用的函数,例如:
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
库在大多数其他情况下的简洁性,我希望有一些更优雅的东西,但我找不到任何有助于这种特定情况的组合器。