src/Pure/General/exn.ML
changeset 42223 098c86e53153
parent 40483 3848283c14bb
child 43537 80803078552e
equal deleted inserted replaced
42222:ff50c436b199 42223:098c86e53153
     9   datatype 'a result = Result of 'a | Exn of exn
     9   datatype 'a result = Result of 'a | Exn of exn
    10   val get_result: 'a result -> 'a option
    10   val get_result: 'a result -> 'a option
    11   val get_exn: 'a result -> exn option
    11   val get_exn: 'a result -> exn option
    12   val capture: ('a -> 'b) -> 'a -> 'b result
    12   val capture: ('a -> 'b) -> 'a -> 'b result
    13   val release: 'a result -> 'a
    13   val release: 'a result -> 'a
       
    14   val flat_result: 'a result result -> 'a result
    14   val map_result: ('a -> 'b) -> 'a result -> 'b result
    15   val map_result: ('a -> 'b) -> 'a result -> 'b result
       
    16   val maps_result: ('a -> 'b result) -> 'a result -> 'b result
    15   exception Interrupt
    17   exception Interrupt
    16   val interrupt: unit -> 'a
    18   val interrupt: unit -> 'a
    17   val is_interrupt: exn -> bool
    19   val is_interrupt: exn -> bool
    18   val interrupt_exn: 'a result
    20   val interrupt_exn: 'a result
    19   val is_interrupt_exn: 'a result -> bool
    21   val is_interrupt_exn: 'a result -> bool
    43 fun capture f x = Result (f x) handle e => Exn e;
    45 fun capture f x = Result (f x) handle e => Exn e;
    44 
    46 
    45 fun release (Result y) = y
    47 fun release (Result y) = y
    46   | release (Exn e) = reraise e;
    48   | release (Exn e) = reraise e;
    47 
    49 
       
    50 fun flat_result (Result x) = x
       
    51   | flat_result (Exn e) = Exn e;
       
    52 
    48 fun map_result f (Result x) = Result (f x)
    53 fun map_result f (Result x) = Result (f x)
    49   | map_result f (Exn e) = (Exn e);
    54   | map_result f (Exn e) = Exn e;
       
    55 
       
    56 fun maps_result f = flat_result o map_result f;
    50 
    57 
    51 
    58 
    52 (* interrupts *)
    59 (* interrupts *)
    53 
    60 
    54 exception Interrupt = Interrupt;
    61 exception Interrupt = Interrupt;