On Thu, Aug 3, 2023 at 6:06 PM Dan Cross <crossd@gmail.com> wrote:
On Thu, Aug 3, 2023 at 11:21 AM will.senn@gmail.com <will.senn@gmail.com> wrote:
 
someone had needed to store a
pair of integers, so they used a CONS cell;

Of course, that was a bad idea.  The pair of integers should have been a struct or a class named after whatever its application-level purpose was: a point, for example.

after a while, the pair
needed to be expanded to a triple, so someone converted the single
CONS cell into a (proper) list.

In that case, a derived struct or class should have been created.  The two classes would use the same accessor methods, just as in C++.

this, of course, ran afoul of the type system and
raised a condition, which resulted as an ISE in prod. The fix was
trivial (change CDR to SECOND in the right place) but it really struck
me that if the system were statically typed, this would have been
trivially discovered at compile-time.

Absolutely, and if the failure was intolerable, CL's static type declarations would have caught the use of the wrong type.  But you don't have to declare *everything*.  For that matter, there is nothing in a fully statically typed system that requires every variable, function, argument, etc. to be *declared*: type inference is powerful.

Common Lisp does allow you to declare types in some limited regards;
these are usually hints to the compiler for code generation.

They may or may not be, depending on how you set the OPTIMIZE declaration.
 
like Rob, I
greatly prefer strong, static typing.

Then why weren't you using mypy?
 
Incidentally, C is weakly (you can add a pointer to an integer: the
result is another pointer), but statically typed.

That's not weak typing, it's operator overloading, just as when you add an int to a double.  C will not let you, e.g., add an int to a function.  Weak typing is quite rare in high-level languages: PL/I pointer variables are weakly typed (that is, when you allocate an object you specify the type of the object and then assign it to the pointer variable), but the rest of the language is strongly typed.