10得票3回答
使用Lens过滤复合结构

我有一个 [(a, Maybe b)],想要得到一个 [(a, b)],其中过滤掉所有第二个元素是Nothing的对。 是否有一种简洁的方式使用 lens 描述这个操作?

7得票2回答
从模块中仅导出getter或setter

有没有一种方法可以让我从一个使用 lens 的模块中只导出特定的 getter 或 setter? 例如,假设一个数据结构具有不变性,始终为“> = 0”,只能通过递增进行修改,并且只能使用初始值为“0”创建: module Something ( Counter -- e...

17得票2回答
组合镜头

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

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

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

9得票4回答
让一个单一函数能够在列表、字节串和文本(以及可能的其他类似表示)上工作

我正在编写一个函数,用于在任意符号序列中进行搜索。我希望使其足够通用,可以在列表、Foldable以及ByteString和Text上运行。将其泛化到Foldable很简单。但如何包括ByteString和Text呢?当然,我可以将ByteString转换为列表,然后调用我的函数,但我会失去所...

11得票1回答
Shapeless:由案例类或字段参数化的通用镜头

基于: import shapeless._ case class Content(field: Int) lens[Content] >> 'field 我正在尝试制作一个镜头创建方法,类似于: def makeLens[T <: Product](s: Symb...

10得票3回答
Data.Lens或Control.Lens是什么?

可能是重复的问题: lenses,fclabels,data-accessor - 哪个库更好地用于结构访问和修改 我将在我的下一个Haskell项目中使用并学习Lens包。当我发现这篇文章提到了Control.Lens包中的van Laarhoven Lenses时,我几乎已经决定要...

8得票1回答
使用Lenses是否可以构建新记录?

如果我的记录类型中有透镜,是否可以构建一个新的记录而不使用底层的记录访问器? {-# LANGUAGE TemplateHaskell #-} import Control.Lens import Control.Lens.TH data Foo = Foo { _s :: String...

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

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

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

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