aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/tycons.scala
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 } = ???
}