From 51ce9a2ba65b551d9ea10ae1547f0dda1ed95a13 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Fri, 25 Sep 2026 09:52:29 +0700 Subject: [PATCH] Any expression is to take its type from (the T expr) --- TODO.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODO.org b/TODO.org index 27b9dd42..36059742 100644 --- a/TODO.org +++ b/TODO.org @@ -892,7 +892,8 @@ Not the same fix: a bracket literal has no argument to put a type in. Decision: how a literal names its element type — a spelling of its own, or a =let= annotation. -** TODO A let binding takes no type annotation +** NEXT A let binding takes no type annotation +Decided 2026-09-25: =(the T expr)=, Common Lisp's special operator, gives any expression its want; checked at compile time like any other want, and it compiles to nothing. =let= is unchanged. On a =dyn= operand it is refused, naming the cast. The refusals that say "annotate the binding" — =None=, an empty =[]=, and =(zeroed)=/=(filled)=/=(dead-beef)= with no want — suggest it instead, because today their suggestion cannot compile. Everything under the surface is there — the binding carries a type slot and the checker consumes it as the want — and only the way it is written is open, because =let= is a flat list of pairs and cannot disambiguate by count. No longer the