haskell - 使用镜头作为 `map`

标签 haskell lenses

我要转换这行代码map (^?! ix 0) [[0, 1], [4, 5], [9, 1]]完全使用镜头,例如 [[0, 1], [4, 5], [9, 1]] & each . ix 0 .但是,类型不匹配。这样做的正确方法是什么?

最佳答案

使用folded :

Prelude Control.Lens> [[0, 1], [4, 5], [9, 1]] ^.. folded . ix 0
[0,4,9]

适用于任何 Foldable .

此外,如果您计划始终提取第一个元素,使用 _head 可能会更清楚。遍历 Control.Lens.Cons而不是 ix .
[[0, 1], [4, 5], [9, 1]] ^.. folded . _head

关于haskell - 使用镜头作为 `map`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686922/

相关文章:

Haskell 理解单子(monad)

haskell - 用于元组扩展的透镜?

haskell - 使用带有镜头的一元函数修改状态

haskell - 如何在独立的Getter中使用(^?ix 0)?

scala - 在 Scala 常规类上使用镜头

haskell - Haskell 函数可以序列化吗?

haskell - 如何显示更多的haskell pi 数字?

haskell - IO Monad 中的链式 if/else 语句

haskell - 两侧部分转换的光学元件

haskell - 如何在 Typeclass Show 中用 "m a"定义 Monad 实例 "a"?