class A {
// First three compile.
def f1(x: Either[Int, String]) = x.right map (y => y)
def f2(x: Either[Int, String]) = for (y <- x.right) yield y
def f3(x: Either[Int, (String, Int)]) = x.right map { case (y1, y2) => (y1, y2) }
// Last one fails.
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
/**
./a.scala:5: error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: Either[Nothing,(String, Int)]
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
./a.scala:5: error: not found: value y1
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
./a.scala:5: error: not found: value y2
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
three errors found
**/
}