Ausgabe
Scala 3 hat sehr praktische Union-Typen . Ich suche nach etwas Näherem shapeless
für Scala 2, das ein ähnliches Verhalten ermöglichen würde. Beispiel:
case class Cs1()
case class Cs2()
Ich habe es versucht shapeless.v
, aber es scheint nicht so zu funktionieren, wie ich es mir vorgestellt habe.
val v: Cs1 v Cs2 = Cs1() // compile error
Der Fehler:
[error] found : example.Hello.Cs1
[error] required: example.Hello.Cs1 ∨ example.Hello.Cs2
Gibt es dafür etwas in Formlos?
Lösung
shapeless.∨
ist für Kontextgrenzen, Sie können es nicht im Rückgabetyp verwenden.
def foo[T: (Cs1 |∨| Cs2)#λ] = ???
foo[Cs1] // compiles
foo[Cs2] // compiles
foo[Int] // doesn't compile
Siehe auch
Wie definiert man “Typdisjunktion” (Vereinigungstypen)?
Formlose Typdisjunktion für mehr als 2 Typen
https://milessabin.com/blog/2011/06/09/scala-union-types-curry-howard/
Beantwortet von – Dmytro Mitin
Antwort geprüft von – Robin (FixError Admin)