; -*- bee -*- (directives (import Options) ) (define-syntax expand-option (syntax-rules (option else) ((expand-option (else (name desc) e0 e+ ...)) (vector unit desc 1 (lambda (name) e0 e+ ...))) ((expand-option (option flag ((arg (usage-thunk)) ...) e0 e+ ...)) (vector flag (option-args (list (usage-thunk) ...)) (length '(arg ...)) (lambda (arg ...) e0 e+ ...))) ((expand-option (option flag ((arg usage) ...) e0 e+ ...)) (vector flag (option-args (list usage ...)) (length '(arg ...)) (lambda (arg ...) e0 e+ ...))) )) (define-syntax option-table (syntax-rules () ((option-table options ...) (vector (expand-option options) ...)) )) (define-syntax option-bind (syntax-rules () ((option-bind argv-list table (var ...) e0 e+ ...) (let* ((unmatched (option-grovel table argv-list))) (apply (lambda (var ...) e0 e+ ...) unmatched))) ))