Ich habe zwei Datensatztypen definiert:
%Vor% Und ich habe später einen Fehler für eine Codezeile: Error: The record field label typ belongs to the type Syntax.func but is mixed here with labels of type Syntax.name
Könnte mir jemand sagen, ob wir nicht zwei Felder mit zwei Datensätzen haben sollten, die dasselbe Label haben, wie typ
hier, was den Compiler verwirren lässt.
Nein, Sie können das nicht, weil dadurch die Inferenz des Typs unterbrochen wird.
Übrigens können Sie den Modul-Namespace verwenden, um das zu beheben:
%Vor%Und später können Sie den Feldnamen mit dem richtigen Modul voranstellen:
%Vor%Beachten Sie, dass Sie nur das erste Feld voranstellen müssen, und der Compiler wird automatisch verstehen, welchen Typ der Wert hat, den Sie schreiben.
Die Ocaml-Sprache erfordert, dass alle Felder in einem Modul unterschiedliche Namen haben. Andernfalls kann es den Typ der folgenden Funktion nicht ableiten
%Vor%, weil es vom Typ name -> dtype
oder vom Typ func -> dtype
Übrigens, ich schlage vor, dass Sie ein Suffix wie _t
für alle Ihre Typnamen haben.
Sie können type annotation in der Funktionssignatur verwenden, wenn der Compiler den Typ aus der doppelten Datensatzbezeichnung nicht ableiten konnte. Zum Beispiel
%Vor%