Runtime exceptions as values (from library.ML);
authorwenzelm
Tue, 24 Jul 2007 19:44:33 +0200
changeset 23962 e0358fac0541
parent 23961 9e7e1e309ebd
child 23963 c2ee97a963db
Runtime exceptions as values (from library.ML);
src/Pure/ML-Systems/exn.ML
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/ML-Systems/exn.ML	Tue Jul 24 19:44:33 2007 +0200
@@ -0,0 +1,28 @@
+(*  Title:      Pure/ML-Systems/exn.ML
+    ID:         $Id$
+    Author:     Makarius
+
+Runtime exceptions as values.
+*)
+
+structure Exn =
+struct
+
+datatype 'a result =
+  Result of 'a |
+  Exn of exn;
+
+fun get_result (Result x) = SOME x
+  | get_result _ = NONE;
+
+fun get_exn (Exn exn) = SOME exn
+  | get_exn _ = NONE;
+
+fun capture f x = Result (f x) handle e => Exn e;
+
+fun release (Result y) = y
+  | release (Exn e) = raise e;
+
+exception EXCEPTIONS of exn list * string;
+
+end;