Haskell 身份镜头

Pas*_*uda 6 haskell haskell-lens

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

lef*_*out 7

一对好东西lens风格的镜头是,他们真的只是功能。因此,就像您可以.在镜头上使用函数组合运算符一样,您也可以将恒等函数id用作镜头,并且它确实充当恒等镜头,因为它“专注于”整个数据结构。

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

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

main :: IO ()
main = print $ MyType 37 ^. id . myField
Run Code Online (Sandbox Code Playgroud)