[FIXED] Hat Shapeless für Scala 2 analoge Verbindungstypen für Scala 3?

Ausgabe

Scala 3 hat sehr praktische Union-Typen . Ich suche nach etwas Näherem shapelessfü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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like