将镜头组合成元组的镜头

时间:2017-12-09 05:19:10

标签: haskell lens

鉴于

urls = {}
environment = 'qa'
district = 'pleasanthill'
url = environment + district
urls[url] = 'https://' + environment + '.' + district + '.test.com'
print(urls[url])

创建

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))

1 个答案:

答案 0 :(得分:6)

alongside将一副镜片变成一副镜片,可以成对使用。

因为在示例中您没有专注于第一个组件,所以您只需将id作为第一个镜头传递。

sndPerson :: Lens' (a, Person) (a, String)
sndPerson = alongside id name