Lens - traverseInit 发生了什么?

Lens - What happened to traverseInit?

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

我会怎么做

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

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 return 是 Traversal' s s,而不是 Traversal' s a,允许您替换整个子列表,可能会更改其长度。在示例中,我不得不再次 traverse 来查看元素。 (_init 恰好是一种 仿射 遍历,这意味着它永远不会 return 多于一个子列表,但这在 lens 中是不可表达的s 词汇。)

Control.Lens.Cons 包括列表的 _tail, as well as traversals of a list's _head and _last.

的类似遍历