;;@ignore
;; Creates a new matcher. Supported types: single and segment.
;; Single matchers expect the success continuation to only
;; be a procedure of one argument: the result, whereas segment
;; matchers also pass the number of consumed list elements.
(define (matcher:make type proc #!optional variables)
(cond ((default-object? variables)
(set! variables '()))
((not (list? variables))
(set! variables (list variables))))
(list type proc variables))