English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
RE: [Caml-list] Checked exceptions and type inference
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-03-12 (03:25)
From: Nicolas Cannasse <warplayer@f...>
Subject: Re: [Caml-list] Checked exceptions and type inference
> Perhaps I don't understand what migth be a
> 'checked exception' in ML. I am missing something?.
> can you explain it with an example

Checked exception are like in Java : the compiler warn you if you don't
catch them, and if you really don't want to do so, you have to put an
annotation on your fonction to say that it is throwing this kind of
For example

File openFile( String filename ) {
    return new File(filename);

compiler warn you about the IOException that can be thrown by the call to
"new File" and so you have either to ignore it :

File openFile( String filename ) {
    try {
        return new File(filename);
    } catch( IOException e ) {
        // print it if you feel like
        return null;

or to propagate it explicitly

File openFile( String filename) throws IOException {
    return new File(filename);

but then the calling function of openFile will have also to decide either to
catch or to throw the IOException.
That's quite a rigorous way of handling exceptions, and you can use the
RuntimeException class to use exceptions à la OCaml.

BTW, I really dislike checked Exceptions, but I realy you want to support
them, here's some tip :

type 'a checked =
    | Result of 'a
    | Exc of exn

let check f x =
        Result ( f x )
        e -> Exc e

and then you can use it like this when you catch the exception :

let open_file filename =
    match check open_out filename with
    | Result x -> x
    | Exc e -> (* do something *)

or when you want to propagate it :

let open_file filename = check open_out filename

Nicolas Cannasse

To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners