Если вы можете изменить Toto
на ковариантность, может сработать следующее:
import language.higherKinds
class Toto[+F[_]]()
class Foo[X]
class Bar[X]
val toto: Toto[F] forSome { type F[X] } = new Toto[Foo]
val totos = Seq[Toto[F] forSome { type F[X] }](new Toto[Foo], new Toto[Bar])
Похоже на этот .
Если это произойдет большечасто в вашем коде вы также можете подумать о том, чтобы просто убрать F
со своего пути, преобразовав его в член типа Toto
:
import language.higherKinds
class Toto {
type F[X]
}
object Toto {
def empty[A[X]]: Toto = new Toto {
type F[X] = A[X]
}
}
class Foo[X]
class Bar[X]
val totos: Seq[Toto] = Seq(Toto.empty[Foo], Toto.empty[Bar])