scala - 用于模式匹配具有偏函数的无形联积的库
问题描述
我有一个相对符合人体工程学的模式,我用它来匹配无形Coproduct
的 s。它看起来基本上是这样的
val stringOrInt: String :+: Int :+: CNil = Coproduct("Hello world")
implicit class Coproduct2Syntax[A, B](val value: A :+: B :+: CNil) extends AnyVal {
type cop = A :+: B :+: CNil
def comatch[Z](
caseA: PartialFunction[A, Z],
caseB: PartialFunction[B, Z]
): Z = {
val a = Function.unlift[cop, Z](_.select[A].flatMap(caseA.lift))
val b = Function.unlift[cop, Z](_.select[B].flatMap(caseB.lift))
a.orElse(b).apply(value)
}
}
stringOrInt.comatch({
case s => s.length
},{
case i => i
})
// Int = 11
这工作得很好,但我还没有经历定义CoproductNSyntax
0-22 的麻烦。
我知道我们可以用 做类似的事情Poly1
,但这需要定义一个单独的对象
我的问题是:是否有任何现有的库提供这种类型的模式来匹配Coproduct
s?
解决方案
推荐阅读
- groovy - 如何从数组中删除空元素
- c++ - 使用 CMake 和 Visual Studio 2019 编译 GLEW?
- python - 如何使用 pandas 将 API 中的数据拆分为行和列?
- angular - 拖放自定义行为
- javascript - 计算for循环中输入值的总和
- jasper-reports - 如何在通过 Jasper 报告生成的 PDF 中打印“<”符号
- android - 如何在 React Native 中进行 Facebook 登录?
- c# - 将 .NET Web API 令牌转换为 6 位数字 OTP
- maven - 如何使用 maven jar 插件在生成的 jar 文件的清单文件的类路径中列出依赖项及其相对路径?
- sql - 如何根据条件生成列的范围