summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-12-31 08:52:12 +0000
committerPaul Phillips <paulp@improving.org>2010-12-31 08:52:12 +0000
commit1259651a7ded65809d63d6b2744d4d097cc90ead (patch)
treea1cecb7281c3aad8f00fdd20d85474feb77c8e36 /src/library
parent740fcf90bd7bfe4d4c322d2c7912e4df04200d90 (diff)
downloadscala-1259651a7ded65809d63d6b2744d4d097cc90ead.tar.gz
scala-1259651a7ded65809d63d6b2744d4d097cc90ead.tar.bz2
scala-1259651a7ded65809d63d6b2744d4d097cc90ead.zip
Even after the mostly blissful marriage of Trav...
Even after the mostly blissful marriage of Traversable and Iterator there was some fussin' and fightin' over who should have to care for Option. Now there is peace among the collections once again. // before scala> Iterator(Some(1), None).flatten <console>:6: error: value flatten is not a member of Iterator[Option[Int]] // after scala> Iterator(Some(1), None).flatten res0: Iterator[Int] = non-empty iterator Review by moors.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/TraversableOnce.scala18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/library/scala/collection/TraversableOnce.scala b/src/library/scala/collection/TraversableOnce.scala
index 2e76bd7e29..a046722a40 100644
--- a/src/library/scala/collection/TraversableOnce.scala
+++ b/src/library/scala/collection/TraversableOnce.scala
@@ -629,20 +629,16 @@ trait TraversableOnce[+A] {
}
object TraversableOnce {
- implicit def traversableOnceCanBuildFrom[T]: TraversableOnceCanBuildFrom[T] =
- new TraversableOnceCanBuildFrom[T]
-
- implicit def wrapTraversableOnce[A](trav: TraversableOnce[A]): TraversableOnceMonadOps[A] =
- new TraversableOnceMonadOps(trav)
-
- implicit def flattenTraversableOnce[A](travs: TraversableOnce[TraversableOnce[A]]): TraversableOnceFlattenOps[A] =
- new TraversableOnceFlattenOps[A](travs)
+ implicit def traversableOnceCanBuildFrom[T] = new OnceCanBuildFrom[T]
+ implicit def wrapTraversableOnce[A](trav: TraversableOnce[A]) = new MonadOps(trav)
+ implicit def flattenTraversableOnce[A, CC[_]](travs: TraversableOnce[CC[A]])(implicit ev: CC[A] => TraversableOnce[A]) =
+ new FlattenOps[A](travs map ev)
/** With the advent of TraversableOnce, it can be useful to have a builder which
* operates on Iterators so they can be treated uniformly along with the collections.
* See scala.util.Random.shuffle for an example.
*/
- class TraversableOnceCanBuildFrom[A] extends generic.CanBuildFrom[TraversableOnce[A], A, TraversableOnce[A]] {
+ class OnceCanBuildFrom[A] extends generic.CanBuildFrom[TraversableOnce[A], A, TraversableOnce[A]] {
def newIterator = new ArrayBuffer[A] mapResult (_.iterator)
/** Creates a new builder on request of a collection.
@@ -657,11 +653,11 @@ object TraversableOnce {
def apply() = newIterator
}
- class TraversableOnceFlattenOps[A](travs: TraversableOnce[TraversableOnce[A]]) {
+ class FlattenOps[A](travs: TraversableOnce[TraversableOnce[A]]) {
def flatten: Iterator[A] = travs.foldLeft(Iterator.empty: Iterator[A])(_ ++ _)
}
- class TraversableOnceMonadOps[+A](trav: TraversableOnce[A]) {
+ class MonadOps[+A](trav: TraversableOnce[A]) {
def map[B](f: A => B): TraversableOnce[B] = trav.toIterator map f
def flatMap[B](f: A => TraversableOnce[B]): TraversableOnce[B] = trav.toIterator flatMap f
def withFilter(p: A => Boolean) = trav.toIterator filter p