Soweit ich das beurteilen kann, hat F # keine Unterstützung für existentielle Typen. Also, ich suche nach einer anderen Möglichkeit, meine Idee auszudrücken.
Ich habe eine Datenstruktur und ihre Inhalte können auf verschiedene Arten interpretiert werden. In diesem speziellen Beispiel nehme ich an, dass es als int oder real betrachtet werden kann:
%Vor% wo real
etwas Bedeutungsvolles ist, sagen wir:
Jetzt brauche ich eine Funktion addPacked : PackedType -> Packed -> Packed -> Packed
. Ich möchte, dass es allgemein ist, das heißt:
Hier endete ich mit NumberOp
existential. Also frage ich, ob es eine andere Möglichkeit gibt, dies auszudrücken. Ich kann Packed
, [un]pack*
functions und addPacked
nicht ändern.
Ich habe diese Antwort gefunden. Es besagt, dass es ein "bekanntes Muster" gibt, aber der Text ist schwer zu lesen und ich konnte es nicht funktionieren lassen.
Im Allgemeinen können Sie den Typ
codieren %Vor%als
%Vor%Leider erfordert jede universelle Quantifizierung die Erstellung eines neuen Typs in F #, so dass eine originalgetreue Codierung neben F zwei weitere Typen erfordert. So können wir dies für Ihr Beispiel tun:
%Vor% Leider gibt es hier eine Menge Beispiele. Außerdem habe ich die nicht hilfreichen Namen Apply
für die abstrakten Mitglieder jedes Helfertyps verwendet - Sie können etwas Bedeutungsvolleres verwenden, wenn Sie Namen finden, die Sie bevorzugen. Ich habe versucht, Ihrem Stil ziemlich nahe zu kommen, aber in meinem eigenen Code würde ich wahrscheinlich vermeiden, den Datensatz in addPacked
zu destrukturieren, stattdessen die Feldaccessoren direkt zu verwenden.