Ich war gestern mit einigen Kollegen Shapeless erkunden, und wir beschlossen, eine Spielzeug-Methode zu einem ersten Parameter einer Fall-Klasse hinzufügen, wenn dieser Parameter ein Int
:Mehr Beweis benötigt als notwendig für Methode mit Shapeless
def addOneToCaseClass[C, H <: HList, E, T <: HList]
(c: C)
(implicit gen: Generic.Aux[C, H],
h: IsHCons.Aux[H, E, T],
ev: E =:= Int,
ev2: (Int :: T) =:= H
): C = {
val hList = gen.to(c)
val elem = hList.head
val tail = hList.tail
val newElem = elem + 1
gen.from(newElem :: tail)
}
es scheint mir, dass die ev2
Parameter redundant ist - es kann sicher, dass E :: T =:= Int :: T
gefolgert werden, aber der Compiler war nicht in der Lage, um dies zuzulassen.
Gibt es einen bestimmten Grund warum?
Dies beantwortet in keiner Weise Ihre Frage, aber funktioniert es, wenn Sie E vollständig loswerden? '[C, H, T]', 'IsHCons.Aux [H, Int, T]' usw.? Wenn E noch vorhanden ist, sollten alle zwei von 'h',' ev' und 'ev2' funktionieren - funktioniert eine dieser Kombinationen? – ellisbben