(module char-set-literals (read-char-set-literal) (import chicken scheme) (use srfi-14) (define (char-range->list lower upper) (char-set->list (ucs-range->char-set (char->integer lower) (add1 (char->integer upper))))) (define (read-char-set-literal #!optional (port (current-input-port))) (let loop ((buffer '())) (let ((char (read-char port))) (case char ((#\]) (list 'quote (list->char-set buffer))) ((#\\) (loop (case (and (pair? buffer) (car buffer)) ((#\\) (cons char buffer)) (else (cons (read-char port) buffer))))) ((#\-) (loop (if (null? buffer) (cons char buffer) (case (peek-char port) ((#\]) (cons char buffer)) (else (append (char-range->list (car buffer) (read-char port)) buffer)))))) (else (loop (cons char buffer))))))) (set-sharp-read-syntax! #\[ read-char-set-literal) )