问题标签 [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.

0 投票
0 回答
250 浏览

haskell - 使用镜头选择元组的字段(Haskell)

以下不起作用,我该如何解决?

我想要的是(2, 3)

0 投票
1 回答
203 浏览

haskell - 如何使用“Of”镜头?(哈斯克尔)

我想写:

使用镜头。我想使用minimumOf镜头,但我无法从它的类型中弄清楚如何使用它。

我正在寻找类似的东西

但它不输入检查:

0 投票
1 回答
151 浏览

functional-programming - purescript-lens 合成类型错误

我正在尝试使用 purescript-lens 来更新嵌套记录的属性。但是,当我合成镜头以到达该属性时,我收到以下类型错误:

我对镜头和纯脚本比较陌生,所以它可能是简单而明显的。

产生此错误的相关代码如下(是的,它基于 purescript-thermite-todomvc):

我要更新的属性是 st.item.description ,上面的错误是指以“updateState (NewItem ...”开头的行。奇怪的是,下一行也报告了同样的错误。

关于如何解决类型错误的任何想法?

谢谢

0 投票
1 回答
356 浏览

haskell - 有条件地修改镜头的目标

如果游戏规则允许移动,我有一个函数可以从输入和棋盘生成更新的棋盘:

该板包含在GameState带有一些附加数据的类型中:

move现在,如果产生Just值,我想使用镜头更新游戏状态下的棋盘。我可以使用辅助函数来做到这一点:

但是,我想知道是否有一个组合器 Lens仅在提供的函数返回 a 时才修改 a 的目标Just。我找到了?~操作员,但它在左侧处理了偏袒。

是否有一个(可能更通用的)组合器可以实现这一点,或者是否有另一种方式以简洁和惯用的方式表达这一点?

0 投票
1 回答
622 浏览

haskell - 用于 GADT 的 makeLenses (Haskell)

是否有makeLensesGADT 的等价物?如果我有一个简单的GADT喜欢:

有没有办法通过传入构造函数和字段名称列表来自动生成镜头?

0 投票
1 回答
875 浏览

ocaml - OCaml 世界中的**镜头**是什么

谁能用 OCaml 解释 *什么是镜头?

我试图用谷歌搜索它,但几乎所有这些都在 Haskell 的世界中。

只希望在 OCaml 的世界中对它进行一些简单的演示,比如它是什么,它可以用来做什么等。

0 投票
1 回答
184 浏览

scala - Play 框架中的镜头支持

Play 框架是否默认包含任何镜头支持?像Monocole或 Scalaz 之类的东西。也许有一些我不知道的推荐替代方法(以及它们的基本原理)。

场景:我有一个不可变的、深度嵌套的案例类对象,我想复制它,并在对象的某处更改了字段。

我特别希望非常简单地做到这一点,而不需要太多样板,就像 Monocole 等镜头库所做的那样。

我很惊讶 Play 框架没有内置任何支持。我错过了什么吗?如果没有,是否有任何已知的支持计划?

0 投票
0 回答
108 浏览

haskell - 如何使用带有 IxSet 的镜头?

说,我有用户包含在用户列表中,如下所示:

什么命令会给我一个镜头来查看用户列表的第三个成员?

也许,因为我的数据定义允许多个用户使用相同的 ID,所以镜头可能不是我想要的……遍历?棱镜?

对我来说,部分困难在于我所有的谷歌搜索都将我带到了一个已弃用的包,称为 data-lens-ixset。

0 投票
1 回答
210 浏览

haskell - 如何在类似地图的容器中将镜头定义为总和类型?

我可以Lens'手动定义需要的:

它的工作原理如下:

我验证了该定义是合法的:

所以问题是:可以ll使用atand来定义_Left吗?

也许用某种方式prismToLens :: Prism' a b -> Lens' (Maybe a) (Maybe b),你可以做到at k . prismToLens _Left。但我不确定是否prismToLens有意义?Hoogle 对lens:(

编辑似乎第三定律并不总是成立。Key如果您更改为 ,很容易找到反例Bool。然而,在我的应用程序中,Map它实际上是依赖的,即 sum 分支取决于密钥,所以Lens法律应该成立(如果我访问foo,我知道它应该存在Left或根本不存在)。

0 投票
1 回答
227 浏览

haskell - Haskell 中的镜头和 Clojure 中的解构有何异同?

假设:

  • 我想解析一个嵌套的 JSON 字符串。
  • 我知道 Haskell 鼓励用类型系统解决问题,而 Clojure 避开类型系统,更喜欢用数据结构解决问题。
  • 我知道在这两种语言中,这个过程都被称为解构——但它在 Clojure 中没有另一个名字,而在 Haskell 中,这也被称为使用 lens,所以我将 Clojure 称为解构和移动上

我们可以看到我们可以在 Haskell中创建这样的镜头:

它的目的是从数据结构中获取health值。game

我们可以在 Clojure中进行这样的解构:

目的是从嵌套结构中获取名称、页面等的嵌套值。

在这两种情况下,您都提出了一种从嵌套结构中可重用检索值的机制。

我的问题是:Haskell 中的镜头和 Clojure 中的解构有何异同?