问题标签 [lenses]
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 - 如何编写 Control.Lens.AT 的实例
我有一个数据结构,可以理解为类似于Data.Map
它将一种类型的键映射到另一种类型的值。我想Control.Lens.At
为这种类型编写一个实例,但我似乎永远无法满足所有要求。
给定Struct k v
, lookup
,和insert
,我必须做什么才能工作?update
delete
instance At (Struct k v)
haskell - 使用 Control.Lens 组合镜头,其中必须调用中间函数
假设我有以下内容:
我试图通过构成镜头来了解通过多层向下延伸的各种方法。我知道如何进行这些操作:
但是,如果我想更改书名怎么办?也许我想用 来改变它们map
,或者我只想用 改变第三个!! 2
?看来我应该为此制作一个新镜头。我想我应该用一个中间函数来组成books
andtitle
镜头,即map
or !!
。
我该怎么做呢?
haskell - 为镜头寻找缺失的状态组合器
我目前的代码如下所示:
foo
一个字段在哪里,Lens
并且Foo
runFoo :: MonadState m => Foo -> m Foo
我认为应该有一种方法可以在一行中执行此操作,但我找不到。我认为它应该有这样的评论:
问题:
- 这样的组合器存在吗?如果是这样,那是什么?
- 当我遇到这样的另一个问题时,搜索它的最佳方法是什么(即通常我会在 Hoogle 中输入它,但我没有运气好用镜头库做到这一点)
- 这实际上是 Control.Monad 中的原始组合器吗?(如果这是 kleisli 箭的另一份工作,我会有点尴尬)
scala - Scalaz:如何用价值镜头组成地图镜头?
这里有一个 Scalaz 地图镜头的例子:Dan Burton 称之为containsKey
,它的灵感来自 Edward Kmett 的演讲。Scalaz 7 中也有一些mapVPLens
对修改映射中的值很有用的东西。
我的问题是:如果我有一个用于修改 typeV
的镜头和一个用于 a 的镜头,我该Map[K,V]
如何构图?我一直在寻找一个很好的简单示例,但 Scalaz 中仍然缺乏示例。
我对 Scalaz 6 和 Scalaz 7 解决方案都感兴趣。
haskell - 构建相同的镜头
我正在尝试Lens
从一个 getter 和一个 setter 创建一个我从另一个得到的Lens
:
但是,它失败了一个晦涩的(对我来说)错误:
我究竟做错了什么?Getting
这可能是非常基本的东西,但是,唉,我对真正发生的事情 ( , s)的了解还不够,无法Accessor
自己解开它。
haskell - Control.Lens 镜头全图
我有一张从 A 型到 B 型的全图。
我用作Data.Map
示例实现,但它可以是任何东西,例如一个Array
甚至是一个Bool
索引元组:
我想要一个tmAt
构建镜头的功能:
问题是我如何构造tmAt
和tmGet
(tmSet
或tmModify
)?
scala - 用于采集参数的 Scala 镜头
使用镜头更新集合中元素的最佳方法是什么?例如:
如果我想使用镜片创建一个改变单一成分数量的新配方,最好的方法是什么?
我尝试过的方法是动态创建一个镜头:Lens[List[Ingredient], Ingredient]
. 不过这感觉有点笨拙:
haskell - Haskell Control.Lens Traversing Prism
我有一个深度嵌套的数据结构,我正在使用 Control.Lens.* 来简化在状态单子中访问它的值。
所以考虑以下几点:
我如何在 Maybe 上“功能性地”操作?我想写一个惯用的getter:
更好的是,当 Config 嵌套更深时,我们将如何处理这种情况?
我们可以使用访问器 foo 和 bar 来返回修改后的 Bar 吗?
haskell - Filtering composite structures with Lens
I have a [(a, Maybe b)]
, and want to obtain a [(a, b)]
, with all pairs where the second element was Nothing
filtered out.
Is there a concise way to describe this operation using lens?
haskell - 将 Lens' ab 转换为 Lens' a (Maybe b)
我有几个数据结构,比如
所以我决定写一个简单的类型类,让它更容易编写
但是后来我遇到了一些问题,其中一些结构具有相应的字段作为可选
现在我不能再使用类型类了。由于具有该字段可选的数据类型的数量大致相同,因此我决定更改类型类会更好:
但是由于我对镜头库不是很有经验,所以我一直在弄清楚如何使这个新镜头与 和 的类型一起Data1
工作Data2
。理想情况下,我希望能够查看它并获取Maybe Int
任何类型的值,并且在设置时我希望Just x
将字段设置为x
forData1
并且Data2
在传递时成为这两种类型的无操作Nothing
。
这可以使用现有的组合器还是我必须自己编写镜头?我这样做很好,但是大多数现有教程都使用 TH 并掩盖了手工编写的细节。
我正在使用 GHC 7.6.3 和lens
3.10。