From 1259651a7ded65809d63d6b2744d4d097cc90ead Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Fri, 31 Dec 2010 08:52:12 +0000 Subject: 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 :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. --- src/library/scala/collection/TraversableOnce.scala | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/library') 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 -- cgit v1.2.3