diff options
author | Miles Sabin <miles@milessabin.com> | 2012-04-29 14:23:38 +0100 |
---|---|---|
committer | Miles Sabin <miles@milessabin.com> | 2012-05-17 16:19:41 +0100 |
commit | 73f7001d963a80950751b4e13b95b05d2526edc8 (patch) | |
tree | 4aaacf85d904087d9d9ef49e663eaafc156c0f87 /test/files | |
parent | ce896d6531122410659492c07926a0a293b94afa (diff) | |
download | scala-73f7001d963a80950751b4e13b95b05d2526edc8.tar.gz scala-73f7001d963a80950751b4e13b95b05d2526edc8.tar.bz2 scala-73f7001d963a80950751b4e13b95b05d2526edc8.zip |
Added infrastructure to enable easy enrichment of GenTraversables.
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/run/enrich-gentraversable.check | 4 | ||||
-rw-r--r-- | test/files/run/enrich-gentraversable.scala | 30 |
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) +} |