(mac after* block (let (body finally) (split-by block ':do) `(after (do ,@body) (do ,@finally)))) (def split-by(seq delim) (case type.seq cons (split seq (or (pos delim seq) (len seq))) string (split seq (or (posmatch delim seq) (len seq))) (err "bad type for split-by"))) arc> (after* (prn "interrupted") (/ 3 0) (prn "completed") 34 :do (prn "end") (prn "and again")) interrupted end and again Error: "/: division by zero"