Angenommen, ich würde die generische Darstellung der Fallklasse wie beschrieben durchlaufen hier
Ich habe eine Typklasse definiert, um Felder zu beschreiben:
%Vor%Definierte eine Instanz:
%Vor%Und allgemeiner Benutzer:
%Vor%So, jetzt könnte ich schreiben
%Vor%und hole
res1: String = Punkt {x: 1.000, y: 2.000, z: 3.000}
Nun möchte ich einige Feldmetadaten mit shapeless
tags definieren:
So erzeugt Described(invisible(0.5))
jetzt erfolgreich
res2: String = 0,500 [unsichtbar]
Aber mit neu definiert
%Vor%ergibt einen Kompilierungsfehler:
Fehler: divergierende implizite Erweiterung für Typ %Code% beginnend mit der Methode
LeftFolder.Aux[this.Out,Seq[String],DescrFolder.type,Seq[String]]
in der Klasse ...
Ich nehme an, dass der Typ invisibleDescribed
sich nicht als X with Tag[Y] with KeyTag[K,X]
identifiziert, aber nicht erraten konnte, wie er behoben werden kann.
Wie könnte man für eine solche Situation richtiges FieldType[S, X]
definieren?
Ihr Problem betrifft nicht shapeless
. Es kann tatsächlich vereinfacht werden als:
Double @@ Invisible
kann als Double with Invisible
"dargestellt" werden. Beachten Sie, dass Double with Invisible <: Double
.
Wenn der Compiler versucht, eine implizite Described[Double with Invisible]
zu erhalten, beschwert er sich über divergierende implizite Erweiterung: doubleDescribed
und invisibleDescribed
.
Zurück zu Ihrem ursprünglichen Code, könnte eine einfache Lösung sein, einfach invisibleDescribed
wie neu zu schreiben:
Tags und Links scala shapeless hlist labelled-generic