(define-module (extant input) #:export (register-handler!)) (define *handlers* '()) (define (register-handler! proc) (set! *handlers* (cons proc *handlers*))) (define (dispatch-input text) (let loop ((handlers *handlers*)) (if (null? handlers) '((text . "I could not find a suitable handler for this message.") (style . error)) (let ((result ((car handlers) text))) (if (null? result) (loop (cdr handlers)) result)))))