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
.
的类似遍历
在早期版本 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
.