问题标签 [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 - 这像镜头吗?(证明搜索转换器/组合器)
在自动定理证明(证明搜索)中,我组合了以下类型的变换器
这样:当t c
返回时Just (c', f)
,则c'
隐含c
,并且从计算的证明中c
获得证明。p'
c'
f p'
这是一个镜头,不知何故?(如果是,有什么帮助?)
还有一个更一般的情况(对于几个或零个子目标)
这IO
部分很重要,因为这些转换器做了大量工作(调用外部进程),我可能想强制超时。
haskell - 如何“平行”组合镜头
我是新手Control.Lens
,我正在尝试将 2 个镜头“平行”(而不是按顺序)组合,就像我对 `Control.Arrow.&&& 所做的那样。
如果我从lens
文档中获取示例:
我希望能够做类似的事情:
我到处寻找,我找不到这样做的方法。那是因为:
- (&&&) 以另一个名字存在,我错过了。
- 没用的。我不应该需要它,因此没有人打扰实现它。
both
以另一种方式(使用or<*>
)做起来很简单
更新
&&&
可以这样实现:
但是,它需要一个有点烦人的类型签名。
haskell - 使用镜头保存位置
我正在尝试使用 xml-conduit 和 xml-lens 来解析和遍历 XML 文档。不必多次遍历文档的相同部分,我想将遍历存储到前一点,然后进一步向下钻取。
前任。
当我尝试这样做时,我收到以下错误:
我能做些什么来存储这个中间位置?
haskell - 如何将字段构造函数参数传递给函数?
1)我需要将字段构造函数参数传递给函数。我做了一些测试,但我无法这样做。可能吗?否则,可以用镜头包吗?
2) 是否可以在 MonadState 中使用 modify 修改字段?(我做了几次尝试,但没有成功。例如: modify (second = "x") 不起作用。
haskell - 使用镜头两次
我正在努力使用该lens
库来解决特定问题。我试图通过
- 更新的数据结构
- 聚焦于更新结构的一部分
到另一个函数,g
. 我同时传递了镜头和数据结构,因为g
需要数据结构中的一些共享信息以及一条信息。(如果有帮助,数据结构包含有关联合概率分布的信息,但g
仅适用于任一边缘,并且需要知道我正在查看哪个边缘。两个边缘之间的唯一区别是它们与其余定义的平均值在数据结构中共享)。
我的第一次尝试看起来像这样
但是在编译过程中失败了,因为f
被推断为Identity
用于更新和Const Double
获取器。
完成我想做的事情的最佳方法是什么?我可以想象能够执行以下操作之一:
- 制作镜头的副本,以便在每种情况下类型推断都不同
- 我没有传递更新的结构和镜头,而是传递了原始结构和一个返回修改值的镜头(如果我只想更新镜头所看到的结构部分)。
- 为我的函数/数据结构做出更好的设计选择
- 完全不同的东西
谢谢你的帮助!
haskell - 在 MonadState 中使用镜头的一些潜力和困难
以下是 MonadState 中 Lenses 的一系列示例/练习(由 Edward Kmett 编写),基于 Petr Pudlak 对我之前的问题的解决方案。
除了演示镜头的一些用途和功能之外,这些示例还显示了理解 GHCi 生成的类型签名是多么困难。有希望在未来会有所改善吗?
以下评论类型签名是由 GHCi 生成的。另一个是改编自彼得的。就个人而言,我比 GHCi 生产的那些更难理解,我想知道:为什么 GHCi 不生产那些简化的?
haskell - 为遍历和折叠实现多态“深度”函数
我正在lens
与xml-lens
. 我想让以下函数更具多态性,以便它不仅适用Folds
于Traversals
:
此函数的工作方式类似于hxt
. 是否可以按照我想要的方式使其更具多态性?
haskell - 如何一个接一个地遍历数据结构的不同部分?
在函数中遍历 aControl.Lens.Traversal
的beside
两个部分Bitraversable
。给出的例子是
我可以写一个更明确的版本beside
(让我们称之为bothParts
)而不是Bitraversable
约束需要两个Traversal
s 吗?我想它可以像这样使用:
这已经存在了吗?这是否太不安全而无法正常使用?谢谢!
编辑:
或者可能是这样的:
haskell - 用镜头修改所有偶数值
假设我有一个这样的数组:[1, 2, 3, 4]
如何使用 lens 包只修改偶数值?我正在寻找类似的东西:
haskell - 带有“免费”参考的 Aeson Prisms
只需阅读精彩的“ Lens/Aeson Traversals/Prisms”文章并拥有一个真实世界的应用程序。鉴于以下匿名 JSON 结构,我将如何提取集合而不是特定值?
我有:
我想要的是:
我错过了棱镜的全部意义吗?或者这是一个合法的用例?
干杯!