https://github.com/akkartik/mu1/blob/master/exception2.mu
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 exclusive-container error-or:_elem [
10   error:text
11   value:_elem
12 ]
13 
14 def main [
15   local-scope
16   foo false/no-exception
17   foo true/raise-exception
18 ]
19 
20 
21 def foo raise-exception?:bool [
22   local-scope
23   load-inputs
24   
25   
26   
27   
28   
29   
30   
31   
32   _, result:error-or:num <- call-with-continuation-mark 999/exception-tag, f, raise-exception?
33   {
34     val:num, normal-exit?:bool <- maybe-convert result, value:variant
35     break-unless normal-exit?
36     $print [normal exit; result ] val 10/newline
37   }
38   {
39     err:text, error-exit?:bool <- maybe-convert result, error:variant
40     break-unless error-exit?
41     $print [error caught: ] err 10/newline
42   }
43 ]
44 
45 
46 
47 def f raise-exception?:bool -> result:error-or:num [
48   local-scope
49   load-inputs
50   {
51     break-unless raise-exception?
52     
53     result <- merge 0/error, [error will robinson!]
54     return-continuation-until-mark 999/exception-tag, result
55   }
56   
57   result <- merge 1/value, 34
58   return-continuation-until-mark 999/exception-tag, result
59   
60   result <- merge 1/value, 0
61   return result
62 ]