File: lub-dealias-widen.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 (34 lines) | stat: -rw-r--r-- 959 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
import scala.language.higherKinds

sealed trait Path {
  type EncodeFunc
  type Route[R] = List[String] => R

  def >>(f: Route[Int]): Sitelet[EncodeFunc] = ???
}

case object PAny extends Path {
  type EncodeFunc = List[String] => String
}

case class PLit[Next <: Path]() extends Path {
  type EncodeFunc = Next#EncodeFunc
}

trait Sitelet[EncodeFunc] { self =>
  def &[G <: H, H >: EncodeFunc](that: Sitelet[G]): Sitelet[H] = ???
}

object Test {
  val r: Sitelet[Int => (Int => String)] = ???

  val p2: PLit[PAny.type] = ???
  val r2 /*: Sitelet[List[String] => String] */ // annotate type and it compiles with 2.10.0
     = p2 >> { (xs: List[String]) => 0 }

  // This works after https://github.com/scala/scala/commit/a06d31f6a
  // Before: error: inferred type arguments [List[String] => String,List[String] => String]
  //         do not conform to method &'s type parameter bounds
  //         [G <: H,H >: Int => (Int => String)]
  val s = r & r2
}