首页 > 解决方案 > 镜头 - traverseInit 发生了什么?

问题描述

在早期版本中,有一个用于操作部分列表Data.List.Lens的函数。traverseInit它已被删除,我认为现在有替代方法,但我找不到它?

我该怎么做

>>> traverseInit +~ 1 $ [1,2,3]
[2,3,3]

标签: haskellhaskell-lens

解决方案


traverseInit被更通用_init :: Snoc s s a a => Traversal' s s的 from取代Control.Lens.Cons,所以现在它适用于任何允许访问其右手端的类似序列的类型。

ghci> [1,2,3] & _init.traverse +~ 1
[2,3,3]

请注意,_init返回 a Traversal' s s,而不是 a Traversal' s a,允许您替换整个子列表,可能会更改其长度。在示例中,我不得不traverse再次查看元素。(_init恰好是仿射遍历,这意味着它永远不会返回一个以上的子列表,但这在lens's 的词汇表中是无法表达的。)

Control.Lens.Cons包括对列表的类似遍历_tail,以及对列表_head和的遍历_last


推荐阅读