<div dir="ltr"><div><div><div>Thanks Jay, your explanation with match helped me get a better understanding of what's going on.<br><br></div>For the specific case of match, you can make the b-helper example work if you pass the failure procedure to b-helper and have b-helper return it:<br>

<br><span style="font-family:courier new,monospace">(define (b in)<br>  (match in<br>    [x (=> failure-proc)<br>       (b-helper x failure-proc)]<br>    ["home"<br>     "It's home!"]<br>    [_<br>

     "Unknown"]))<br><br>(define (b-helper x fp)<br>  (define y (string->number x))<br>  (if y<br>      y<br>      (fp)))<br><br>(module+ test<br>  (require rackunit)<br>  (check-equal? (b "4") 4)<br>

  (check-equal? (b "home") "It's home!")<br>  (check-equal? (b "five") "Unknown"))</span><br><br></div>But I don't think there's a way to do this with dispatch-url because afaik it doesn't give you the option of specifying a failure procedure. So, what you suggested in terms of using serve/launch/wait,  dispatch sequencer and dispatch servlet looks like the way to do it if I was set on a particular sequence (which for the time being I'm not). <br>

<br></div><div></div><div>Tobias</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On 18 December 2013 09:56, Jay McCarthy <span dir="ltr"><<a href="mailto:jay.mccarthy@gmail.com" target="_blank">jay.mccarthy@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">There's an annoying terminological problem.<br>
<br>
The core Web server has a concept of a dispatcher sequence and<br>
(next-dispatcher) jumps to the next of those. The web-server/dispatch<br>
library helps you write a function that does pattern matching on the<br>
URL of a request. What you want is that after you take a branch in<br>
that function, you'd like to have the branch fail and then the pattern<br>
matching try again.<br>
<br>
racket/match [which web-server/dispatch is built on] supports<br>
something like that:<br>
<br>
(define (a in)<br>
  (match in<br>
    [x<br>
     (define y (string->number x))<br>
     (if y<br>
       y<br>
       (failure-cont))]<br>
    ["home"<br>
     "It's home!"]<br>
    [_<br>
     "Unknown"]))<br>
<br>
(module+ test<br>
  (require rackunit)<br>
  (check-equal? (a "4") 4)<br>
  (check-equal? (a "home") "It's home!")<br>
  (check-equal? (a "five") "Unknown"))<br>
<br>
But the use of (failure-cont) has to be syntactically within the<br>
match, i.e. the following does not work:<br>
<br>
(define (b-helper x)<br>
  (define y (string->number x))<br>
  (if y<br>
    y<br>
    (failure-cont)))<br>
<br>
(define (b in)<br>
  (match in<br>
    [x<br>
     (b-helper y)]<br>
    ["home"<br>
     "It's home!"]<br>
    [_<br>
     "Unknown"]))<br>
<br>
If you really need to sequence them this way, then you could use<br>
<br>
1. serve/launch/wait<br>
2. sequence dispatcher<br>
3. dispatch/servlet handling files<br>
4. and then dispatch/servlet handling everything else<br>
<br>
So that the (next-dispatcher) in step 3 jumped to step 4.<br>
<br>
Jay<br></blockquote></div><br></div></div></div></div>