Ostatnio dostałam kodOCaml - Co to jest typ niesłuszny?
List.fold_left (fun acc x -> raise x ; acc) 3
jestem całkowicie w porządku z tym częściowego stosowania mającym wartość funkcjonalną> Lista typ exn -> int, a fakt, że daje ostrzeżenie nie dziwi . Ja,> jednak nie jest pewne co pół ostrzeżenia oznacza:
Warning 21: this statement never returns (or has an unsound type.)
nie mogę rzeczywiście znaleźć żadnego odniesienia do tego ostrzeżenia, gdzie nie jest to wynikiem nie-powracającego oświadczeniu. Nawet strona man dla ocamlc wspomina jedynie o niepracujących instrukcjach dla tego ostrzeżenia, a warnings.ml odnosi się do niej po prostu jako Nonreturning_statement.
Jestem zaznajomiony z pojęciem solidności w odniesieniu do systemów typu, ale sama idea typu, który jest z natury niesłuszny, wydaje mi się dziwna.
Moje pytania to:
Co to jest typ niesłuszny? Jaka jest sytuacja, w której nietypowy typ pojawiłby się, gdy OCaml wydawałby ostrzeżenie, a nie zawodzi bardzo mocno?
Ktoś opublikował to pytanie i podczas pisania odpowiedzi został usunięty. Uważam, że to pytanie jest bardzo interesujące i warte uwagi. Proszę zwrócić uwagę, może masz kogoś, kto jest gotów pomóc :-(
Uważam, że pytanie zostało usunięte, ponieważ było duplikatem http://stackoverflow.com/questions/31278561/avoid-the-warning-warning-21-this-statement-never-returns- or-hasan -unsound-t, gdzie ostrzeżenie zostało spowodowane przez użycie zewnętrznej (js_of_ocaml) funkcji z nieograniczonym typem wyniku - jak w twojej odpowiedzi poniżej. Podejrzewam, że pytający to właśnie dał mi +1 na zaakceptowaną odpowiedź. To prawda, że ostrość jest nieco inna. – antron
Byłem osobą, która zapytała/usunęła to; Właśnie zauważyłem (hehe) to. To, co powiedział @antron, właśnie dlatego go skasowałem. I tak, to +1 było ode mnie. ;) – Will