summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2010-06-06 07:57:42 +0000
committerMartin Odersky <odersky@gmail.com>2010-06-06 07:57:42 +0000
commit92ba00c0705c147bee8453b0ca53f1e82c405882 (patch)
tree66257cf01ad4822e73c958c7200d9d54a883441d /src/library
parentfd0c5bec31eec3a3b353668b20c4d9b06fb69ff4 (diff)
downloadscala-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.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/TraversableLike.scala8
-rw-r--r--src/library/scala/collection/TraversableViewLike.scala1
-rwxr-xr-xsrc/library/scala/collection/generic/FilterMonadic.scala11
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]
+}