define responders "/about" get () => show-about; end; define macro responders-definer { define responders ?responders:* end } => { ?responders } responders: { } => { } { ?responder:* ... } => { ?responder ... } responder: { ?url:expression ?responder-methods:* } => { begin let responder = make(); ?responder-methods add-responder(?url, responder); end } responder-methods: { } => { } { ?responder-method:* ; ... } => { ?responder-method ; ... } responder-method: { ?request-method:expression ( ?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:expression } => { ?pattern } // do(method (foo) foo() | error() end, ...) end macro responders-definer;