问题标签 [coproduct]
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和 Shapeless coproducts 将可能是其中任何一个的值编码为 JSON。
乍一看,这看起来不错:
但问题是我永远无法解码包含B
元素的副产品,因为任何可以解码为的有效 JSON 文档B
也可以解码为A
,并且 circe-shapes 提供的副产品解码器按照它们出现在副产品。
如何在我的编码中消除我的副产品元素的歧义?
scala - 如何定义副产品编解码器的鉴别器值?
你能解释一下副产品是如何工作的吗?这是我的代码
我想我必须定义 coproduct 编解码器,ArdbData
如本测试所示。我还需要为我在discriminatedBy.using()
. 当我开始测试它时,我突然发现.using
没有使用来自的密钥。而是使用每个Discriminator
实例的 ID。然后我注释掉Codec.coproduct[ArdbData]
它仍然可以编译!为什么会编译?定义鉴别器价值的正确方法是什么?
scala - Shapeless:迭代 Coproduct 中的类型
我想做一些非常简单的事情,但我正在努力制作正确的搜索或只是理解我见过的一些解决方案。
给定一个采用 Coproduct 的泛型类型参数的方法;
如何迭代形成联产品的类型?具体来说,对于作为案例类的每种类型,我想递归地检查每个字段并构建一个包含所有信息的映射。
目前我正在使用构建器模式解决此问题,我将在此处发布以防对其他人有用;
scala - 如何使泛型只接受一些彼此不相关的数据类型
有一个完美的特质。但是,我想重构与泛型 [T] 相关的部分,以限制泛型 [T] 可以接受的数据类型(我只需要 Option[JsValue] , JsValue , StringEnumEntry , String )。是否可以通过无形的副产品来解决这个问题?也许还有其他解决方案?
haskell - 存在类型类 vs. 数据构造函数 vs. Coproducts
我发现自己在我的设计中遇到了相同的模式,我从一个带有几个数据构造函数的类型开始,最终希望能够针对这些数据构造函数进行类型化,从而将它们拆分为自己的类型,然后必须增加在我仍然需要表示多个这些类型(即集合)的情况下,需要使用 Either 或另一个标记联合来降低程序其他部分的冗长性。
我希望有人可以为我指出一种更好的方法来完成我想做的事情。让我从一个简单的例子开始。我正在为一个测试系统建模,您可以在其中拥有最终以测试结束的嵌套测试套件。所以,像这样:
所以,到目前为止非常简单,本质上是一个花哨的树/叶声明。但是,我很快意识到我希望能够制作专门用于测试的功能。因此,我现在将其拆分为:
或者,我可能会推出“自定义”Either(特别是如果示例更复杂并且有超过 2 个选项),例如:
所以,已经很不幸了,仅仅为了能够拥有一个Suite
可以组合套件或测试的工具,我最终得到了一个奇怪的开销Either
类(无论是实际Either
的还是自定义的)。如果我使用存在类型类,我可以同时制作Test
并Suite
派生“Node_”,然后拥有Suite
一个上述Node
s 的列表。Coproducts 将允许类似的事情,我基本上会执行相同的Either
策略而没有标签的冗长。
现在让我用一个更复杂的例子来扩展。测试的结果可以是 Skipped(测试被禁用)、Success、Failure 或 Omitted(由于先前的失败,测试或套件无法运行)。同样,我最初是这样开始的:
但我很快意识到我希望能够编写获取特定结果的函数,更重要的是,让类型本身强制执行所有权属性:一个成功的套件必须只有成功或跳过的孩子,失败的孩子可以是任何东西,省略只能自己省略了,等等。所以现在我得到了这样的结果:
同样,我现在有了这些奇怪的“包装器”类型,比如AnyResult
,但是,我得到了过去只能从运行时操作中强制执行的东西的类型强制。有没有更好的策略不涉及打开存在类型类之类的功能?
scala - 用于模式匹配具有偏函数的无形联积的库
我有一个相对符合人体工程学的模式,我用它来匹配无形Coproduct
的 s。它看起来基本上是这样的
这工作得很好,但我还没有经历定义CoproductNSyntax
0-22 的麻烦。
我知道我们可以用 做类似的事情Poly1
,但这需要定义一个单独的对象
我的问题是:是否有任何现有的库提供这种类型的模式来匹配Coproduct
s?
scala - 从参数化函数中获取参数化特征的具体实现
试图获得一个参数化函数,该函数将返回一个特征的指定联积。
如何在 Scala 2.11 中实现这一点?
scala - 无形中的副产品不编译
我正在尝试shapeless
并正在尝试了解Generic
Coproducts。这是我尝试过的:
我希望val t2
与 完全相同val t1
,但不幸的是它甚至没有编译:
这个错误确实不是很清楚,对我有帮助。你能解释一下最后一个案例出了什么问题吗?
scala - 在 Shapeless 中添加两个以上的联产品
我想将两个以上单独的 Coproducts 合并为一个:
ABCDEF 应该是Aa :+: Bb :+: Cc :+: Dd :+: Ee :+: Ff :+: CNil
我看到有Prepend
,但我只能使用两个副产品:
scala - GADT Type as Shapeless Coproduct -- 如何用任意数量的代数构建解释器
假设我有两种 GADT 类型。
我为每种 GADT 类型都有一个解释器,它将打印出每个 GADT 子类型的描述。
我希望将两个 GADT 合并为一个名为 All 的 GADT
我可以通过硬编码所有 GADT 值来创建一个新的解释器。
但是,我想添加一堆 GADT 代数和解释器,并将它们任意组合成一个代数,所以我正在寻找一种更通用的方法来替换DualInterpreter
上述内容。我可以看到类型签名类似于
我想抽象的主要是description
方法内部的模式匹配,因为可用代数的数量可能会变得非常丑陋。它将有一个解释器,其中构造函数参数是解释器,并且模式匹配根据传递给描述方法的 ALG 类型委托给适当的解释器。