(define-library (cuprate rewriters) (import (scheme base)) (export rewriiters rewrite) (begin (define (default-on-pair pair) (cons (test-rewrite (car pair)) (test-rewrite (cdr pair)))) (define (default-on-vector vec) (vector-map test-rewrite vec)) (define (default-on-error error) (let ((msg (error-object-message error)) (irritants (error-object-irritants error))) (cons 'error (cons msg irritants)))) (define rewriters (make-parameter `((,pair? . ,default-on-pair) (,vector? . ,default-on-vector) (,error-object? . ,default-on-error)))) (define (rewrite obj) (let loop ((rewriters (rewriters))) (cond ((null? rewriters) obj) (((caar rewriters) obj) ((cdar rewriters) obj)) (else (loop (cdr rewriters))))))))