Nominale Rollen und Datenfamilien

8

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.

    
Doug McClean 28.08.2014, 02:33
quelle

1 Antwort

6

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.

    
Ørjan Johansen 28.08.2014, 03:46
quelle

Tags und Links