diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2010-09-16 23:47:59 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2010-09-16 23:47:59 +0000 |
commit | ec93f67c5c9d5b2c8ab5b08255686ddca171eb1d (patch) | |
tree | 8cdea1d543e189d68966a8eb878239566efa57db /test/files/pos/depmet_implicit_norm_ret.scala | |
parent | 7b4176c5be11085d0fdf2f1b0624e1829a1638ea (diff) | |
download | scala-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.scala | 29 |
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 |