summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorJosh Suereth <Joshua.Suereth@gmail.com>2012-05-17 10:07:57 -0700
committerJosh Suereth <Joshua.Suereth@gmail.com>2012-05-17 10:07:57 -0700
commit25d1f6d0cb720129b5ac647542cfca3d18304ae2 (patch)
tree62e791ea71fe751a9216a26229b9268f7cc0cefa /test/files
parent8ce86909bf7d7b7ff5c1f65b35288c90c1f8548a (diff)
parent73f7001d963a80950751b4e13b95b05d2526edc8 (diff)
downloadscala-25d1f6d0cb720129b5ac647542cfca3d18304ae2.tar.gz
scala-25d1f6d0cb720129b5ac647542cfca3d18304ae2.tar.bz2
scala-25d1f6d0cb720129b5ac647542cfca3d18304ae2.zip
Merge pull request #563 from milessabin/feature/enrich-gentraversables
Added infrastructure to enable easy enrichment of GenTraversables.
Diffstat (limited to 'test/files')
-rw-r--r--test/files/run/enrich-gentraversable.check4
-rw-r--r--test/files/run/enrich-gentraversable.scala30
2 files changed, 34 insertions, 0 deletions
diff --git a/test/files/run/enrich-gentraversable.check b/test/files/run/enrich-gentraversable.check
new file mode 100644
index 0000000000..348b38d6a4
--- /dev/null
+++ b/test/files/run/enrich-gentraversable.check
@@ -0,0 +1,4 @@
+List(2, 4)
+Array(2, 4)
+HW
+Vector(72, 108, 108, 32, 114, 108, 100)
diff --git a/test/files/run/enrich-gentraversable.scala b/test/files/run/enrich-gentraversable.scala
new file mode 100644
index 0000000000..c9320ff985
--- /dev/null
+++ b/test/files/run/enrich-gentraversable.scala
@@ -0,0 +1,30 @@
+object Test extends App {
+ import scala.collection.generic.{ CanBuildFrom, FromRepr, HasElem }
+
+ def typed[T](t : => T) {}
+
+ class FilterMapImpl[A, Repr](val r : Repr)(implicit hasElem : HasElem[Repr, A]) {
+ def filterMap[B, That](f : A => Option[B])(implicit cbf : CanBuildFrom[Repr, B, That]) : That = r.flatMap(f(_).toSeq)
+ }
+
+ implicit def filterMap[Repr : FromRepr](r : Repr) = new FilterMapImpl(r)
+
+ val l = List(1, 2, 3, 4, 5)
+ val fml = l.filterMap(i => if(i % 2 == 0) Some(i) else None)
+ typed[List[Int]](fml)
+ println(fml)
+
+ val a = Array(1, 2, 3, 4, 5)
+ val fma = a.filterMap(i => if(i % 2 == 0) Some(i) else None)
+ typed[Array[Int]](fma)
+ println(fma.deep)
+
+ val s = "Hello World"
+ val fms1 = s.filterMap(c => if(c >= 'A' && c <= 'Z') Some(c) else None)
+ typed[String](fms1)
+ println(fms1)
+
+ val fms2 = s.filterMap(c =>if(c % 2 == 0) Some(c.toInt) else None)
+ typed[IndexedSeq[Int]](fms2)
+ println(fms2)
+}