问题标签 [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.
monocle-scala - 在 Monocle 中使用 applyOptional
我试图弄清楚如何使用applyOptional。我有这个:
但编译器告诉我“无法解析符号 applyOptional。” 我导入 ApplyOptionalOps._ 只是为了确认我有正确的导入。
scala - 如何使用单片眼镜修改嵌套地图和scala中的另一个字段
我第一次尝试单片眼镜。
这是案例类:
以及我想做的使用标准scala的当前修改:
这是我使用单片眼镜的实现
不幸的是,代码并不干净……</p>
- 有没有更简洁的方法?
- 我们可以使用宏生成所有样板吗?
[更新]我想出了一个组合器
问题是我还需要生产一个中间的无用的S。
[update2] 我已经清理了组合器的代码。
scala - 如何在scala中使用单片机减少样板
在代码出现的第 12 天,我使用 monocle(scala 中的一个镜头库)重构了我的代码。
是否可以改进此代码:
而这里又是一个尝试,分离每个字段的修改
还有一个问题:有没有办法Map.withDefaultValue
与单片眼镜一起使用?
完整代码在这里:https ://gist.github.com/YannMoisan/b8ba25afc041d88706545527d9ec1988
scala - Scala中的复制方法和子类型多态性
我正在尝试解决下面的以下 Scala 编译器错误。
在(伪)-Haskell(没有子类型)中,这将类似于:
目前我正在研究 ScalaZ、Shapeless 和 Monocle。
乍一看,Monocle 似乎没有问题(虽然不确定),如果我的直觉是错误的,请证明我错了。
ScalaZ + Shapeless 可能会起作用,我不确定如何(从未使用过它们)。
1) 在 Scala 中解决这个问题的最简单方法是什么?
2) ScalaZ 本身就足够了吗?还是无形本身就足够了?还是两者的结合是必要的?或者也许其他方式?
scala - 使用单片眼镜/scalaz 镜片时的平等成本
我正在阅读有关Diode的信息,它让我想到了Monocle / Scalaz中的镜头:
如果我(有条件地)使用Monocle / Scalaz镜头对深度嵌套数据结构的某些部分进行深度修改,并且想要比较是否有变化,是否需要进行深度比较,或者有没有办法使用参考相等看看这两个数据结构(有条件修改之前和之后)是否相同?
换句话说:
val f_new=modifyWithMonocleIfTheSunIsUp(f_old)
在数据结构的根 ( , ) 处使用引用相等 ( )可以使比较f_new==f_old
有效吗?eq
f_old
f_new
换句话说,
当且仅当它f_new==f_old
是真的时,它是真的吗? f_new.eq(f_old)
(Equation 1)
如果不是,为什么不呢?
如果没有,是否有可能使Equation 1
true ?如何 ?
scala - 在使用组合光学器件构建的路径中定义可选值
我有一个使用默认值创建的嵌套案例类的结构:
我想用默认值创建整个东西,然后使用 Monocle 特别修改需要非默认的元素。
用iso很容易。我可以使用组合指定导航,然后使用 set 修改内部元素:
不幸的是,使用 prims 似乎并不那么优雅,因为set
/modify
只会在导航期间定义了所有选项时修改内部元素(Some(...)
)
到目前为止,我想出的最好的方法是使用组合光学设置Some()
路径的每个可选元素,然后一直使用组合光学设置我们感兴趣的元素。
理想情况下,我希望组合的每个构建块都将可选值设置为Some(defaultValue)
如果它们最初是None
. 显然,需要定义构建块,包括路径步骤的适当默认值。有什么建议么?
scala - 如何将 Monocle 镜头打印为属性访问器样式字符串
使用Monocle我可以定义一个镜头来毫无问题地读取案例类成员,
这可以用来比较md5
两个对象之间的值,并在值不同时失败并显示包含字段名称的错误消息。
有没有一种方法可以单独生成一个用户友好的字符串来Lens
识别镜头正在读取的字段?我想避免明确提供字段名称
如果有一种解决方案也适用于具有多个组件的镜头,那就更好了。对我来说,即使解决方案只工作到一个深度也很好。
scala - 结合镜头集合
Monocle 是一个很棒的库(而不是唯一一个),它实现了镜头模式,如果我们必须在巨大的嵌套对象中更改一个字段,那就太好了。就像在例子http://julien-truffaut.github.io/Monocle/
以下样板
可以很容易地替换为
这是伟大的。据我了解,宏魔术将所有内容完全转换为与上述相同的代码。
但是,如果我想组合几个动作怎么办?如果我想一键更改街道名称、地址城市和公司名称怎么办?如下所示:
如果我只是在这里重用镜头,我将有以下代码:
最终将被翻译成三个 employee.copy(...).copy(...).copy(...)
调用,而不仅仅是一个 employee.copy(...)
。如何让它变得更好?
此外,应用一系列操作真的很棒。就像成对序列一样Seq[(Lens[Employee, String], String => String)]
,第一个元素是指向正确视场的透镜,第二个是修改它的函数。这将有助于从外部构建这样的操作序列。对于上面的例子:
或类似的东西...