;; From the chapter "Condition system" in "The Nearly Complete ;; Scheme48 Reference Manual" by Taylor Campbell: ;; ;; *Warning:* `With-handler' is potentially very dangerous. If an ;; exception occurs and a condition is raised in the handler, the ;; handler itself will be called with that new condition! ;; Furthermore, the handler may accidentally return to an unexpecting ;; signaller, which can cause very confusing errors. Be careful with ;; `with-handler'; to be perfectly safe, it might be a good idea to ;; throw back out to where the handler was initially installed before ;; doing anything. ;; ;; The following is what he then suggests. ;; ,open handle (define (with-handler/safe handler thunk) ((call-with-current-continuation (lambda (k) (lambda () (with-handler (lambda (kond propagate) (k (lambda () (handler kond propagate)))) thunk))))))