Guardando alle fonti per la libreria informe, ho prestato attenzione a diverse dichiarazioni dei membri di tipo superiore e chiedendomi se ha qualche differenza concreta nell'utilizzo. Per esempio tratto generico here:Differenza tra i membri di tipo superiore della dichiarazione dei membri
trait Generic1[F[_], FR[_[_]]] {
type R[t]
// ...
}
trait IsHCons1[L[_], FH[_[_]], FT[_[_]]] {
type H[_]
// ...
}
Un membro del tipo è dichiarato con una sintassi comune per costruttori di tipo (cioè H[_]
) e Generic1
tratto ha R[t]
. Anche se gli alias di tipo ausiliari sono definiti in modo simile:
object Generic1 {
type Aux[F[_], FR[_[_]], R0[_]] = Generic1[F, FR] { type R[t] = R0[t] }
// ...
}
object IsHCons1 {
type Aux[L[_], FH[_[_]], FT[_[_]], H0[_], T0[_] <: HList] = IsHCons1[L, FH, FT] { type H[t] = H0[t] ; type T[t] = T0[t] }
// ...
}
Quindi mi chiedo se R[t]
e H[_]
ha alcuna differenza o no?
Sì ... non c'è alcun motivo valido per cambiarlo, ma la prossima volta che toccherò le cose in quell'area probabilmente altererò la definizione astratta di 'R' in' tipo R [_] '. Anche le PR sono benvenute :-) –