anchor.diff:      (cond
         [(list? pattern)
          (cond
  -         [(eq? (car pattern) 'as)
  -          `(,@(compile-pattern-bindings (caddr pattern) symb) ,@(compile-pattern-bindings (cadr pattern) symb))]
  -         [(eq? (car pattern) '->)
  -          (compile-pattern-bindings (caddr pattern) `(,(cadr pattern) ,symb))]
  +         [(eq? (cadr pattern) ':with)
  +          `(,@(compile-pattern-bindings (caddr pattern) symb) ,@(compile-pattern-bindings (car pattern) symb))]
  +         [(eq? (cadr pattern) '->)
  +          (compile-pattern-bindings (caddr pattern) `(,(car pattern) ,symb))]
            [(eq? (car pattern) 'optional)
             (compile-pattern-bindings (cadr pattern) symb)]
            [(struct-pat? pattern)
  
positive.code:     [(! seen) (assert-linearity! pat {})]
      [(list? pat)
       (cond
         [(eq? (car pat) 'as)
          (assert-linearity! (cadr pat) seen)]
         [(eq? (car pat) '->')
          (assert-linearity! (caddr pat) seen)]
         [(eq? (car pat) 'optional)
          (assert-linearity! (cadr pat) seen)]
  
negative.code:          (val-sym (gensym))]
      (assert-linearity! pattern)
      `(let* [(,val-sym ,value)]
         ,(debug (compile-pattern pattern val-sym body)))))
  
  (defun generate-case-error (arms val) :hidden
    (let* [(patterns (map (lambda (x) (pretty (car x))) arms))]
  