问题标签 [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 投票
4 回答
1903 浏览

haskell - 在操作不可变数据结构时,Clojure 的 assoc-in 和 Haskell 的镜头有什么区别?

我需要操作和修改深度嵌套的不可变集合(地图和列表),并且我想更好地理解不同的方法。这两个库或多或少解决了相同的问题,对吧?它们有什么不同,一种方法比另一种方法更适合哪种类型的问题?

Clojure 的assoc-in
Haskell 的lens

0 投票
2 回答
285 浏览

haskell - 如何使用镜头库进行 snoc?

在尝试使用 Edwards图书馆时,我再次感到困惑。lens我尝试snoc在状态上下文中将一些东西放在向量的末尾:

虽然这可行,但我想使用[cons][2],但我不知道如何使用。文档提到[0,1,2] |> 3 === [0,1,2,3]但我不知道如何在状态上下文中执行此操作。

0 投票
1 回答
221 浏览

haskell - 是否有一些方法可以为没有下划线标识符的镜头构建记录值?

例如我有以下记录

我只看到了两种构建新值的方法:

  • Rec{_a=1,_b=2,_c=3}
  • Rec 1 2 3

如果记录字段的数量超过一对并且下划线在第一个中看起来不自然,则第二个变体看起来不太好。

还有其他方法可以构造记录值吗?

0 投票
2 回答
234 浏览

haskell - 如何使用 Lenses 对处于某种状态的序列执行只读单子操作?

我的数据结构或多或少看起来像这样(为了问题而简化)

我用来makeLenses为这两个生成访问器。因此,我能够像这样进行大规模操作:

这很棒。


但是,我找不到等效的方法(打印 every num):

我尝试过类似的东西

但我看到使用traversed类似状态的唯一方法涉及使用类半群,我不想组合这些字段;我想对驻留在我的 state 中的某个序列中的元素中的每个元素的一部分运行一元操作

那么,这是否可以使用一些提供的镜头功能,或者我必须自己写,不知何故?

0 投票
2 回答
566 浏览

haskell - 如何使用镜头语法检查地图是否有键?

如何使用镜头语法检查地图是否有键?

如何用镜头写这个?

0 投票
1 回答
1499 浏览

haskell - 从具有默认值的镜头获取可能

许多镜头吸气剂返回 Maybe 值。而且我经常需要用一些默认值替换它们。

说地图查找,但默认。

这可以用镜头语法编写吗?也许接近这个:

0 投票
4 回答
3794 浏览

haskell - 镜片和拉链有什么区别?

这是在 Haskell 中使用拉链的示例:

这是在 Clojure 中使用拉链的示例:

这是在 Haskell 中使用 Lens 的示例:

这是在 Clojure 中使用镜头的示例。

现在看来,lens 和 zippers 都是遍历嵌套数据结构的函数式方法。

我的问题是:镜片和拉链有什么区别?是否适合特定用例?

0 投票
1 回答
925 浏览

haskell - 如何使用带有镜头的一元函数进行修改?

我需要一个可以像 一样工作的镜头功能over,但具有单子操作:

虽然这个函数很容易定义(它实际上只是一个恒等模WrappedMonad),但我想知道这些函数是否定义在lens的某个地方?

0 投票
0 回答
303 浏览

haskell - 使用镜头库与使用命令式语言编程有何不同?

与 C 或 Python 等语言相比,使用镜头库有什么优势?

我知道镜头库的状态仍然是不可变的,但从实际的角度来看,它有什么不同?

示例将非常有用。

编辑:

我真正想知道的是为什么具有不可变状态对镜头库有利/不利,例如,我们不能使用具有可变状态的镜头获得更好的性能吗?

0 投票
1 回答
200 浏览

haskell - 如何组合镜头和函子?

我正在努力适应lensHaskell 的库,并发现自己在一些简单的问题上苦苦挣扎。例如,假设(为方便起见)at_1具有以下类型(至少我是这样理解它们的):

如何将这些镜头组合成具有以下类型的镜头: