Question

Comment puis-je spécifier les limites d'un paramètre de type d'ordre supérieur non appliqué, de sorte que le suivant compile:

trait Declr[Impl[_]]   // need to specify constraints for Impl's type parameter

trait Sys[S <: Sys[S]]

object X extends Declr[X]  // doesn't compile, because S is more strict
trait X[S <: Sys[S]]

Sans ajouter plus de paramètres de type à Declr. Notez qu'une solution est autorisée à supposer que la limite de ImplLe paramètre est toujours S <: Sys[S] (c'est-à-dire que c'est à l'origine de tout type qui peut entrer dans Declr).

Je pense que je peux écrire la contrainte avec un type membre comme ça:

trait Declr {
  type Impl[S <: Sys[S]]
}

object X extends Declr {
  type Impl[S <: Sys[S]] = X[S]
}
trait X[S <: Sys[S]]

Mais comment faire cela en tant que type paramètre (comme le retraitement de type Impl est très bruyant, et je veux avoir object X aussi propre que possible)?

Était-ce utile?

La solution

Pourquoi pas

trait Declr[Impl[S <: Sys[S]]]
trait Sys[ S <: Sys[ S ]]

object X extends Declr[ X ]  
trait X[ S <: Sys[ S ]]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top