File: gadt-gilles.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (37 lines) | stat: -rw-r--r-- 594 bytes parent folder | download | duplicates (4)
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
object Test {
    trait A[T]
    trait B[U, V] extends A[U with V] // indirect constraint
    trait C
    trait D

  val x: A[C with D] = new B[C, D] {}
  val y: A[C with D] = x match { case b: B[u, v] => (new B[u, v] {}): A[u with v] } // OK


  def f[T, U](p: A[T with U]): A[T with U] = p match { case b: B[u, v] => new A[u with v] {} } // Not OK
}

object Test1 {

 trait T[U, V <: U]

 def f(r: Any) = r match {

   case t: T[u, v] => new T[u, v]{}

 }

}
object Test2 {

 trait T[U, V <: U]

 val x: T[Int, Int] = new T[Int, Int]{}

 x match {

   case t: T[u, v] => new T[u, v]{}

 }

}