【问题标题】:Haskell Identity LensHaskell Identity 镜头
【发布时间】:2020-06-23 08:47:30
【问题描述】:

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

【问题讨论】:

  • 我不是镜头专家,但我并没有真正看到它的用途——如果你确实需要它,鉴于Lens 类型的定义,它不只是@987654327 @?如果我忽略了一些明显的事情,我们深表歉意。

标签: haskell haskell-lens


【解决方案1】:

lens 式镜头的优点之一是它们实际上只是功能。因此,正如您可以在镜头上使用函数组合运算符. 一样,您也可以将身份函数id 作为镜头,它确实充当身份镜头,因为它“聚焦”于整个数据结构。

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

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

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

【讨论】:

  • traverseOf的实现也是id
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 2022-01-04
  • 2021-08-09
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多