मान लीजिए मैं इस monadic वर्ग है:न्यू desugaring व्यवहार 2.10.1
scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
res0: Foo[Int] = Foo(List(1))
यहाँ और 2.10 में एक ही बात है:
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 आरईपीएल सत्र से है .1:
scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
Filtering!
res0: Foo[Int] = Foo(List(1))
यह पूरी तरह से अप्रत्याशित (मेरे लिए) है, और जहां छानने requ मामलों में विशेष रूप से भ्रामक त्रुटियों की ओर जाता है ires अतिरिक्त बाधाओं (जैसे स्कालज़ के \/
or EitherT
)।
मुझे 2.10.1 release notes में इस परिवर्तन की कोई चर्चा नहीं मिली। क्या कोई यह बता सकता है कि यह नया desugaring व्यवहार कहाँ और क्यों पेश किया गया था?