我想知道 Haskell 中是否有身份镜头。一种名为 identity
的镜头,如果我有一个类型为 data MyType = MyType {_myField :: Int}
的类型,那么我可以执行 myType ^. identity . myField .~ 2
。在 lens-1.1.1
中似乎有这个东西,但在 lens-4.19.2
中找不到。
我想知道 Haskell 中是否有身份镜头。一种名为 identity
的镜头,如果我有一个类型为 data MyType = MyType {_myField :: Int}
的类型,那么我可以执行 myType ^. identity . myField .~ 2
。在 lens-1.1.1
中似乎有这个东西,但在 lens-4.19.2
中找不到。
lens
-style镜头的一个优点是它们实际上就是函数。因此,您可以像在镜头上使用函数组合运算符.
一样,在身份函数id
上也可以用作镜头,并且它确实像一个身份镜头一样“聚焦”整个数据结构。
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data MyType = MyType { _myField :: Int }
makeLenses ''MyType
main :: IO ()
main = print $ MyType 37 ^. id . myField
traverseOf
的实现也是 id
。 - danidiaz
Lens
类型的定义,它不只是id :: Lens s t s t
吗?如果我忽略了什么显而易见的东西,请原谅。 - Robin Zigmond