问题标签 [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.
http - wreq 未使用 cabal 沙箱编译
我正在使用 cabal 沙箱,编译 wreq 库时出现此错误:
我在我的 cabal 文件中使用这些库:
任何想法如何解决编译错误?
haskell - 使用镜头读取多个字段
给定类型
我可以通过模式匹配提取某人的姓名、等级和谷物编号:
或者,我可以使用镜头分别提取每个部分
有没有办法在一次遍历数据结构中同时提取所有三个?
某种组合Getter
s, Getter s a -> Getter s b -> Getter s (a,b)
?
haskell - 使用记录语法在 Haskell 中编写 OOP 风格的“setter”函数
我正在阅读有关镜头的教程,在介绍中,作者lens
通过展示我们如何使用标准 Haskell 实现 OOP 风格的“setter”/“getter”的一些示例来激发这个概念。我对以下示例感到困惑。
假设我们User
按照图 1(下图)定义了一个代数数据类型。本教程(正确地)指出,我们可以通过NaiveLens
数据类型和nameLens
函数实现“setter”功能(也在图 1 中)。图 2 给出了一个示例用法。
我很困惑为什么我们需要如此复杂的构造(即NaiveLens
数据类型和nameLens
函数)来实现“setter”功能,而以下(有些明显的)函数似乎同样能很好地完成这项工作:set' a s = s {name = a}
.
但是,鉴于我的“明显”函数就是 lambda 函数的一部分nameLens
,我怀疑使用下面的构造确实有优势,但是我太密集了,看不出那个优势是什么。我希望其中一位 Haskell 向导可以帮助我理解。
图 1(定义):
图 2(示例用法):
haskell - 为什么“失败”(来自镜头)会产生无效遍历?
从文档中:
尝试第一个
Traversal
(或),如果它没有返回条目,则返回Fold
第二个Traversal
(或)。Fold
这仅
Traversal
在第二个Traversal
与第一个的结果不相交或返回完全相同的结果时才有效。
是否有一个生成的无效遍历的简单示例failing
和演示它的测试用例?
haskell - xml-lens API 惊喜:函数组合和 travelsals
以下表达的意图有何不同?我很惊讶他们实际上在下面的示例中键入检查并产生不同的结果。
和
以及它们如何使用典型的 pom.xml 文件:
在哪里
和
haskell - 使用 Prism 作为智能构造函数
我正在浏览关于棱镜的“镜头”文档,我注意到 Control.Lens.Review 中有一行说明中缀审查运算符#'在将棱镜用作智能构造函数时通常使用。'。
这让我有点好奇,因为就我理解的智能构造函数(对参数值添加额外的限制)而言,带有 _Left 的示例,它是“Either”数据类型的构造函数之一,看起来不像是智能构造函数。所以我在谷歌上搜索了一下棱镜作为智能构造函数,但我并没有真正找到任何例子。
有没有人知道这句话的确切含义并举个例子?或者也许告诉我,我对智能构造函数的定义是不正确的,当然。
arrays - 如果数组和索引都处于状态,则使用镜头进行数组索引
我在状态单子中有一个数组和一个数组索引。我可以使用 idx和其他类似的修饰符来读取use
和修改它:+=
现在我想组合arr
并idx
形成一个镜头arr[idx]
:
我怎样才能做到这一点?代码会有所不同Data.Sequence
吗?
haskell - 阵列和索引透镜中的阵列索引透镜
如果数组和索引都处于状态,这是使用镜头进行数组索引的更简单版本,因为我已经解决了一些问题。我不确定是否应该删除原件或原地编辑。
给定
我想写一个函数
这需要arr
和idx
镜头并构造一个组合镜头,可用于读取和写入 指向的元素idx
。我想要的镜头存在:
我理解这一点comboGet
,comboSet
原则上可以重写为单独使用arr
和idx
镜头。
combo1
我的问题是:用arr
and构建最惯用的方法是什么idx
?
haskell - 使用镜头库构建复杂功能
我正在尝试实现一个函数,该函数有一个lens
参数,并且将mconcat
是一个Maybe
具有 type 的两个应用效果的 monoid (->) r
。我可能缺少一些基础知识,因此对分解此问题的任何帮助表示赞赏。
我想编写避免传递相同参数的“用户”代码,如下所示:
这是我尝试过的。无镜头概念:
带镜头:
但它无法编译:
haskell - 带遍历的 Haskell 镜头教程
我正在尝试遵循本教程:http ://blog.jakubarnold.cz/2014/08/06/lens-tutorial-stab-traversal-part-2.html
我正在使用加载到 ghci 中的以下代码:
从那里开始,像这样简单的东西可以工作:
但是,当我尝试执行下一步时,它不起作用:
我得到:
我看到 Lens 具有 Functor 的类型约束,而 traverse 作为 Applicative 对 f 具有更受约束的类型约束。为什么这不起作用,为什么博客教程建议它起作用?