Digitare i limiti per parametri di tipo non applicato
-
28-10-2019 - |
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 Impl
Il 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)?
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