(module foo () (import chicken scheme) (use lolevel) (define-syntax let-slots (ir-macro-transformer (lambda (e i c) (let* ((slots (caadr e)) (struct-name (cadadr e)) (struct (car (cddadr e))) (body (cddr e))) `(let ,(map (lambda (s) `(,(i s) (,(symbol-append (i struct-name) '- (i s)) ,struct))) slots) ,@(i body)))))) (define-record state prompt in out offset line pos return cols max-row) (define (prompt-loop ps) (let-slots ((pos line in out return) state ps) ps)))