给定的
data Person = Person { _name :: String }
makeClassy ''Person
这创造了一个
name :: Lens' Person String
我可以定义以下在元组中使用
name
的镜头。sndPerson :: Lens' (a, Person) (a, String)
sndPerson = lens
(\(a, p) -> (a, p ^. name))
(\(_, p) (a, n) -> (a, p & name .~ n))
有没有更好/更规范的方法来定义上面的
sndPerson
? 最佳答案
alongside
将一对镜头变成一个可以在一对镜头上工作的镜头。
因为在示例中您没有关注第一个组件,您可以简单地将 id
作为第一个镜头传递。
sndPerson :: Lens' (a, Person) (a, String)
sndPerson = alongside id name
关于haskell - 将 Lens 组合成一个元组的 Lens,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47725555/