;; A handler-bind is an expression and its value is its body's, so it is a way ;; for a function value to be a function's answer — and it would have walked ;; straight past a check that only looked at [return] and at the last form of ;; a block. with-allocator and restart-case are the same shape and are checked ;; the same way. (defstruct C [id i32]) (defonce seen i32) (defn keep [f (Fn [] i32)] (Fn [] i32) (handler-bind [(C [c] (set seen (.id c)))] f)) (defn main [] i32 0)