anchor.diff:      [(! seen) (assert-linearity! pat {})]
       [(list? pat)
        (cond
  -       [(eq? (car pat) 'as)
  -        (assert-linearity! (cadr pat) seen)]
  -       [(eq? (car pat) '->')
  +       [(eq? (cadr pat) ':with)
  +        (assert-linearity! (caddr pat) seen)]
  +       [(eq? (cadr pat) '->)
           (assert-linearity! (caddr pat) seen)]
          [(eq? (car pat) 'optional)
           (assert-linearity! (cadr pat) seen)]
  
positive.code:     (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? (car pattern) 'optional)
            (compile-pattern-bindings (cadr pattern) symb)]
           [(struct-pat? pattern)
  
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))]
  