Recentemente mi è stato dato il codiceOCaml - Che cos'è un tipo non valido?
List.fold_left (fun acc x -> raise x ; acc) 3
sto completamente bene con questa applicazione parziale con un valore funzionale di> nell'elenco Tipo Exn -> int, e il fatto che produce un avvertimento non è sorprendente . Sto,> però, non certo quello che la metà della segnalazione significa:
Warning 21: this statement never returns (or has an unsound type.)
non può effettivamente trovare alcun riferimento a questo avvertimento in cui non è il risultato di una dichiarazione di non-ritorno. Anche la pagina man per ocamlc menziona solo le istruzioni di non ritorno per questo avviso e warnings.ml si riferisce semplicemente a Notreturning_statement.
Ho familiarità con il concetto di solidità in relazione ai sistemi di tipi, ma l'idea che un tipo stesso sia intrinsecamente infondato mi sembra strano.
Quindi le mie domande sono:
Che cosa è esattamente un tipo alienato? Qual è la situazione in cui si presenterebbe un tipo non corretto quando OCaml emetterebbe solo un avvertimento piuttosto che fallire completamente?
Qualcuno ha postato questa domanda, e mentre stavo scrivendo una risposta, è stato cancellato. Credo che la domanda sia molto interessante e valga la pena di essere ripubblicata. Perche non si può avere qualcuno che è disposto ad aiutarvi :-(
Credo che la domanda sia stata rimossa perché era un duplicato di http://stackoverflow.com/questions/31278561/avoid-the-warning-warning-21-this-statement-never-returns-or-has-an -unsound-t, in cui l'avviso è stato causato dall'uso di una funzione esterna (js_of_ocaml) con tipo di risultato non vincolato, come nella tua risposta di seguito. Sospetto che l'interrogante sia quello che mi ha appena dato un +1 sulla risposta accettata. Certo, l'attenzione è un po 'diversa. – antron
Ero la persona che ha chiesto/cancellato; Ho appena visto (hehe) questo. Quello che @antron ha detto è esattamente il motivo per cui l'ho cancellato. E sì, quel +1 era da me. ;) – Will