La tipificación implícita está infiriendo que Left("aoeu")
es Left[String,Nothing]
. Necesitas escribirlo explícitamente.
(Left("aoeu"): Either[String,String]) match{case Right(x) => ; case Left(x) => }
Parece que los candidatos de coincidencia de patrones siempre deben ser de un tipo que coincida con el valor que se busca.
scala> case class X(a: String)
defined class X
scala> case class Y(a: String)
defined class Y
scala> X("hi") match {
| case Y("hi") => ;
| case X("hi") => ;
| }
<console>:11: error: constructor cannot be instantiated to expected type;
found : Y
required: X
case Y("hi") => ;
^
Por qué se comporta así? Sospecho que no hay una buena razón para intentar hacer coincidir un tipo incompatible. Intentar hacerlo es una señal de que el desarrollador no está escribiendo lo que realmente pretende. El error del compilador ayuda a prevenir errores.
Um, el compilador le dice que parte de su código es inalcanzable. Eso es algo bueno, ¿sí? –