blob: d09a3abf8e4df67d8a461635759e7a2fe08c627b (
plain) (
blame)
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
}
|