问题标签 [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.
json - 有没有办法将 circe-optics 的 JsonPath 与字符串一起使用,就像在 jq CLI 工具中一样?
我想做的是将字段描述符定义为json 的field1.field2[1].field3
访问值:two
我知道我可以使用applyDynamic
and来做到这一点root.field1.field2.index(1).field3
,但是有没有办法使用字符串创建这样的镜头?
scala - 使用选项更新深度嵌套的案例类
我有一个 3 级嵌套案例类模型,其中包含一组代表数据库中一些数据的选项。它本质上是:
我了解如何使用一些用于理解或链flatMap
(另一个 Option 对象中的 Scala Option 对象)从中获得深度嵌套的字段,并且我也了解如何使用镜头库对其进行更新,但我想弄清楚如何更新即使树中的某些东西是字段,并且如果它们尚不存在,它们也会None
自动生成它们。Some
例如,我将如何处理我想添加到keys
列表但用户尚未设置任何内容的情况settings
?从某种意义上说,是否有可能自动创建一个Some(settings)
字段和一个Some(keys)
字段?
我知道如何通过大量模式匹配来做到这一点,但这似乎是错误的,因为 1. 代码向右漂移和 2. 不使用map
或flatMap
非常不使用选项。
这可以单独使用镜头库吗?我在这里读到这可能是不可能的:https ://github.com/julien-truffaut/Monocle/issues/215就 Monocle 而言,它无法更新Option
一个None
. 也许我需要以另一种方式考虑这个问题?
谢谢
scala - 是否有“可选”的van Laarhoven表示
许多类型的光学器件都有 van Laarhoven 表示。
例如,Lens
类型的 aLens s t a b
可以表示为:
类似地 aTraversal
可以用类似的方式表示,将Functor
约束交换为Applicative
:
一些光学框架,例如Monocle和Arrow定义了一个名为Optional
.
在 Monocle 的光学层次结构 Optional
中,介于Lens
和Traversal
据我了解:如果 aTraversal
就像 aLens
可能有零到多个目标,那么 anOptional
就像 aLens
可能有零到一个目标。
在 Monocle 中,Optional
定义为一对函数:
Monocle 源代码中的注释表明,它也可以表示Optional
“越来越PLens
弱PPrism
”
是否可以将 an 表示Optional
为 van Laarhoven 函数?
scala - 单片眼镜。斯卡拉。如何处理递归数据?
考虑一个简单的案例:
如何使用 Monocle 更改任何深度?
如果它不存在并且有时更改名称,我想将一个新节点添加到列表子项中。但是任何深度。递归地。
scala - 如何创建带有序列的 Monocle 镜头?
我正在尝试创建一个带有嵌套案例类和序列的 Monocle 镜头。
最后一行编译失败。我正在使用 Monocle 1.5.0-cats。
PS:替换Seq[B]
为List[B]
作品,但我的案例类是由使用序列的scalaxb生成的。
typescript - 函数式编程/光学概念,它采用部分对象并使用镜头和遍历返回“填充”对象?
(编辑我正在使用monocle-ts,但是如果使用 monocle-ts 是不可能的(因为作者甚至说它只是 Scala 原始 Monocle 的部分端口)但是如果在另一个光学包中有任何语言的东西,我愿意将这些想法移植到 TypeScript。)
假设我有一个辅助类型Partial<A>
,它表示一个记录,该记录具有类型的部分或全部,但没有非成员A
。(所以如果A = { foo: number, bar: string }
then Partial<A> = { foo?: number, bar?: string }
)(编辑这是 Typescript 的内置 Partial 实用程序类型。)
我从
假设我已经组合了一个镜头并遍历组合 ( composedTraversal
) 以便它聚焦于 partialxs
fromPartialState
然后作为一个数组遍历它。这将是一个Traversal<PartialState, Partial<Child>>
.
还假设我有一个declare const fn = (x:Partial<Child>):Partial<Child>
然后我可以应用于fn
所有孩子,composedTraversal.modify(fn)(partialState)
这将产生一个新PartialState
的fn
应用于所有partialxs
.
是否有一些概念可以让我“扩大”或“转换”这个遍历到不同的东西,以便我可以组成镜头和遍历并使用fillInTheGaps
,这样我就可以传入PartialState
并取回 a State
?
忽略我的语法是 TypeScript,我添加了 monocle-scala 标签,因为如果这个概念存在,我想它在 Monocle 库中,我可以将这些知识翻译到我正在使用的库中。
编辑激发这个问题的问题是我在 Redux 应用程序中有一个表单输入,用户输入数据但大多数不是必需的。INPUT 在编译时是未知的(它们是从 RESTful API 查询中重试的),所以我不能将模型表示为
相反,它表示为
我还可以从 RESTful 服务器获取默认模型。所以我将这些建模为Parent
(来自服务器的Partial<Parent>
内容)和(代表用户在应用程序中的输入)。
在进行一些计算之前,我需要为缺少的道具折叠默认值。这是我fillInTheGaps
上面引用的函数。
希望通过我的代码中的类型来强制执行此操作,并且因为我已经编写了很多光学元件,所以重用其中的一些。实际上,我编写了一个镜头和遍历来对这些数据执行其他操作。myLens.compose(myTraversal).modify(fn)
接受 aPartial<State>
并返回 aPartial<State>
但我希望将这些组合起来最终得到一个接受部分并返回整体的函数。
我显然可以只写const filler: (Partial<State>):State = myLens.compose(myTraversal).modify(fillInTheGaps)
然后//@ts-ignore
在它上面扔一个并且知道它会起作用,但这似乎,呃,脆弱。
scala - 如何将单片眼镜库添加到我的 scala 项目中?
我有一个使用 scala 插件的 scala 项目。我需要为一个项目使用这个单片眼镜库(https://www.optics.dev/Monocle/),但我只是不知道如何将它添加到我的项目中。对于 sbt 项目,应该有一个 build.sbt 文件,我可以在其中简单地放入如下内容:
这应该为我添加依赖项。但是,我不知道我应该如何在我当前的项目中执行此操作,并且在网上找不到任何线索,我可以下载的任何地方都没有.jar 文件。
我还尝试用这个东西链接到图书馆文档:
这没有用。我的目录结构如下所示:
scala - 将嵌套在元组内的列表的每个条目与元组的其他部分合并
我有一个元组列表(我们称之为L1
),在这个元组_1
中是一些带有数据的类,并且是一个带有其他数据的其他类_2
的列表(我们称之为)。L2
对于L1
(即元组列表)的每个条目,我需要将每个条目L2
与相应的_1
. 我正在尝试构图,但卡住了。这是一个代码片段来演示我想要实现的目标:
我想做的是这样的:
我是否朝着正确的方向前进?我应该以某种方式尝试组合这两个镜头还是需要完全不同的东西?我也在我的项目中使用 Cats,但我对此很陌生,目前看不出它在这种情况下是否有用。