Verwenden von formlosen Tags mit LabelledGenerics

8

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:

%Vor%

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?

    
Odomontois 27.08.2015, 13:33
quelle

1 Antwort

0

Ihr Problem betrifft nicht shapeless . Es kann tatsächlich vereinfacht werden als:

%Vor%

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:

%Vor%     
Federico Pellegatta 04.04.2017 07:31
quelle