aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/tycons.scala
blob: 1ed4d2855247e5d4d1d70d208ab1e6113cc3f264 (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 }
}

object ListFunctor extends Functor[List] {
  override def map[A, B](f: List { type TypeArg <: A }): List { type TypeArg <: B } = ???
}