( (fun swap (p) (local (t (fst p)) (block (setfst p (snd p)) (setsnd p t) p))) ) (local (x (pair 1 2)) (local (y x) (block { boxed semantics: unboxed semantics: } (write x) { (1.2) (1,2) } (write y) { (1.2) (1,2) } (setfst y 3) (write x) { (3,2) (1,2) } (write y) { (3,2) (3,2) } (@swap x) (write x) { (2,3) (1,2) } (write y)))) { (2,3) (3,2) }