18得票2回答
有人能解释一下关于“lens”库的图表吗?

如果您查看Hackage上的Lens条目、Lens Github仓库,甚至在Google上搜索Lens,您会发现很多部分性的参考资料,例如入门教程/视频、示例、概述等。由于我已经了解了大部分基础知识,所以我正在寻找一个更完整的参考资料,以帮助我获取更多关于高级功能的知识。换句话说,我仍然不知道...

17得票2回答
组合镜头

使用一个镜头库,我可以对单个目标应用修改函数,示例如下:Prelude Control.Lens> (1, 'a', 2) & _1 %~ (*3) (3,'a',2) Prelude Control.Lens> (1, 'a', 2) & _3 %~ (*3) (...

17得票2回答
使用Lens和Zippers遍历树

我正在学习Lens包。我必须说这是一个相当具有挑战性的任务。 是否有人可以向我展示如何使用Lens中的Zipper遍历树?特别是,我如何编写一个函数,该函数接受根节点列表并允许我访问子树的分支? 假设我有这棵树。如果我的输入是[1, 3],则该函数应允许我访问节点10和11。import ...

16得票1回答
`Optional`是否有van Laarhoven表示法?

许多类型的光学都有van Laarhoven表示法。 例如,类型为的Lens可以表示为: Functor f => (a -> f b) -> s -> f t 同样地,一个 Traversal 可以用类似的方式表示,只需将 Functor 约束替换为 App...

15得票3回答
如何处理 Control.Lens.Indexed 中 at 函数的 Maybe 结果,而不需要 Monoid 实例

我最近在Hackage上发现了lens包,并尝试在一个小测试项目中使用它,如果我继续努力,这个项目可能会变成一个MUD/MUSH服务器。 下面是我的代码的简化版本,展示了我目前遇到的问题,这些问题涉及用于访问键/值容器(在我的情况下是Data.Map.Strict)的at lens。 {-...

14得票3回答
在Haskell中模拟交互有状态的对象

我正在编写一个Haskell程序,涉及模拟抽象机器,该机器具有内部状态,可以输入和输出。我知道如何使用状态单子实现这一点,这会产生更清晰、更易管理的代码。 我的问题是,当我有两个(或更多)有状态的对象相互交互时,我不知道如何使用相同的技巧。下面是问题的高度简化版本,并概述了我目前的情况。 ...

14得票1回答
代数类型的镜头包

我正在使用 lens 包编程。一切都很顺利,直到我尝试访问代数类型上的某个字段:import Control.Lens data Type = A { _a :: Char } | B makeLenses ''Type test1 = _a (A 'a') test2 = (A 'a'...

14得票2回答
使用镜头避免重复,同时将数据深度复制到Map值中

我有一个不可变的数据结构,在其中我有嵌套在Map中的值,如下: case class TradingDay(syms: Map[String, SymDay] = Map.empty) case class SymDay(sym: String, traders: Map[String, T...

14得票1回答
调和镜头使用与数据库访问

最近我一直在尝试使用镜头(lenses),并且发现它们非常适合用于挖掘复杂的数据结构。但是,我最需要它们的领域之一是数据库访问(特别是sqlite,但我认为我的问题可以推广到大多数数据库),然而我看不到任何方法编写不会大量损失性能或粒度的镜头。 如果我从数据库到表、从表到行、再从行到列编写镜...

13得票2回答
使用lens向嵌套的Map中添加键和值

我正在努力解决使用Aeson lenses操作JSON时遇到的问题。我的任务很简单,只需向JSON中嵌套的对象添加一个键即可。我已经通过以下方式成功更改了现有的键:> :set -XOverloadedStrings > import Control.Lens > impor...