は、私はこのモナドのクラスがあるとします。新スカラ座2.10.1で振る舞いを脱糖
case class Foo[A](xs: List[A]) {
def map[B](f: A => B) = Foo(xs map f)
def flatMap[B](f: A => Foo[B]) = Foo(xs flatMap f.andThen(_.xs))
def withFilter(p: A => Boolean) = {
println("Filtering!")
Foo(xs filter p)
}
}
次は2.10.0 REPLセッションから次のとおりです。
scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
res0: Foo[Int] = Foo(List(1))
そして、ここでは2.10で同じことです0.1:これは(私には)全く予想外で、どこフィルタリングのrequ場合に特に混乱エラーをリードし
scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
Filtering!
res0: Foo[Int] = Foo(List(1))
追加の制約があります(Scalazの\/
or EitherT
など)。
2.10.1 release notesではこの変更に関する議論が見つかりませんでした。誰かがこの新しいdesugaring行動が導入された理由と理由を指摘できますか?