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/