如果您查看Hackage上的Lens条目、Lens Github仓库,甚至在Google上搜索Lens,您会发现很多部分性的参考资料,例如入门教程/视频、示例、概述等。由于我已经了解了大部分基础知识,所以我正在寻找一个更完整的参考资料,以帮助我获取更多关于高级功能的知识。换句话说,我仍然不知道...
使用一个镜头库,我可以对单个目标应用修改函数,示例如下:Prelude Control.Lens> (1, 'a', 2) & _1 %~ (*3) (3,'a',2) Prelude Control.Lens> (1, 'a', 2) & _3 %~ (*3) (...
我正在学习Lens包。我必须说这是一个相当具有挑战性的任务。 是否有人可以向我展示如何使用Lens中的Zipper遍历树?特别是,我如何编写一个函数,该函数接受根节点列表并允许我访问子树的分支? 假设我有这棵树。如果我的输入是[1, 3],则该函数应允许我访问节点10和11。import ...
许多类型的光学都有van Laarhoven表示法。 例如,类型为的Lens可以表示为: Functor f => (a -> f b) -> s -> f t 同样地,一个 Traversal 可以用类似的方式表示,只需将 Functor 约束替换为 App...
我最近在Hackage上发现了lens包,并尝试在一个小测试项目中使用它,如果我继续努力,这个项目可能会变成一个MUD/MUSH服务器。 下面是我的代码的简化版本,展示了我目前遇到的问题,这些问题涉及用于访问键/值容器(在我的情况下是Data.Map.Strict)的at lens。 {-...
我正在编写一个Haskell程序,涉及模拟抽象机器,该机器具有内部状态,可以输入和输出。我知道如何使用状态单子实现这一点,这会产生更清晰、更易管理的代码。 我的问题是,当我有两个(或更多)有状态的对象相互交互时,我不知道如何使用相同的技巧。下面是问题的高度简化版本,并概述了我目前的情况。 ...
我有一个不可变的数据结构,在其中我有嵌套在Map中的值,如下: case class TradingDay(syms: Map[String, SymDay] = Map.empty) case class SymDay(sym: String, traders: Map[String, T...
最近我一直在尝试使用镜头(lenses),并且发现它们非常适合用于挖掘复杂的数据结构。但是,我最需要它们的领域之一是数据库访问(特别是sqlite,但我认为我的问题可以推广到大多数数据库),然而我看不到任何方法编写不会大量损失性能或粒度的镜头。 如果我从数据库到表、从表到行、再从行到列编写镜...
我正在努力解决使用Aeson lenses操作JSON时遇到的问题。我的任务很简单,只需向JSON中嵌套的对象添加一个键即可。我已经通过以下方式成功更改了现有的键:> :set -XOverloadedStrings > import Control.Lens > impor...