diff options
author | Martin Odersky <odersky@gmail.com> | 2010-06-06 07:57:42 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2010-06-06 07:57:42 +0000 |
commit | 92ba00c0705c147bee8453b0ca53f1e82c405882 (patch) | |
tree | 66257cf01ad4822e73c958c7200d9d54a883441d | |
parent | fd0c5bec31eec3a3b353668b20c4d9b06fb69ff4 (diff) | |
download | scala-92ba00c0705c147bee8453b0ca53f1e82c405882.tar.gz scala-92ba00c0705c147bee8453b0ca53f1e82c405882.tar.bz2 scala-92ba00c0705c147bee8453b0ca53f1e82c405882.zip |
Applied patch -r22178 to allow filter in for ex...
Applied patch -r22178 to allow filter in for expressions over views. I
don;t know why svn merge insists on the committing the _M's in a lot of
random files.
-rw-r--r-- | src/library/scala/collection/TraversableLike.scala | 8 | ||||
-rw-r--r-- | src/library/scala/collection/TraversableViewLike.scala | 1 | ||||
-rwxr-xr-x | src/library/scala/collection/generic/FilterMonadic.scala | 11 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala index 71e9b0f0e9..04d9002eae 100644 --- a/src/library/scala/collection/TraversableLike.scala +++ b/src/library/scala/collection/TraversableLike.scala @@ -86,7 +86,9 @@ import immutable.{List, Stream, Nil, ::} * * Note: will not terminate for infinite-sized collections. */ -trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr] with TraversableOnce[A] { +trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr] + with FilterMonadic[A, Repr] + with TraversableOnce[A] { self => import Traversable.breaks._ @@ -754,12 +756,12 @@ trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr] with Traversable * All these operations apply to those elements of this $coll which * satisfy the predicate `p`. */ - def withFilter(p: A => Boolean): WithFilter = new WithFilter(p) + def withFilter(p: A => Boolean): FilterMonadic[A, Repr] = new WithFilter(p) /** A class supporting filtered operations. Instances of this class are returned by * method `withFilter`. */ - class WithFilter(p: A => Boolean) { + class WithFilter(p: A => Boolean) extends FilterMonadic[A, Repr] { /** Builds a new collection by applying a function to all elements of the * outer $coll containing this `WithFilter` instance that satisfy predicate `p`. diff --git a/src/library/scala/collection/TraversableViewLike.scala b/src/library/scala/collection/TraversableViewLike.scala index ae3f6c0e93..7b443e54b8 100644 --- a/src/library/scala/collection/TraversableViewLike.scala +++ b/src/library/scala/collection/TraversableViewLike.scala @@ -199,6 +199,7 @@ self => } override def filter(p: A => Boolean): This = newFiltered(p).asInstanceOf[This] + override def withFilter(p: A => Boolean): This = newFiltered(p).asInstanceOf[This] override def partition(p: A => Boolean): (This, This) = (filter(p), filter(!p(_))) override def init: This = newSliced(0, size - 1).asInstanceOf[This] override def drop(n: Int): This = newSliced(n max 0, Int.MaxValue).asInstanceOf[This] diff --git a/src/library/scala/collection/generic/FilterMonadic.scala b/src/library/scala/collection/generic/FilterMonadic.scala new file mode 100755 index 0000000000..abf2e0355d --- /dev/null +++ b/src/library/scala/collection/generic/FilterMonadic.scala @@ -0,0 +1,11 @@ +package scala.collection.generic + +/** A template trait that contains just the `map`, `flatMap`, `foreach` and `withFilter` methods + * of trait `TraverableLike`. + */ +trait FilterMonadic[+A, +Repr] { + def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That + def flatMap[B, That](f: A => Traversable[B])(implicit bf: CanBuildFrom[Repr, B, That]): That + def foreach[U](f: A => U): Unit + def withFilter(p: A => Boolean): FilterMonadic[A, Repr] +} |