I have to say, that while the syllogism is correct, the conclusion "no language that makes type declarations mandatory could be convenient to program in" is invalid, because mandatory type declaration is not incompatible with a toplevel.
How can I say this? Because in the language environment that I am currently programming in (AOS - the Active Oberon System) I can type:
M:M[splat] <-- splat is a keychord, in my case Cmd-Shift-X
and the following code appears:
MODULE M;
(* PACO.Compile M.Mod; System.Free M; M.Do ~ *) <-- click at the start - type Cmd-Enter, and the sequence of commands gets run, with output to the system console.
PROCEDURE Do ();
VAR
BEGIN
(* code goes here *)
END Do;
BEGIN
(* code goes here *)
END;
with the cursor positioned at the first code entry position,
and when a little code is written, execution is a click-splat away. Macro execution at code-writing time is almost as powerful as macro execution at compile time, and dynamic execution of polymorphic statically typed code is about as powerful as dynamic execution of polymorphic dynamically typed code.
Did I mention that I'm about to make the (perhaps inanely or insanely hubristic) experiment of seeing how hard it eill be to implement Arc in AOS? Should be a fun learning experience.