anchor.diff:           (val-sym (gensym))]
       `(let* [(,val-sym ,value)]
          ,(compile-pattern pattern val-sym body))))
  +
  +(defun generate-case-error (arms val) :hidden
  +  (let* [(patterns (map (lambda (x) (pretty (car x))) arms))
  +         ]
  +    `(error (.. "Pattern matching failure!\nTried to match the following patterns against " (pretty ,val) ", but none matched.\n"
  +                ,(concat (map (lambda (x) (.. "  Tried: `" x "`")) patterns) "\n")))))
   
   (defmacro case (val &pts)
     "Match a single value against a series of patterns, evaluating the first
  
positive.code:     (cond
        [(list? pattern)
         (cond
           [(cons-pattern? pattern)
            (let* [(lhs (cons-pat-left-side pattern))
                   (rhs (cons-pat-right-side pattern))
  
negative.code:                  ,@(cdr pt)))))]
      `(let* [(,val-sym ,val)]
         (cond ,@(map compile-arm pts)
               [true ,(generate-case-error pts val-sym)]))))
  