Dato il seguente AST per Success
e Failure
:vincoli ai Tipo firme per Sinistra e Destra
sealed trait Success
case object FooGood extends Success
case object BarGood extends Success
sealed trait Failure
case object FooBad extends Failure
case object BarBad extends Failure
E il metodo di firma:
def go[A <: Failure, B <: Success](x: Int): Either[A, B] = ???
Tuttavia, mi piacerebbe per vincolare l'Left
e Right
i tipi devono essere specifici per Foo
o Bar
.
Ma le seguenti compila codice (contro la mia volontà):
scala> go[FooBad.type, BarGood.type](5)
scala.NotImplementedError: an implementation is missing
Come posso ottenere questo vincolo a tempo di compilazione?
Perché non utilizzare tratto Foo e Bar, con questa definizione: def andare [F] (x: Int): O [Fallimento con F, successo con F] = ??? – volia17
Sono d'accordo che dovrebbe essere compilato. Non stavo affermando che dovrebbe ** non ** compilare. La mia domanda è come scrivere un'implementazione 'go' (in un modo generico) che non riuscirà a compilare se una' Barra 'non appare su entrambi i lati, cioè 'Destra' e' Sinistra', o viceversa per ' foo'. –