(define assert-mailbox-1 assert-addr-spec) (define mailbox-1 (bind addr-spec (lambda (r) (assert-mailbox-1 r) (let ((e (new-email-address))) (set-addr-spec e r) (result e))))) ; phrase route-addr ; Result: '(phrase route-addr) (define (assert-mailbox-2 x) (assert (list? x)) (assert (= 2 (length x)))) (define mailbox-2 (bind (sequence* ((phrase phrase) (_ (zero-or-more linear-white-space)) (route-addr route-addr)) (result (list phrase route-addr))) (lambda (r) (assert-mailbox-2 r) (let ((e (new-email-address)) (phrase (first r)) (route-addr (second r))) (assert-phrase phrase) (assert-route-addr route-addr) (set e 'name phrase) (let ((route (first route-addr)) (addr-spec (second route-addr))) (assert-route route) (assert-addr-spec addr-spec) (set e 'route route) (set-addr-spec e addr-spec)) (result e)))))