src/Pure/ML-Systems/exn.ML
author wenzelm
Tue, 24 Jul 2007 19:44:33 +0200
changeset 23962 e0358fac0541
child 28444 283d5e41953d
permissions -rw-r--r--
Runtime exceptions as values (from library.ML);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23962
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/ML-Systems/exn.ML
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     3
    Author:     Makarius
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     4
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     5
Runtime exceptions as values.
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     6
*)
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     7
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     8
structure Exn =
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
     9
struct
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    10
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    11
datatype 'a result =
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    12
  Result of 'a |
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    13
  Exn of exn;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    14
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    15
fun get_result (Result x) = SOME x
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    16
  | get_result _ = NONE;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    17
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    18
fun get_exn (Exn exn) = SOME exn
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    19
  | get_exn _ = NONE;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    20
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    21
fun capture f x = Result (f x) handle e => Exn e;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    22
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    23
fun release (Result y) = y
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    24
  | release (Exn e) = raise e;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    25
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    26
exception EXCEPTIONS of exn list * string;
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    27
e0358fac0541 Runtime exceptions as values (from library.ML);
wenzelm
parents:
diff changeset
    28
end;