1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class M[+A, +B]
object Test {
implicit class EitherOps[A, B](self: Either[A, B]) {
def disjunction: M[A, B] = null
}
def foo = {
val l: Either[Int, Nothing] = Left[Int, Nothing](1)
var ok = EitherOps(l).disjunction
val runawayTypeVar = l.disjunction
// reported bug:
// found : M[Int,B]; required: M[Int,Nothing]
val assign: M[Int, Nothing] = runawayTypeVar
// variations on the theme, all failed before similarly.
val assign1: M[Int, Nothing] = {val temp = runawayTypeVar; temp}
val assign2: M[Int, String] = runawayTypeVar
val assign3: M[Int, Nothing] = {val temp = Left(1).disjunction; temp}
}
}
|