在早期版本Data.List.Lens
中,有一个函数traverseInit
用于操纵部分列表。它已被删除,我想现在可以替代它了,但我找不到吗?
我会怎么做
>>> traverseInit +~ 1 $ [1,2,3]
[2,3,3]
答案 0 :(得分:4)
traverseInit
被_init :: Snoc s s a a => Traversal' s s
中更通用的Control.Lens.Cons
所取代,所以现在它可以与任何类似序列的类型一起使用,从而可以访问其右手端。
ghci> [1,2,3] & _init.traverse +~ 1
[2,3,3]
请注意,_init
返回一个Traversal' s s
,而不是Traversal' s a
,这使您可以替换整个子列表,并可能更改其长度。在示例中,我不得不再次traverse
来查看元素。 (_init
恰好是一个仿射遍历,这意味着它永远不会返回一个以上的子列表,但这在lens
的词汇表中无法表达。)