define responders "/foo" get () => (test, foo-get), post () => (foo-post); "/bar" post () => (bar-post); end; Invalid syntax in macro-case macro call. define macro responders-definer { define responders ?responders:* end } => { ?responders } responders: { } => { } { ?responder:* ; ... } => { ?responder ; ... } responder: { ?url:* ?responder-methods:* } => { begin let responder = make(); ?responder-methods add-responder(?url, responder); end } responder-methods: { } => { } { ?responder-method:* , ... } => { ?responder-method ; ... } responder-method: { ?request-method:* ( ?regex:* ) => ( ?actions:* ) } => { begin let map = element(responder.responder-map, ?#"request-method", default: #f); unless (map) map := make(); responder.responder-map[?#"request-method"] := map; end unless; map[compile-regex(?regex)] := list(?actions); end } regex: { } => { "^$" } { ?pattern:* } => { ?pattern } // do(method (foo) foo() | error() end, ...) end macro responders-definer;