Domanda

Come posso specificare i limiti di un parametro di tipo di ordine superiore non applicato, in modo tale che i seguenti compilassero:

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]]

Senza aggiungere più parametri di tipo a Declr. Si noti che è consentito presumere che il limite di ImplIl parametro è sempre S <: Sys[S] (cioè questo è il limite per qualsiasi tipo che può entrare Declr).

Penso di poter scrivere il vincolo con un tipo membro come questo:

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

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

Ma come farlo come tipo parametro (come la rifornimento di type Impl è molto rumoroso e voglio averlo object X Il più pulito possibile)?

È stato utile?

Soluzione

Perché no

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

object X extends Declr[ X ]  
trait X[ S <: Sys[ S ]]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top