Either[String, X]
を返す関数をまとめておく必要があります。また、純粋な関数とキャッシュを使っていくつかの呼び出しの結果を変換する必要がありますそれらの結果は一時変数になります。Scala ::理解のために、フリー変数を使って
(非常に人工的な)次のコードは、
1: def someFunc(x: Int): Either[String, Int] = Right(x)
2:
3: def someMath(i: Int): Int = i
4:
5: val z = for {
6: x <- Right("aaaa").right
7: y <- Right((1, x)).right
8: tmp = someMath(y._1)
9: t <- Right(tmp).right
A: l <- someFunc(tmp).right
B: } yield l
C:
D: z
Error:(7, 6) value flatMap is not a member of Product with Serializable with scala.util.Either[Nothing,((Int, String), Int)] y <- Right((1, x)).right ^
をコンパイルしませんどのように私はfor {...}
式では(ないいずれかの)任意の型の変数を定義していますか?スカラ2.12で
私はこのエラーを 'scala-2.11.8'で再現しました。しかし 'scala-2.12.1'ではうまく動作します。 –