Angenommen, ich besitze ein beliebiges KList, das aus Argumentationsgründen den Konstruktor Option [_] besitzt, dh;
%Vor%Gibt es eine Möglichkeit, eine Hlist aus den Typparametern zu erhalten?
%Vor%So könnte ich zum Beispiel eine beliebige Methode namens getOrElse definieren
%Vor%Jetzt suche ich nach etwas, das möglicherweise eine Form wie dieses hat (oder ähnlich wie die Typstruktur, die ich vorschlage, wäre nicht machbar).
%Vor% Ich bin nicht Miles, aber mit Shapeless Comapped
kannst du das, was du versuchst, ziemlich elegant erreichen:
Und dann:
%Vor%Beachten Sie, dass es in einigen Fällen bequemer ist, die Einschränkung auf die Methode anzuwenden:
%Vor% Hier ist die Verwendung die gleiche, aber Sie haben nicht den zusätzlichen Typ Parameter für die Fallklasse. Wenn Sie diesen Ansatz verwenden möchten, aber die Erstellung von MyOptionList
so einschränken, dass nicht Option
-Member nicht zulässig sind, können Sie L <: HList: *->*[Option]#λ
in der Typparameterliste verwenden.
@MilesSabin wird wahrscheinlich mit einer eleganteren Antwort auftauchen, aber Sie können dies rekursiv von Hand konstruieren, so wie viele der formlosen internen Dinge geschrieben sind:
%Vor%(Es ist wahrscheinlich möglich, einen Typ-Member anstelle eines Typparameters zu verwenden, aber ich bin verwirrt, wenn die Typinformationen für diese gegessen werden, daher tendiere ich dazu, Typparameter überall zu verwenden)