Vor kurzem wurde ich den Code gegebenOCaml - Was ist ein ungesunder Typ?
List.fold_left (fun acc x -> raise x ; acc) 3
Ich bin völlig in Ordnung mit dieser Teil Anwendung einen funktionalen Wert von> Typ EXN Liste mit -> int, und der Tatsache, dass es eine Warnung liefert, ist nicht überraschend, . Ich bin> aber nicht sicher, was die Hälfte der Warnung bedeutet:
Warning 21: this statement never returns (or has an unsound type.)
Ich kann nicht wirklich auf diese Warnung jeden Hinweis finden, wo es nicht das Ergebnis einer nicht-wiederkehrende Aussage. Selbst die man-Seite für ocamlc erwähnt nur nicht zurückkehrende Anweisungen für diese Warnung und warnings.ml verweist darauf lediglich als Nonreturning-Anweisung.
Ich bin mit dem Konzept der Solidität vertraut, da es sich auf Typsysteme bezieht, aber die Vorstellung, dass ein Typ an sich inhärent ist, erscheint mir seltsam.
Also meine Fragen sind:
Was genau eine unsolide Typ ist? In welcher Situation würde es zu einem unsauberen Typ kommen, wenn OCaml nur eine Warnung ausgibt und nicht sofort ausfällt?
Jemand hat diese Frage gepostet, und während ich eine Antwort schrieb, wurde sie gelöscht. Ich glaube, die Frage ist sehr interessant und lohnt sich für das Umschreiben. Bitte beachten Sie haben jemanden, der bereit ist, Ihnen zu helfen :-(
Ich glaube, die Frage wurde entfernt, weil es ein Duplikat von http://stackoverflow.com/questions/31278561/avoid-the-warning-warning-21-this-statement-never-returns-orhas-an war -unsound-t, wobei die Warnung durch die Verwendung einer externen (js_of_ocaml) -Funktion mit unbeschränkter Ergebnisart verursacht wurde - wie in Ihrer Antwort unten. Ich vermute, dass der Fragesteller derjenige ist, der mir eine Antwort auf die angenommene Antwort gegeben hat. Zugegeben, der Fokus dort ist ein bisschen anders. – antron
Ich war die Person, die gefragt/gelöscht hat; Ich habe das gerade erst entdeckt (hehe). Was @antron gesagt hat, ist genau warum ich es gelöscht habe. Und ja, das +1 war von mir. ;) – Will