352 Commits

Author SHA1 Message Date
dd719766ee A fn's arities are one form, fn f with a (params) -> R line per arity, and evaluating it replaces every arity at once. 2026-09-26 17:35:18 +07:00
179156b105 A function name has one version per arity, and a call picks the version by its number of arguments. 2026-09-26 17:08:15 +07:00
adfab2d482 A narrowed name keeps its assignability, a local whose address is taken or that a fn assigns is not narrowed, a trailing ? tests a whole chain, and the optional refusals name the test to write. 2026-09-26 16:08:16 +07:00
8afa054349 Merge master into the .fln optionals lane. 2026-09-26 15:52:00 +07:00
6c6b5a60cb ?? continues a line, a chain or an unwrap is no place to assign, nested marks and a ? on a value say what to write, a lowercase type takes ?, and a predicate reads as a word with its name beside it. 2026-09-26 15:36:49 +07:00
7361830938 A char minus a char takes the integer width its site wants, a chain of + or - folds left step by step, and a char plus a u64 is checked unsigned. 2026-09-26 15:23:34 +07:00
33203bd3c5 Merge master into the typed char lane
# Conflicts:
#	TODO.org
#	lib/check.ml
2026-09-26 15:04:23 +07:00
37c4f2ee10 A char plus or minus an integer is a char checked to be a scalar value, a char minus a char is their distance, and dyn chars do the same. 2026-09-26 14:55:00 +07:00
178c129c97 A .fln name carries no ? or !, and .fln has T?, x ?? d, x!, if let over a plain name and a?.b chaining. 2026-09-26 14:54:58 +07:00
7db1a81d1f Builtins, prelude, vendor and raylib predicates are named with is- or has- and no name carries a ? or !. 2026-09-26 14:34:36 +07:00
fd8620516c A char literal is a typed char unless typed code wants a number, and a char compares, hashes, converts with (i32 c) and a checked (char n), and crosses into dyn as a dyn char. 2026-09-26 13:49:02 +07:00
5038c5954a get on a String is refused as at is, a dyn get's trap names get, a kept else-less form beside a number is blamed at itself in arithmetic and comparisons, and a kept if-let chain with no final else gives an Option. 2026-09-26 13:40:16 +07:00
b545584de8 Master is merged into the when, get and if let lane, and dyn get over text counts characters through at's own body. 2026-09-26 13:17:57 +07:00
c24b19e7b1 Merge master into the dyn char lane 2026-09-26 13:09:28 +07:00
1b588df6b5 Master is merged into the when, get and if let lane after the review fixes. 2026-09-26 13:09:24 +07:00
79430aca77 A lambda's last form is checked at the return its position wants, a call's arguments and a kept cond with no else keep a when as an Option, a when used as an arithmetic operand is blamed itself, elif let reads and prints as a nested if-let, and dyn get over text or a vec runs at's own runtime body. 2026-09-26 13:09:21 +07:00
e5fd44920e Merge branch 'master' into worktree-agent-a26dff0627201f77b 2026-09-26 12:55:06 +07:00
a3899f3ecb Master is merged into the when, get and if let lane for the review fixes. 2026-09-26 12:53:34 +07:00
f35a2b240a Merge master into the dyn char lane 2026-09-26 12:51:41 +07:00
28d4c0f8dc A number literal takes its type from its uses inside the function, an unconstrained float literal is an f64, and a dyn use asks for the dyn width. 2026-09-26 12:41:54 +07:00
659f4d8c6c Merge branch 'master' into worktree-agent-a26dff0627201f77b 2026-09-26 12:29:59 +07:00
36655025c0 Master is merged into the when, get and if let lane again. 2026-09-26 12:23:17 +07:00
bfdd971baa A String compares equal to a String or a str by its bytes, and a prelude builder's String is checked at the caller's line. 2026-09-26 12:22:17 +07:00
d5437c3f22 A non-ASCII char literal is refused where a byte is wanted, a dyn int or char goes into an i32 range-checked, a cast on a dyn char gives its code point, and C1 controls print as \uXXXX. 2026-09-26 12:15:04 +07:00
62fd7b19bc Master is merged into the when, get and if let lane. 2026-09-26 12:13:55 +07:00
5ee433a38f A kept when answers an Option, get is a checked lookup over arrays, slices, Vecs and dyn, and if let reads as a two-arm match in both syntaxes. 2026-09-26 12:12:48 +07:00
5cc661d6ab Merge branch 'master' into worktree-agent-a26dff0627201f77b 2026-09-26 12:07:11 +07:00
db67ab19b4 String is owned, growable, always-valid UTF-8 text over a (Vec u8), and the prelude's text builders return it. 2026-09-26 12:07:11 +07:00
66ea0b3abe Merge branch 'master' into worktree-agent-ab88d16e8e6fbfe15 2026-09-26 12:05:38 +07:00
0ed3ce93e2 Every char prints as a spelling that reads back as it, with a name or Clojure's \uXXXX for each control character. 2026-09-26 11:54:03 +07:00
ca9e28860a A dyn value into a written type has a checker row that compiles. 2026-09-26 11:52:13 +07:00
6d8ced2ba3 A dyn text becomes a str as its own bytes, a dyn view becomes its own storage, and a dyn vec or map becomes a checked copy in a [const T], a fixed array or a struct, while a writable [T] is never a copy. 2026-09-26 11:48:01 +07:00
bcdb6250a9 A bit operator's operand of any shape that answers a bool gets the and, or or not hint, found by a check that is thrown away. 2026-09-26 11:46:32 +07:00
c7fb0e5422 Literal locals fed through do, let and if arms share one type without extra rounds, a chain past the rounds names the local to annotate, a restart's conversion fix shows the argument as written, and a name's lookup is answered from the last one under the same scope 2026-09-26 11:14:15 +07:00
5712d4bdc0 A bool operand of a bit operator is refused with its and, or or not hint in a whole-file check, whichever operand it is. 2026-09-26 11:04:32 +07:00
473bf0a2b7 The bit operators are && || ^^ ~~ in .fln at Python's precedence, take integers only on typed and dyn values, and popcount, leading-zeros, trailing-zeros and the rotations exist on both backends. 2026-09-26 10:49:54 +07:00
23663c4773 An unconstrained float literal is an f64, literal locals settle by merging the locals that feed each other, and a restart refused for a number type writes the conversion 2026-09-26 10:45:46 +07:00
207f5d7bad Merge master 2026-09-26 09:59:00 +07:00
5f1b9b9e7e An unconstrained float literal is an f32, and an integer literal meeting a float literal meets it at the float 2026-09-26 09:49:51 +07:00
697c016231 Merge master 2026-09-26 09:29:40 +07:00
d519ca81dd Merge master into the views lane 2026-09-26 09:29:15 +07:00
5177586848 A number or character literal bound by let or loop takes its type from its uses in the function 2026-09-26 06:22:25 +07:00
f39612bc7c Code a request sends without :syntax is read in its file's syntax, or the program's when it names none, and a dotted dyn name points to its accessor. 2026-09-26 06:21:07 +07:00
7953376e4e Any typed container of numbers, bools, str, structs, arrays, slices or Vecs crosses into dyn as a view from any storage, and a dev build traps on a view whose frame returned or whose block was released. 2026-09-26 06:10:11 +07:00
b92e91bcaa A parameter, local or field may be named str or any other type name when a type follows it, and a type-named parameter with no type after it is refused with both fixes. 2026-09-26 05:27:23 +07:00
267db2cd91 The typed read-only text type is spelled str, and string is refused with that fix. 2026-09-26 05:22:24 +07:00
263214e639 A dyn opened by an expectation is marked where it is opened, so a bool or an Option beside a dyn stays a dyn, and an operand refused at a type is not asked again, so nested sums and matches check in linear time 2026-09-25 23:43:14 +07:00
3e504deb6f An arm is checked at the other arm's type first and meets it at the join only when refused there, so every program master accepts keeps its type and value while arms still meet in either order 2026-09-25 23:10:16 +07:00
319a3c78c4 Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 22:40:48 +07:00
a14e633a21 A pointer's element type can be cast and a slice made from a pointer and a count with slice-from 2026-09-25 22:35:34 +07:00