Если я создаю для понимания с определением значения с помощью опции, он работает как ожидалось:
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
^
Почему он это делает? Какими способами можно управлять этим поведением?