(define consumer (lambda (buffer done? suspend consume) (let kernel ((count 0)) (cond ((done? count)) ((buffer ':empty?) (suspend) (kernel count)) (else (consume count (buffer ':get!)) (kernel (+ count 1)))))))