anchor.diff:            ((progn &body body)
              (if (single body)
                  (expand-partially self (first body))
  -               (if *in-binding-form*
  +               (if *subenv*
                      `(progn ,@(mapcar (op (expand-partially self _)) body))
                      (invoke-restart 'splice body))))
             (((prog1 multiple-value-prog1) f &body body)
  
positive.code: 
  The `local' macro is loosely based on Racket's support for internal
  definitions."
    (let (*in-binding-form*
          *orig-form*
          *subenv*)
      (multiple-value-bind (body decls) (parse-body orig-body)
        (catch 'local
  
negative.code:    :decls nil))
  
  (deftype expr () t)
  (deftype body () 'list)
  
  (adt:defdata binding
    (var symbol expr)
    (symbol-macro symbol expr)
    (fun symbol body)
    ;; But of course we can't get the function.
    (macro symbol function))
  
  