/* Examples of functions */ lambda x. x;; fun(f,x, acc[read](x); raise);; fun(f,x, if acc[read](x) then true else raise);;
/* Valid program (TryWith pattern)*/ let z = new[read*;close]() in try if acc[read](z) then acc[close](z) else raise with acc[close](z);;
/* Valid program (TryClose pattern) */ let z = new[read*;close]() in (try if acc[read](z) then true else raise with true);acc[close](z);;
/* Valid program */ lambda x. let z = new[write*;close]() in try if acc[read](x) then acc[write](z);acc[close](z) else raise with acc[close](z);;
/* Invalid program */ let backup = lambda x. let z = new[write*;close]() in try if acc[read](x) then acc[write](z);acc[close](z) else raise with acc[close](z) in let y = new[read*;close]() in backup y;;
/*** Valid, but ill-typed program ***/ let x = new[read*;close]() in let y = new[read*;close]() in let g = fun(f,z, (if acc[read](x) then true else raise); acc[read](y); f true) in try g true with acc[close](x); acc[close](y);;
/*** Valid program ***/ let x = new[read*;close]() in let y = new[read*;close]() in try fun(f,z, (if acc[read](x) then true else raise); acc[read](y); f true) true with acc[close](x); acc[close](y);;
/*** Valid program ***/ let create = fun(f,x, let y=new[read*;close]() in (acc[read](y);y)) in let use = fun(f, x, if acc[read](x) then raise else f x) in let repeat = fun(g,x, let z = create x in try (use z; g x) with acc[close](z)) in repeat true;;
/*** Valid program ***/ let create = fun(f,x, let y=new[read*;close]() in (acc[read](y);y)) in let use = fun(f, x, if acc[read](x) then raise else f x) in let repeat = fun(g,x, let z = create x in try (g x;use z) with acc[close](z)) in repeat true;;
/*** Invalid program ***/ let create = fun(f,x, let y=new[read*;close]() in y) in let repeat = fun(g,x, let z = create true in try (if acc[read](z) then raise else (g true;acc[read](z))) with acc[close](z)) in repeat true;;