Haskell身份镜头

7

我想知道 Haskell 中是否有身份镜头。一种名为 identity 的镜头,如果我有一个类型为 data MyType = MyType {_myField :: Int} 的类型,那么我可以执行 myType ^. identity . myField .~ 2。在 lens-1.1.1 中似乎有这个东西,但在 lens-4.19.2 中找不到。


1
我不是Lens专家,但我真的看不出这个的用处 - 如果你确实需要它,鉴于Lens类型的定义,它不只是id :: Lens s t s t吗?如果我忽略了什么显而易见的东西,请原谅。 - Robin Zigmond
1个回答

10

lens-style镜头的一个优点是它们实际上就是函数。因此,您可以像在镜头上使用函数组合运算符.一样,在身份函数id上也可以用作镜头,并且它确实像一个身份镜头一样“聚焦”整个数据结构。

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

data MyType = MyType { _myField :: Int }
makeLenses ''MyType

main :: IO ()
main = print $ MyType 37 ^. id . myField

1
traverseOf 的实现也是 id - danidiaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接