blob: ef16a77922ab5ad2e0c84e75d0bff43421e721e1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class TypeConstructor {
type TypeArg
}
trait List[+T] extends TypeConstructor { type TypeArg <: T }
trait Set[T] extends TypeConstructor { type TypeArg <: T }
object obj extends List[Number] with Set[Exception] {
val x: TypeArg = ???
val n: Number = x
val e: Exception = x
}
abstract class Functor[F <: TypeConstructor] {
def map[A, B](f: F { type TypeArg <: A }): F { type TypeArg <: B }
}
implicit object ListFunctor extends Functor[List] {
override def map[A, B](f: List { type TypeArg <: A }): List { type TypeArg <: B } = ???
}
|