Les exceptions
Caml-Light offre un mécanisme d'erreurs simple grâce au type exn.
exception Foo ;;
exception Bar of int;;
Les exceptions sont des valeurs :
let to_foo = function an_exn -> match an_exn with
| Bar _ -> Foo
| an_exn -> an_exn ;;
marquées exceptionnelles (déclencher ou lever une exception) par :
raise I
On peut récupérer une exception :
try E with | F ® EI
let v = 1 in
try (let v = 2 in raise Foo)
with
| Foo -> v
;;
Soit E l'environnement courant.
-
Si l'évaluation de E dans E ne
déclenche pas d'exception c'est une valeur V (de type sv) qui est le
résultat.
- Sinon, soit I l'exception déclenchée, le résultat de
l'évaluation est alors le même que celui de
match I with | F ® EI
dans l'environnement E.
En particulier les motifs des clauses Fi doivent être des exceptions
et les corps des clauses
EIi doivent avoir des types compatibles avec sv.
Le filtrage n'a pas besoin d'être exhaustif,
on peut récupérer n'importe quelle exception.
c'est à éviter
Une exception marquée n'est plus une valeur :
let foo = function x ->
try (x+1) with
| Foo -> -1
;;
foo (raise Foo);;