Übergeben Sie einen Typparameter, der als Argument LabelledGeneric verwendet werden soll

8

Ich versuche, eine Methode zu parametrisieren, die an einem generischen Typ A arbeiten muss, für den ein LabelledGeneric abgerufen werden kann. Hier ist der naive Ansatz

%Vor%

Natürlich klagt das zugrunde liegende Makro. Es weiß nicht genug über A :

  

Typ A ist keine Klasse oder Eigenschaft

Also habe ich versucht, das LabelledGeneric abgeleitet zu haben

%Vor%

Das scheint zu funktionieren, aber der Repr -Typ ist nicht mehr als HList bekannt

  

type arguments [lbl.Repr] entsprechen nicht den type-Parametergrenzen der Methode apply [L & lt; shapeless.HList]

Ok, versuchen wir genauer zu sein

%Vor%

Nun ist Repr definitiv ein HList , aber trotzdem kann Keys seine implicits nicht auflösen

  

konnte keinen impliziten Wert für Parameterwerte finden: shapeless.ops.record.Values ​​[lbl.Repr]

Letzter Versuch, versuchen wir, alles, was ich brauche, implizit zu berechnen

%Vor%

Immer noch kein Glück, anscheinend das erste implizite kann nicht auf der Aufrufseite

gelöst werden
  

konnte keinen impliziten Wert für den Parameter lbl finden: shapeless.LabledGeneric.Aux [example.Main.Foo.type, Repr]

     

[Fehler] Parameter (Foo)

Natürlich funktioniert diese ganze Maschine, wenn sie direkt mit dem spezifischen Typ, z.B.

, arbeitet %Vor%

Ich vermisse eindeutig die erforderlichen Verfeinerungen an meinem Typ in der Methodensignatur, aber ich kann mir vorstellen, was hier vor sich geht. Irgendeine Idee?

    
Gabriele Petronella 13.12.2014, 00:44
quelle

1 Antwort

4

Die letzte Variante, bei der alles implizit berechnet wird, funktioniert für mich,

%Vor%

(Ergebnistypen werden zur besseren Lesbarkeit angezeigt).

    
Miles Sabin 13.12.2014, 10:38
quelle