BTW if we add a CL-style (declare ...) to Scheme functions, that
immediately gets us into related problems.
In Common Lisp you can type:
(defun foo (foo-arguments ...)
(declare foo-declarations ...)
foo-body ...)
which would correspond to Scheme:
(define (foo foo-arguments ...)
(declare foo-declarations ...)
foo-body ...)
The CL standard specifies a bunch of directives that can go inside
(declare ...) but implementations can add more of them. The system is
explained here: <http://clhs.lisp.se/Body/s_declar.htm>.
So we could imagine things like this:
(define (foo)
(declare (something-safe-to-ignore-most-of-the-time ...)
(something-probably-safe-to-ignore ...)
(something-probably-unsafe-to-ignore ...))
foo-body ...)
The exact same problem, of what can be ignored, comes up, as we are
dealing with now.