(define producer (lambda (buffer done? suspend create) (let kernel ((count 0)) (cond ((done? count)) ((buffer ':full?) (suspend) (kernel count)) (else (buffer ':put! (create count)) (kernel (+ count 1)))))))