diff options
-rw-r--r-- | test/pending/neg/tcpoly_typealias_eta.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/pending/neg/tcpoly_typealias_eta.scala b/test/pending/neg/tcpoly_typealias_eta.scala new file mode 100644 index 0000000000..767dfe311c --- /dev/null +++ b/test/pending/neg/tcpoly_typealias_eta.scala @@ -0,0 +1,46 @@ +trait A { + type m[+x] +} + +trait A2 { + type m[+x <: String] +} + +trait A3 { + type m[x] +} + +trait FooCov[+x] +trait FooCon[-x] +trait FooBound[+x <: String] + +trait BOk1 extends A { + type m/*[+x]*/ = FooCov/*[x]*/ +} + +trait BOk2 extends A2 { + type m/*[+x <: String]*/ = FooBound/*[x]*/ +} + +trait BOk3 extends A2 { + type m/*[+x]*/ = FooCov/*[x]*/ // weaker bound +} + +trait BOk4 extends A3 { + type m/*[+x]*/ = FooCov/*[x]*/ // weaker variance +} + +// there are two aspects to check: + // does type alias signature (not considering RHS) correspond to abstract type member in super class + // does RHS correspond to the type alias sig +trait BInv extends A{ + type m/*[x]*/ = FooCov/*[x]*/ // error: invariant x in alias def +} + +trait BCon extends A{ + type m/*[-x]*/ = FooCon/*[x]*/ // error: contravariant x +} + +trait BBound extends A{ + type m/*[+x <: String]*/ = FooBound/*[x]*/ // error: x with stricter bound +}
\ No newline at end of file |