src/Pure/General/exn.ML
changeset 45125 270366301bd7
parent 45124 380a4677c55d
child 57970 a2df9de46060
     1.1 --- a/src/Pure/General/exn.ML	Wed Aug 17 20:08:36 2011 +0200
     1.2 +++ b/src/Pure/General/exn.ML	Wed Aug 17 22:14:22 2011 +0200
     1.3 @@ -20,10 +20,6 @@
     1.4    val is_interrupt_exn: 'a result -> bool
     1.5    val interruptible_capture: ('a -> 'b) -> 'a -> 'b result
     1.6    exception EXCEPTIONS of exn list
     1.7 -  val flatten: exn -> exn list
     1.8 -  val flatten_list: exn list -> exn list
     1.9 -  val release_all: 'a result list -> 'a list
    1.10 -  val release_first: 'a result list -> 'a list
    1.11  end;
    1.12  
    1.13  structure Exn: EXN =
    1.14 @@ -71,23 +67,10 @@
    1.15    Res (f x) handle e => if is_interrupt e then reraise e else Exn e;
    1.16  
    1.17  
    1.18 -(* nested exceptions *)
    1.19 +(* concatenated exceptions *)
    1.20  
    1.21  exception EXCEPTIONS of exn list;
    1.22  
    1.23 -fun flatten (EXCEPTIONS exns) = flatten_list exns
    1.24 -  | flatten exn = if is_interrupt exn then [] else [exn]
    1.25 -and flatten_list exns = List.concat (map flatten exns);
    1.26 -
    1.27 -fun release_all results =
    1.28 -  if List.all (fn Res _ => true | _ => false) results
    1.29 -  then map (fn Res x => x) results
    1.30 -  else raise EXCEPTIONS (flatten_list (List.mapPartial get_exn results));
    1.31 -
    1.32 -fun release_first results = release_all results
    1.33 -  handle EXCEPTIONS [] => interrupt ()
    1.34 -    | EXCEPTIONS (exn :: _) => reraise exn;
    1.35 -
    1.36  end;
    1.37  
    1.38  datatype illegal = Interrupt;