Ich habe heute Jason Hickey's Online Buch "Introduction to Objective Caml" gelesen und im Kapitel über Funktoren (Seite 140) bin ich auf die folgende Zeile in der Definition des Set Funktors gestoßen:
%Vor% Das Ausführen des Codes führte zu einer nicht sehr aufschlussreichen Fehlermeldung "Syntaxfehler". Nach dem plugin in der Zeile in ocaml toplevel habe ich herausgefunden, dass ::
tatsächlich kein Operator, sondern ein Typkonstruktor ist.
Aber von dem, was ich von Haskell weiß, kann der äquivalente :
-Konstruktor auch als Operator (Funktion) behandelt werden.
Meine Frage ist: Haben OCaml-Konstrukteure niemals erstklassige Werte (was impliziert, dass der Code aus dem Buch von Anfang an falsch war) und warum ist das der Fall?
In Caml Light, dem Vorgänger von OCaml, kam es vor, dass Konstruktoren bei teilweiser Anwendung zu Funktionen befördert wurden. Ich bin mir nicht ganz sicher, warum diese Funktion entfernt wurde, als ich zu OCaml wechselte, und ich beklage das auch, aber die Erklärung, die ich hörte, war "niemand hat das benutzt". Also kein List.map Some foo
mehr ...
::
ist etwas Besonderes als algebraischer Datentypkonstruktor, da es der einzige Infixkonstruktor ist (fest codiert im Parser), aber ansonsten wie jeder andere Datentypkonstruktor verhält.
Tags und Links constructor list ocaml