1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
trait Trait[-A, +B, C] {
def ok() = { // ok
object O {
private def f0(x: A): A = ???
def f1(x: A): B = ???
def f2(x: A): C = ???
private def f3(x: B): A = ???
private def f4(x: B): B = ???
private def f5(x: B): C = ???
private def f6(x: C): A = ???
def f7(x: C): B = ???
def f8(x: C): C = ???
}
O
}
def fail1() = { object O { def f0(x: A): A = ??? } ; O } // fail
def fail2() = { object O { def f0(x: B): A = ??? } ; O } // fail
def fail3() = { object O { def f0(x: B): B = ??? } ; O } // fail
def fail4() = { object O { def f0(x: B): C = ??? } ; O } // fail
def fail5() = { object O { def f0(x: C): A = ??? } ; O } // fail
def fail6() = { // fail
trait O0 {
def f0(x: A): A = ???
def f1(x: A): B = ???
def f2(x: A): C = ???
}
object O1 extends O0
O1
}
def fail7() = { // fail
trait O0 {
def f0(x: A): A = ???
def f1(x: A): B = ???
def f2(x: A): C = ???
}
new O0 { }
}
}
|