Scala 2的shapeless有类似于Scala 3的并集类型吗



Scala 3有非常方便的Union类型。我在Scala2的shapeless中寻找一些更接近的东西,允许类似的行为。示例:

case class Cs1()
case class Cs2()

我试过shapeless.v,但它似乎没有像我想象的那样工作。

val v: Cs1 v Cs2 = Cs1() // compile error

错误:

[error]  found   : example.Hello.Cs1
[error]  required: example.Hello.Cs1 ∨ example.Hello.Cs2

有什么不成形的东西吗?

shapeless.∨用于上下文边界,不能在返回类型中使用。

def foo[T: (Cs1 |∨| Cs2)#λ] = ???
foo[Cs1] // compiles
foo[Cs2] // compiles
foo[Int] // doesn't compile

另请参见

如何定义";类型析取";(联合类型(?

2种以上类型的无定形类型析取

https://milessabin.com/blog/2011/06/09/scala-union-types-curry-howard/

最新更新