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