author | wenzelm |
Thu, 22 Nov 2007 14:51:34 +0100 | |
changeset 25456 | 6f79698f294d |
parent 23962 | e0358fac0541 |
child 28444 | 283d5e41953d |
permissions | -rw-r--r-- |
(* 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;