haskell - 镜头 - 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
返回 a Traversal' s s
,而不是 a Traversal' s a
,允许您替换整个子列表,可能会更改其长度。在示例中,我不得不traverse
再次查看元素。(_init
恰好是仿射遍历,这意味着它永远不会返回一个以上的子列表,但这在lens
's 的词汇表中是无法表达的。)
推荐阅读
- node.js - 'SLS_DEBUG' 未被识别为内部或外部命令
- javascript - 合并其父级具有可变键名的js对象
- css - 如何在 Angular 7 中获取组件的 CSS 文件内容?
- asp.net - 无法在 Visual Studio Code 中初始化 MVC 模板
- kubernetes - kubectl 无法在本地使用 minikube 检测 localhost:8080
- python - 如何根据 pd.DataFrame 值创建 f 字符串(类似)列表?
- javascript - 如何在警报消息上设置超时?
- node.js - 将项目部署到数字海洋后,单击登录或注册按钮时会引发此错误
- sql - 从 XML 文档中获取数据到 SQL 表中,使用 OPENROWSET 从 XML 中检索属性时为空表
- python - 如何设置列中的所有值 = 0,其中选择列中的值重复,同时保持第一个重复值不变