Declarations in general Lassi Kortela 11 Feb 2021 10:26 UTC

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.