问题标签 [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 - 在操作不可变数据结构时,Clojure 的 assoc-in 和 Haskell 的镜头有什么区别?
我需要操作和修改深度嵌套的不可变集合(地图和列表),并且我想更好地理解不同的方法。这两个库或多或少解决了相同的问题,对吧?它们有什么不同,一种方法比另一种方法更适合哪种类型的问题?
haskell - 如何使用镜头库进行 snoc?
在尝试使用 Edwards图书馆时,我再次感到困惑。lens
我尝试snoc
在状态上下文中将一些东西放在向量的末尾:
虽然这可行,但我想使用[cons][2]
,但我不知道如何使用。文档提到[0,1,2] |> 3 === [0,1,2,3]
但我不知道如何在状态上下文中执行此操作。
haskell - 是否有一些方法可以为没有下划线标识符的镜头构建记录值?
例如我有以下记录
我只看到了两种构建新值的方法:
Rec{_a=1,_b=2,_c=3}
Rec 1 2 3
如果记录字段的数量超过一对并且下划线在第一个中看起来不自然,则第二个变体看起来不太好。
还有其他方法可以构造记录值吗?
haskell - 如何使用 Lenses 对处于某种状态的序列执行只读单子操作?
我的数据结构或多或少看起来像这样(为了问题而简化)
我用来makeLenses
为这两个生成访问器。因此,我能够像这样进行大规模操作:
这很棒。
但是,我找不到等效的方法(打印 every num
):
我尝试过类似的东西
但我看到使用traversed
类似状态的唯一方法涉及使用类半群,我不想组合这些字段;我想对驻留在我的 state 中的某个序列中的元素中的每个元素的一部分运行一元操作。
那么,这是否可以使用一些提供的镜头功能,或者我必须自己写,不知何故?
haskell - 如何使用镜头语法检查地图是否有键?
如何使用镜头语法检查地图是否有键?
如何用镜头写这个?
haskell - 从具有默认值的镜头获取可能
许多镜头吸气剂返回 Maybe 值。而且我经常需要用一些默认值替换它们。
说地图查找,但默认。
这可以用镜头语法编写吗?也许接近这个:
haskell - 镜片和拉链有什么区别?
这是在 Haskell 中使用拉链的示例:
这是在 Clojure 中使用拉链的示例:
这是在 Haskell 中使用 Lens 的示例:
这是在 Clojure 中使用镜头的示例。
现在看来,lens 和 zippers 都是遍历嵌套数据结构的函数式方法。
我的问题是:镜片和拉链有什么区别?是否适合特定用例?
haskell - 如何使用带有镜头的一元函数进行修改?
我需要一个可以像 一样工作的镜头功能over
,但具有单子操作:
虽然这个函数很容易定义(它实际上只是一个恒等模WrappedMonad
),但我想知道这些函数是否定义在lens的某个地方?
haskell - 使用镜头库与使用命令式语言编程有何不同?
与 C 或 Python 等语言相比,使用镜头库有什么优势?
我知道镜头库的状态仍然是不可变的,但从实际的角度来看,它有什么不同?
示例将非常有用。
编辑:
我真正想知道的是为什么具有不可变状态对镜头库有利/不利,例如,我们不能使用具有可变状态的镜头获得更好的性能吗?
haskell - 如何组合镜头和函子?
我正在努力适应lens
Haskell 的库,并发现自己在一些简单的问题上苦苦挣扎。例如,假设(为方便起见)at
并_1
具有以下类型(至少我是这样理解它们的):
如何将这些镜头组合成具有以下类型的镜头: