From 7c197e3bb0781107ffa813983fa2c776b114ed9a Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sat, 26 Sep 2026 05:46:52 +0700 Subject: [PATCH 1/2] A let takes several bindings on indented lines, queued --- TODO.org | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/TODO.org b/TODO.org index fc6f92ea..94adcb8f 100644 --- a/TODO.org +++ b/TODO.org @@ -671,6 +671,11 @@ Decided 2026-09-26: ~class Lambda(param, body, env)~, ~generic describe(v) -> dy Decided 2026-09-26: in .fln ~let x = v~ at column 0 reads ~(def x v)~ and replaces ~def~, which is refused with that fix; ~once~ and ~const~ stay. +** NEXT A let takes several bindings on indented lines +Decided 2026-09-26: lines indented under a ~let~ that are ~name = v~ or ~name: T = v~ are +more bindings of the same let; anything else there stays refused. flan convert writes +consecutive lets this way. + ** NEXT A struct fits on one line Decided 2026-09-26: ~struct Pt(x: i32, y: i32)~ beside the block form, like a data case; union and a struct with a parent too. From 8e8015cb2d87f28d03283414396b281a527e7d68 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sat, 26 Sep 2026 05:52:20 +0700 Subject: [PATCH 2/2] Primitive literals are typed by local inference, and container and text literals are dyn unless annotated --- TODO.org | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/TODO.org b/TODO.org index 94adcb8f..1cf331ff 100644 --- a/TODO.org +++ b/TODO.org @@ -26,14 +26,13 @@ and any storage; a dev build checks a view against its frame or allocation and t when stale, a release build does not. Waits on the dyn-unless-annotated design. ** NEXT Dyn unless annotated -Decided 2026-09-25: in both syntaxes an unannotated value is dyn — [6 2 4 9] is a dyn -vector, 1 a dyn integer — and a typed value needs an annotation. Decided 2026-09-26: -the plain rule — a literal is dyn wherever nothing wants a type, typed functions -included; a value from a typed source keeps its type; for/dotimes counters stay i32; a -warning marks a dyn let meeting typed code in a typed function. Migration in the -design's order: str rename, views of any type, dyn-meets-typed fixes, literals built -once, the switch with the warning, annotation script, flip, String. - +Decided 2026-09-26, replacing the plain rule: number, bool and char literals are typed, +their type inferred from their uses inside the function (never across functions); an +unconstrained integer literal is int (i32) and a float literal float (f32); uses that +disagree are refused with a request for an annotation. Vector, map and text literals +are dyn unless something typed wants them. A typed value is boxed where it goes into +dyn, and a dyn unboxed (checked) where typed code needs it; typed beside dyn in an +operator gives dyn. Dyn integers stay i64 and dyn floats f64. ** DONE Dynamic-first, and the dyn half of the language CLOSED: [2026-09-20] An unannotated parameter or return is =dyn=: a NaN-boxed value over a mark-sweep