summaryrefslogtreecommitdiff
path: root/test/files/pos/depmet_implicit_norm_ret.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2010-09-16 23:47:59 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2010-09-16 23:47:59 +0000
commitec93f67c5c9d5b2c8ab5b08255686ddca171eb1d (patch)
tree8cdea1d543e189d68966a8eb878239566efa57db /test/files/pos/depmet_implicit_norm_ret.scala
parent7b4176c5be11085d0fdf2f1b0624e1829a1638ea (diff)
downloadscala-ec93f67c5c9d5b2c8ab5b08255686ddca171eb1d.tar.gz
scala-ec93f67c5c9d5b2c8ab5b08255686ddca171eb1d.tar.bz2
scala-ec93f67c5c9d5b2c8ab5b08255686ddca171eb1d.zip
svnmerge seems to have missed the new test file...
svnmerge seems to have missed the new test files... they were in my working copy, but not added
Diffstat (limited to 'test/files/pos/depmet_implicit_norm_ret.scala')
-rw-r--r--test/files/pos/depmet_implicit_norm_ret.scala29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/files/pos/depmet_implicit_norm_ret.scala b/test/files/pos/depmet_implicit_norm_ret.scala
new file mode 100644
index 0000000000..4cdb2931c6
--- /dev/null
+++ b/test/files/pos/depmet_implicit_norm_ret.scala
@@ -0,0 +1,29 @@
+object Test{
+ def ?[S <: AnyRef](implicit w : S) : w.type = w
+
+ // fallback, lower priority (overloading rules apply: pick alternative in subclass lowest in subtyping lattice)
+ class ZipWithDefault {
+ implicit def ZeroZipWith[S] = new ZipWith[S] {
+ type T = Stream[S]
+ }
+ }
+
+ object ZipWith extends ZipWithDefault {
+ // def apply[S: ZipWith](s : S) = ?[ZipWith[S]].zipWith(s) // TODO: bug return type should be inferred
+ def apply[S](s : S)(implicit zw: ZipWith[S]): zw.T = zw.zipWith(s)
+
+ implicit def SuccZipWith[S,R](implicit zWith : ZipWith[R]) = new ZipWith[S => R] {
+ type T = Stream[S] => zWith.T // dependent types replace the associated types functionality
+ }
+ }
+
+ trait ZipWith[S] {
+ type T
+ def zipWith : S => T = error("")
+ }
+
+ // bug: inferred return type = (Stream[A]) => java.lang.Object with Test.ZipWith[B]{type T = Stream[B]}#T
+ // this seems incompatible with vvvvvvvvvvvvvvvvvvvvvv -- #3731
+ def map[A,B](f : A => B) /* : Stream[A] => Stream[B]*/ = ZipWith(f)
+ val tst: Stream[Int] = map{x: String => x.length}(Stream("a"))
+} \ No newline at end of file