问题标签 [haskell-lens]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1252 浏览

haskell - 地图中不存在时的默认值

出于我的目的,我需要一个带有某种“属性”的类似地图的容器。我的对象可能具有不同的属性。为了访问这些属性,我决定使用Control.Lens,这很有趣。但是我找不到这种逻辑的类似镜头的方式:在访问属性时,如果它不存在,则添加默认值,然后返回新值。但如果它在那里,只需使用它。

换句话说,prop_test应该返回 True:

但是现在,op1 等于 emptyProperties。对于默认值,我可以使用 Data.Default。我该如何处理?或者我应该使用另一种方法吗?例如,State monad 中的一个包装函数,它为我解包并检查属性是否存在。

另外,您能否提供 Control.Lens(或其他镜头包)的真实示例的链接,好吗?

0 投票
2 回答
1426 浏览

haskell - 使用 lens-aeson 从 JSON 中提取值

我刚刚阅读了https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms上的教程,并且我已成功将查询写入 json 字节串。但是,我没有得到我想要的那种结果值。

我想做一些类似的事情

但是 (j^? key "some key") 的类型为 "Maybe Value"。

这一定是一种足够常见的模式,如果没有实用函数将值转换为文本,我会感到惊讶。有任何想法吗?

0 投票
1 回答
385 浏览

haskell - `lens` 是如何工作的?

我的意思是,不是像这样简单的东西(从这里):

但是像使用镜头映射类型从Linear. 我将如何用镜头来表达这一点:

另一个例子:我当前的代码充满了这样的小表达式:

(板在哪里Array (V2 Int)

我猜是(和lens)有一种更规范的方式来表达这一点。

一般来说:我如何找出镜头能够做什么,不能做什么以及它是如何完成的?

0 投票
1 回答
148 浏览

haskell - 如何理解 Snaplet 中 RST、Lensed 和 LensT 的抽象?

我最近正在阅读 Snap 的源代码,这很棒,但是当我继续阅读 Snaplet Handler 源代码时,我陷入了 RST、Lensed 和 LensT 的抽象。

现在 LensT 更改为 Lensed

Snaplet Design所说的We switched to a slightly more specialized monad formulation called Lensed that avoids traversal of the whole state hierarchy when the state is manipulated.

感觉Snap和Snaplet Handler的实现有差距,关键是RST、LensT和Lensed,有没有参考文档可以帮帮我?

0 投票
2 回答
250 浏览

haskell - Control.Lens 镜头全图

我有一张从 A 型到 B 型的全图。

我用作Data.Map示例实现,但它可以是任何东西,例如一个Array甚至是一个Bool索引元组:

我想要一个tmAt构建镜头的功能:

问题是我如何构造tmAttmGettmSettmModify)?

0 投票
1 回答
1275 浏览

json - 用 lens-aeson 解析 json

试用 Edward Kmett 的思维扩展镜头和 lens-aeson 包。这里是热身

期望的结果是

我可以取得一点进展

但是到目前为止,我还没有弄清楚如何使组合器足够努力以获得正确的答案。我很可能涉及到片段'key "otherkey"'。有任何想法吗?

0 投票
1 回答
2368 浏览

haskell - Haskell Control.Lens Traversing Prism

我有一个深度嵌套的数据结构,我正在使用 Control.Lens.* 来简化在状态单子中访问它的值。

所以考虑以下几点:

我如何在 Maybe 上“功能性地”操作?我想写一个惯用的getter:

更好的是,当 Config 嵌套更深时,我们将如何处理这种情况?

我们可以使用访问器 foo 和 bar 来返回修改后的 Bar 吗?

0 投票
0 回答
139 浏览

haskell - 透镜化实体系统

受reddit 上 两条评论的启发,我着手创建一个“强化实体系统”。基本的想法是有Lens' Entity Value镜头,但是虽然有Action创造Getter有副作用的s,但没有Setter或组合的LensM'东西。

我可能会使用类似的东西,Lens' (Entity, State) Value但我会对如何(以及是否)可以以更好的方式完成感兴趣。


好的......这是我得到的:

基本上我可以使用entityAddress entity(应该是类型Entity -> Lens' EntitySystem Address,但 ghc 抱怨)。但这并不让人感到“不敏感”。我希望的是entityAddress :: Lens' Entity Address,实体系统的所有状态处理都对用户隐藏。

0 投票
1 回答
548 浏览

haskell - 如何使用 Control.Lens 中的 IndexedTraversal 为每个元素执行索引感知操作?

我有一个IndexedTraversal(来自Control.Lens包),我想对其中的每个元素应用一个索引感知单子操作。不幸的是,我看到的所有做这样的事情的方便方式——比如^!act函数结合——似乎都忽略了每个元素的索引。有没有一种很好的方法来为索引遍历中的每个元素(及其索引)运行一个动作?

0 投票
1 回答
299 浏览

haskell - 将 Lens' ab 转换为 Lens' a (Maybe b)

我有几个数据结构,比如

所以我决定写一个简单的类型类,让它更容易编写

但是后来我遇到了一些问题,其中一些结构具有相应的字段作为可选

现在我不能再使用类型类了。由于具有该字段可选的数据类型的数量大致相同,因此我决定更改类型类会更好:

但是由于我对镜头库不是很有经验,所以我一直在弄清楚如何使这个新镜头与 和 的类型一起Data1工作Data2。理想情况下,我希望能够查看它并获取Maybe Int任何类型的值,并且在设置时我希望Just x将字段设置为xforData1并且Data2在传递时成为这两种类型的无操作Nothing

这可以使用现有的组合器还是我必须自己编写镜头?我这样做很好,但是大多数现有教程都使用 TH 并掩盖了手工编写的细节。

我正在使用 GHC 7.6.3 和lens3.10。