Pregunta

¿Cómo puedo especificar los límites de un parámetro de tipo de orden superior no aplicado, de modo que el siguiente 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]]

Sin agregar más parámetros de tipo a Declr. Tenga en cuenta que una solución puede asumir que el límite de ImplEl parámetro es siempre S <: Sys[S] (es decir, ese es el límite de cualquier tipo que pueda entrar Declr).

Creo que puedo escribir la restricción con un tipo miembro como esto:

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

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

Pero cómo hacer esto como un tipo parámetro (como la reexpresión de type Impl es muy ruidoso y quiero tener object X lo más limpio posible)?

¿Fue útil?

Solución

Por que no

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

object X extends Declr[ X ]  
trait X[ S <: Sys[ S ]]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top