Ich verstehe, warum die neuen Rollensysteme und Annotationen Typ (und Daten) Familienparameter in der Rolle nominal
.
Also habe ich erwartet, als ich
erklärt habe %Vor% Das ty
und a
würden nominal
Rollen erhalten. (Mein aktuelles Beispiel ist eine zugehörige Datenfamilie, aber da ich nicht denke, dass es irgendetwas ändert, unterlasse ich das zusätzliche Geräusch, das damit einhergeht.)
Was ich nicht erwartet habe ist, dass ich es in
geändert habe %Vor% bedeutet, dass das unbenannte Argument des zweiten Typs immer noch eine nominal
role erhält.
Warum ist das? Konnte es nicht sicher eine Rolle representational
erhalten, weil data instance CoordinateRepresentation ... = ...
keinen neuen Konstruktor erstellen muss? Wie könnte dieser Konstruktor die Möglichkeit haben, seinen Parameter in einer nominal
-Rolle auf eine Weise zu verwenden, die der Compiler nicht sehen kann? Obwohl es ein offenes System ist und es eine separate Kompilierung gibt, verstehe ich es immer noch nicht.
Als ein erster, untergeordneter Punkt: Ob eine Datenfamilie mit Typvariablen oder mit einer Art-Signatur deklariert wird, ist zur Zeit völlig gleichgültig, sie sind nur unterschiedliche Syntaxen für dieselbe Sache. Aus dem GHC-Benutzerhandbuch zu Datenfamilienerklärungen:
Genau wie bei GADT-Deklarationen sind die genannten Argumente völlig optional, [. ..]
Der Hauptpunkt bleibt bestehen und wurde in diesem GHC-Trac-Thread besprochen. Kurzzusammenfassung: Es ist möglich, Rollenreferenzen und / oder Rollenanmerkungen für Daten- / Typfamilien hinzuzufügen, aber es ist noch nicht implementiert.
Tags und Links haskell ghc type-families