Should work(haven't tested it yet).
(mac dowhile body (with (rbody (cut body 0 -1) test (last)) (w/uniq f `(rfn ,f () ,@body (if ,test (,f))))))
-----
(= a 0) ((afn () (pr ++.a) (if (isnt a 8) (self))))
(= a 0) (drain (do (pr ++.a) (isnt a 8)))
(drain:do (pr ++.a) (isnt a 8))