From d7070501e4e568b1e9969f3005e6362d01bc163a Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sun, 20 Sep 2026 07:20:53 +0700 Subject: [PATCH] The queue marks item 7 landed, and names the or asymmetry it turned up dyn if's truthiness rule reached when, cond, and, or, not and while through one checker funnel, and turned up something nobody had decided: and's short-circuit answer already carries a non-bool dyn value through, Clojure-style, but or's does not, because its sentinel occupies the arm check_if types first. Written down here rather than fixed, since the queue's items get decided one at a time and this one is not yet. --- FIX.org | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/FIX.org b/FIX.org index b379cb7..9cf7bcc 100644 --- a/FIX.org +++ b/FIX.org @@ -436,7 +436,18 @@ rename. typed-flan branch freezes the static language pre-dyn. 6. defclass = named dyn map + shape tag; CLOS class dispatch AND Clojure-style arbitrary dispatch functions. After 1. 7. dyn if: truthiness (nil/false are false, all else true). Typed stays - strict bool. + strict bool. — LANDED, a94efcc + + Reaches when, cond, if's own condition, and's condition, or's + condition, not and while for free or by hand, all through one funnel + in check.ml (check_truthy). One thing fell out of it that nobody had + decided: and's answer position already carries a non-bool dyn value + through, Clojure-style, because its short-circuit sentinel is the else + arm and the real value's type wins; or's sentinel is the then arm + instead, so it is what decides the whole expression's type, and or's + answer stays a strict bool. Reordering or to match and is a real fix + and nobody's called it yet — left alone, noted in parse.ml at + shortcircuit. 8. Return slot stays mandatory (dyn or ()) — the parse ambiguity it closes is real; revisit only if it grates. SETTLED 2026-09-19, reconfirmed with the author: both spellings stay legal, () is not collapsing into dyn.