问题标签 [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 - 在没有 Monoid 实例的情况下,如何处理 Control.Lens.Indexed 中 at 的 Maybe 结果
我最近在 Hackage 上发现了 lens 包,并且现在一直在尝试在一个小型测试项目中使用它,如果我继续努力的话,在很遥远的一天可能会变成 MUD/MUSH 服务器。
这是我的代码的最小化版本,说明了我现在使用用于访问键/值容器的 at 镜头面临的问题(在我的情况下为 Data.Map.Strict)
由于房间、玩家和类似对象在整个代码中都被引用,因此我将它们存储在我的 World 状态类型中,作为其数据对象的 Id(新类型 UUID)映射。
要检索那些有镜头的人,我需要以某种方式处理 at 镜头返回的 Maybe (如果键不在地图中,这就是 Nothing)。在我的最后一行中,我尝试通过 traverse 执行此操作,只要最终结果是 Monoid 的实例,它就会进行类型检查,但通常情况并非如此。这不是因为 playerLocation 返回一个没有 Monoid 实例的 RoomId。
由于 traverse 只需要 Monoid,因为 traverse 泛化到大小大于 1 的容器,我现在想知道是否有更好的方法来处理这个问题,它不需要我想要的对象中可能包含的所有类型的语义上无意义的 Monoid 实例存储在地图中。
或者我可能完全误解了这里的问题,我需要使用一个完全不同的相当大的镜头包?
haskell - 带镜头和拉链的遍历树
我正在学习镜头包。我必须说这是一项相当具有挑战性的任务。
有人能告诉我如何用镜头的拉链穿过一棵树吗?特别是,我如何编写一个函数来获取根列表并允许我访问子树的分支?
假设我有这棵树。如果我的输入是[1, 3]
,该函数应该允许我访问节点 10 和 11。
此外,我究竟如何使用saveTape
和restoreTape
保存遍历路径(到 StateT 或 IORef)?
haskell - 使用自定义名称处理器而不是默认的基于“下划线”的“镜头”库生成镜头
标准makeLenses
实现为以下划线开头的记录的所有字段生成镜头。由于许多原因,我非常不喜欢在我的记录中引入如此尴尬的命名约定的想法。我想要做的只是为记录的所有字段生成镜头,并通过在字段名称后附加一个后缀“L”来命名它们。
有了一个fc-labels库,我所要做的就是
但是镜头库的规则集和东西的配置要复杂得多,这并不容易引起人们的注意。所以我要求一个特定的配方来达到同样的效果。
haskell - 使用“镜头”从地图中获取多个结果
有这些进口:
以及定义如下的映射值:
我可以像这样一个一个地得到它的元素:
我想知道的是,有一组这样的键:
如何构造这样的吸气剂(我猜),使用它我将能够获得一组(或列表)匹配元素:
请注意,结果仅包含 2 个元素,因为 key 没有匹配项'd'
。
haskell - 变形与镜头有何关系?
Lens,记录访问器如何,例如
http://hackage.haskell.org/packages/archive/lens/3.9.0.2/doc/html/Control-Lens-Type.html#t:Lens
与变形有关?例如
你能让前者成为后者的实例吗?
我最近经常使用镜头。在 Haskell 编程中,镜头在许多方面都至关重要。它们是用于记录访问、有状态程序的工具……为了更好地理解镜头,我开始阅读“香蕉、镜头、信封和铁丝网”论文。在“INSIDE 206-105”的帮助下,我慢慢地重新实现了 Haskell 中的 -morphisms。然后我想到了上面的问题。
haskell - Control.Lens 的索引列表需要 Monoid 约束
以下代码无法编译:
给出这个错误
假设 MyType 成为一个幺半群没有意义,我怎样才能获得允许我访问这个嵌套字段的 Lens(或 Traversal,或任何最合适的 - 我不确定区别)?最好具有阅读和更新的能力。
haskell - Combining lenses
Using a lens library I can apply a modification function to individual targets, like so:
How can I combine those individual lenses (_1
and _3
) to be able to perform this update to both of the targets at once? I expect something in the spirit of the following:
haskell - 为什么我的数据类型需要一个 Monoid 实例才能使用这个镜头?
我在具有 SceneGraph 类型字段“_scene”的记录上使用下面的代码。我使用 makeLenses 为它创建了镜头。
我收到错误:
但我不明白为什么 SceneGraph 必须是 Monoid 的一个实例才能使用这个镜头。
haskell - 将吸气剂组合成一个折叠
haskell - 我可以使用一元动作从 Control.Lens 过滤折叠吗?
Control.Lens.Fold contains filtered
,我可以在应用一些单子操作之前使用它来过滤列表。似乎没有对应的filteredM
- 但有没有办法获得这种效果?
要清楚,说我有
我如何适用于for which返回actionM
的每个元素?xs
predM
True
一个重要的限制是我想predM
在第一次调用之前对所有调用进行排序actionM
- 所以我需要一种方法来对列表进行两次传递。我不能仅仅将predM
and组合actionM
成一个函数。