Ich las heute Jason Hickey's Online-Buch "Einführung in Objective Caml" und im Kapitel über Funktoren (Seite 140) lief ich in der folgenden Zeile innerhalb der Set Funktoren Definition:In OCaml, warum ist der Listenkonstruktor :: kein Operator
let add = (::)
Das Ausführen des Codes führte zu einer nicht sehr aufschlussreichen 'Syntaxfehler'-Fehlermeldung. Nach dem Plugin in der Zeile in ocaml Toplevel habe ich herausgefunden, dass ::
eigentlich kein Operator, sondern ein Typkonstruktor ist.
Allerdings, von dem, was ich weiß, von Haskell der Äquivalent :
Konstruktor kann auch als Operator (Funktion) behandelt werden.
Prelude> :t (:)
(:) :: a -> [a] -> [a]
Meine Frage ist: hat OCaml Bauer nie erste Klasse Werte gewesen (was bedeutet, dass der Code aus dem Buch von Anfang an falsch war), und warum ist dies der Fall?
Normalerweise verwende ich '(Spaß x y -> x :: y)', um dieses Problem zu lösen (wandelt den Operator in ein Lambda um). Es ist ein bisschen nervig, aber funktioniert. Auch wenn '::' eine Funktion wäre, müssten Sie immer noch dasselbe tun, wenn Sie die Argumente für '' '' swapped brauchen, also denke ich, dass es in dieser Hinsicht einen Sinn ergibt. –