问题标签 [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.
haskell - 地图中不存在时的默认值
出于我的目的,我需要一个带有某种“属性”的类似地图的容器。我的对象可能具有不同的属性。为了访问这些属性,我决定使用Control.Lens,这很有趣。但是我找不到这种逻辑的类似镜头的方式:在访问属性时,如果它不存在,则添加默认值,然后返回新值。但如果它在那里,只需使用它。
换句话说,prop_test应该返回 True:
但是现在,op1 等于 emptyProperties。对于默认值,我可以使用 Data.Default。我该如何处理?或者我应该使用另一种方法吗?例如,State monad 中的一个包装函数,它为我解包并检查属性是否存在。
另外,您能否提供 Control.Lens(或其他镜头包)的真实示例的链接,好吗?
haskell - 使用 lens-aeson 从 JSON 中提取值
我刚刚阅读了https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms上的教程,并且我已成功将查询写入 json 字节串。但是,我没有得到我想要的那种结果值。
我想做一些类似的事情
但是 (j^? key "some key") 的类型为 "Maybe Value"。
这一定是一种足够常见的模式,如果没有实用函数将值转换为文本,我会感到惊讶。有任何想法吗?
haskell - `lens` 是如何工作的?
我的意思是,不是像这样简单的东西(从这里):
但是像使用镜头映射类型从Linear
. 我将如何用镜头来表达这一点:
另一个例子:我当前的代码充满了这样的小表达式:
(板在哪里Array (V2 Int)
)
我猜是(和lens
)有一种更规范的方式来表达这一点。
一般来说:我如何找出镜头能够做什么,不能做什么以及它是如何完成的?
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,有没有参考文档可以帮帮我?
haskell - Control.Lens 镜头全图
我有一张从 A 型到 B 型的全图。
我用作Data.Map
示例实现,但它可以是任何东西,例如一个Array
甚至是一个Bool
索引元组:
我想要一个tmAt
构建镜头的功能:
问题是我如何构造tmAt
和tmGet
(tmSet
或tmModify
)?
json - 用 lens-aeson 解析 json
试用 Edward Kmett 的思维扩展镜头和 lens-aeson 包。这里是热身
期望的结果是
我可以取得一点进展
但是到目前为止,我还没有弄清楚如何使组合器足够努力以获得正确的答案。我很可能涉及到片段'key "otherkey"'。有任何想法吗?
haskell - Haskell Control.Lens Traversing Prism
我有一个深度嵌套的数据结构,我正在使用 Control.Lens.* 来简化在状态单子中访问它的值。
所以考虑以下几点:
我如何在 Maybe 上“功能性地”操作?我想写一个惯用的getter:
更好的是,当 Config 嵌套更深时,我们将如何处理这种情况?
我们可以使用访问器 foo 和 bar 来返回修改后的 Bar 吗?
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
,实体系统的所有状态处理都对用户隐藏。
haskell - 如何使用 Control.Lens 中的 IndexedTraversal 为每个元素执行索引感知操作?
我有一个IndexedTraversal
(来自Control.Lens
包),我想对其中的每个元素应用一个索引感知单子操作。不幸的是,我看到的所有做这样的事情的方便方式——比如^!
与act
函数结合——似乎都忽略了每个元素的索引。有没有一种很好的方法来为索引遍历中的每个元素(及其索引)运行一个动作?
haskell - 将 Lens' ab 转换为 Lens' a (Maybe b)
我有几个数据结构,比如
所以我决定写一个简单的类型类,让它更容易编写
但是后来我遇到了一些问题,其中一些结构具有相应的字段作为可选
现在我不能再使用类型类了。由于具有该字段可选的数据类型的数量大致相同,因此我决定更改类型类会更好:
但是由于我对镜头库不是很有经验,所以我一直在弄清楚如何使这个新镜头与 和 的类型一起Data1
工作Data2
。理想情况下,我希望能够查看它并获取Maybe Int
任何类型的值,并且在设置时我希望Just x
将字段设置为x
forData1
并且Data2
在传递时成为这两种类型的无操作Nothing
。
这可以使用现有的组合器还是我必须自己编写镜头?我这样做很好,但是大多数现有教程都使用 TH 并掩盖了手工编写的细节。
我正在使用 GHC 7.6.3 和lens
3.10。