#lang plait
(define exception (make-parameter identity))
(define (throw msg)
((parameter-ref exception) msg))
(define (try thunk recovery)
(let/cc esc
(parameterize ([exception
(lambda (x) (esc (recovery x)))])
(thunk))))
(try
(lambda ()
(begin
(throw "abort!")
(/ 1 0)
(display "done")))
(lambda (x)
(display (list "caught" x))))