问题标签 [monocle-scala]

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 投票
1 回答
91 浏览

monocle-scala - 在 Monocle 中使用 applyOptional

我试图弄清楚如何使用applyOptional。我有这个:

但编译器告诉我“无法解析符号 applyOptional。” 我导入 ApplyOptionalOps._ 只是为了确认我有正确的导入。

0 投票
1 回答
1036 浏览

scala - 如何使用单片眼镜修改嵌套地图和scala中的另一个字段

我第一次尝试单片眼镜。

这是案例类:

以及我想做的使用标准scala的当前修改:

这是我使用单片眼镜的实现

不幸的是,代码并不干净……</p>

  1. 有没有更简洁的方法?
  2. 我们可以使用宏生成所有样板吗?

[更新]我想出了一个组合器

问题是我还需要生产一个中间的无用的S。

[update2] 我已经清理了组合器的代码。

0 投票
1 回答
266 浏览

scala - 如何在scala中使用单片机减少样板

在代码出现的第 12 天,我使用 monocle(scala 中的一个镜头库)重构了我的代码。

是否可以改进此代码:

而这里又是一个尝试,分离每个字段的修改

还有一个问题:有没有办法Map.withDefaultValue与单片眼镜一起使用?

完整代码在这里:https ://gist.github.com/YannMoisan/b8ba25afc041d88706545527d9ec1988

0 投票
1 回答
209 浏览

scala - Scala中的复制方法和子类型多态性

我正在尝试解决下面的以下 Scala 编译器错误。

在(伪)-Haskell(没有子类型)中,这将类似于:

目前我正在研究 ScalaZ、Shapeless 和 Monocle。

乍一看,Monocle 似乎没有问题(虽然不确定),如果我的直觉是错误的,请证明我错了。

ScalaZ + Shapeless 可能起作用,我不确定如何(从未使用过它们)。

1) 在 Scala 中解决这个问题的最简单方法是什么?

2) ScalaZ 本身就足够了吗?还是无形本身就足够了?还是两者的结合是必要的?或者也许其他方式?

0 投票
1 回答
266 浏览

scala - 使用单片眼镜/scalaz 镜片时的平等成本

我正在阅读有关Diode的信息,它让我想到了Monocle / Scalaz中的镜头:

如果我(有条件地)使用Monocle / Scalaz镜头对深度嵌套数据结构的某些部分进行深度修改,并且想要比较是否有变化,是否需要进行深度比较,或者有没有办法使用参考相等看看这两个数据结构(有条件修改之前和之后)是否相同?

换句话说:

val f_new=modifyWithMonocleIfTheSunIsUp(f_old)

在数据结构的根 ( , ) 处使用引用相等 ( )可以使比较f_new==f_old有效吗?eqf_oldf_new

换句话说,

当且仅当f_new==f_old是真的时,它是真的吗? f_new.eq(f_old)(Equation 1)

如果不是,为什么不呢?

如果没有,是否有可能使Equation 1true ?如何 ?

0 投票
1 回答
418 浏览

scala - 在使用组合光学器件构建的路径中定义可选值

我有一个使用默认值创建的嵌套案例类的结构:

我想用默认值创建整个东西,然后使用 Monocle 特别修改需要非默认的元素。

用iso很容易。我可以使用组合指定导航,然后使用 set 修改内部元素:

不幸的是,使用 prims 似乎并不那么优雅,因为set/modify只会在导航期间定义了所有选项时修改内部元素(Some(...)

到目前为止,我想出的最好的方法是使用组合光学设置Some()路径的每个可选元素,然后一直使用组合光学设置我们感兴趣的元素。

理想情况下,我希望组合的每个构建块都将可选值设置为Some(defaultValue)如果它们最初是None. 显然,需要定义构建块,包括路径步骤的适当默认值。有什么建议么?

包含导入的完整代码:https ://github.com/jcaraballo/navigating-fixtures-with-monocle/blob/master/src/test/scala/pr/NavigateIntoOptionSpec.scala

0 投票
1 回答
214 浏览

scala - 如何将 Monocle 镜头打印为属性访问器样式字符串

使用Monocle我可以定义一个镜头来毫无问题地读取案例类成员,

这可以用来比较md5两个对象之间的值,并在值不同时失败并显示包含字段名称的错误消息。

有没有一种方法可以单独生成一个用户友好的字符串来Lens识别镜头正在读取的字段?我想避免明确提供字段名称

如果有一种解决方案也适用于具有多个组件的镜头,那就更好了。对我来说,即使解决方案只工作到一个深度也很好。

0 投票
1 回答
774 浏览

scala - 结合镜头集合

Monocle 是一个很棒的库(而不是唯一一个),它实现了镜头模式,如果我们必须在巨大的嵌套对象中更改一个字段,那就太好了。就像在例子http://julien-truffaut.github.io/Monocle/

以下样板

可以很容易地替换为

这是伟大的。据我了解,宏魔术将所有内容完全转换为与上述相同的代码。

但是,如果我想组合几个动作怎么办?如果我想一键更改街道名称、地址城市和公司名称怎么办?如下所示:

如果我只是在这里重用镜头,我将有以下代码:

最终将被翻译成三个 employee.copy(...).copy(...).copy(...)调用,而不仅仅是一个 employee.copy(...)。如何让它变得更好?

此外,应用一系列操作真的很棒。就像成对序列一样Seq[(Lens[Employee, String], String => String)],第一个元素是指向正确视场的透镜,第二个是修改它的函数。这将有助于从外部构建这样的操作序列。对于上面的例子:

或类似的东西...

0 投票
2 回答
507 浏览

scala - 使用 Monocle 更新嵌套地图的正确语法

我已经看到了更新 a的官方示例Map,但我在语法上遇到了问题。

我想更新labels Map. 但我无法编译以下内容:

事实上,Monacle 的一位作者的这个答案并没有编译。

0 投票
0 回答
126 浏览

monocle-scala - 更新嵌套案例类中的单个项目

大学示例解释了如何更新地图的所有项目:

设置单个项目,可以使用这个繁琐的代码:

为了更新单个项目,我写道:

有没有更优雅的语法?


使用列表,选项不是必需的:

或者,更紧凑: