Existentialtypen in F # ausdrücken

8

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:

%Vor%

Jetzt brauche ich eine Funktion addPacked : PackedType -> Packed -> Packed -> Packed . Ich möchte, dass es allgemein ist, das heißt:

%Vor%

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.

    
kirelagin 29.04.2013, 17:26
quelle

1 Antwort

12

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.

    
kvb 29.04.2013, 18:15
quelle

Tags und Links