Почему Scala выбирает вид типа «продукта» для «для» выражений, связанных с либо определениями значений

Если я создаю значение для понимания с определением значения с вариантом, он работает как ожидалось:

scala> for (a <- Some(4); b <- Some(5); val p = a * b) yield p
res0: Option[Int] = Some(20)

делает то же самое с любыми работами, если у меня нет Определение значения:

scala> for (a <- Right(4).right; b <- Right(5).right) yield a * b
res1: Either[Nothing,Int] = Right(20)

, но если я использовал определение значения, SCALA, кажется, выводит неверный тип контейнера для понимания:

scala> for (a <- Right(4).right; b <- Right(5).right; val p = a * b) yield p
<console>:8: error: value map is not a member of Product with Serializable with Either[Nothing,(Int, Int)]
for (a <- Right(4).right; b <- Right(5).right; val p = a * b) yield p
                            ^

Почему это делает это? Каким образом доступны это поведение?

14
задан srparish 2 September 2011 в 22:06
поделиться