Mit Blick auf die Quellen für Shapeless-Bibliothek, ich habe Aufmerksamkeit auf verschiedene höher-kinged Typ Member-Deklaration und fragen, ob es einige konkrete Unterschiede in der Verwendung hat. Zum Beispiel generischen Merkmal here:Unterschied zwischen Member-Deklaration höher-kinged Typ
trait Generic1[F[_], FR[_[_]]] {
type R[t]
// ...
}
trait IsHCons1[L[_], FH[_[_]], FT[_[_]]] {
type H[_]
// ...
}
Ein Typ Element ist mit einer gemeinsamen Syntax für Typkonstruktoren erklärt (das heißt H[_]
) und Generic1
Eigenschaft hat R[t]
.
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] }
// ...
}
So frage ich mich, wenn R[t]
und H[_]
einen Unterschied haben oder nicht: Obwohl Hilfs Typ-Aliasnamen in ähnlicher Weise definiert werden?
Yup ... es gibt keinen zwingenden Grund, es zu ändern, aber wenn ich das nächste Mal Dinge in diesem Bereich berühre, werde ich höchstwahrscheinlich die abstrakte Definition von 'R' zu' Typ R [_] 'ändern. PRs sind auch willkommen :-) –