Move examples/*.sx and their expected/ snapshots into per-category subfolders (examples/<category>/...). Folder = leading filename token, with ffi-objc/ffi-jni kept whole; filenames are unchanged. The corpus runner and LSP sweep now discover each category's expected/ dir, while issues/ stays flat. Example 1058's repo-root-relative companion import is made file-relative. Path strings embedded in 164 snapshots were regenerated (path-only changes). Test-layout docs in CLAUDE.md updated.
19 lines
702 B
Plaintext
19 lines
702 B
Plaintext
// Phase 6 — `mapper(..sources.value)`: project a method over a pack and spread
|
|
// the results into a closure call. The mapper lambda's params are contextually
|
|
// typed from the `Closure(...)` parameter even though `apply` is a pack-fn.
|
|
|
|
#import "modules/std.sx";
|
|
|
|
VL :: protocol(T: Type) { get :: (self: *Self) -> T; }
|
|
IntCell :: struct { v: i64; }
|
|
impl VL(i64) for IntCell { get :: (self: *IntCell) -> i64 => self.v; }
|
|
|
|
apply :: (mapper: Closure(i64, i64) -> i64, ..sources: VL) -> i64 {
|
|
return mapper(..sources.get); // (a, b) => a + b applied to (i0.get(), i1.get())
|
|
}
|
|
|
|
main :: () -> i32 {
|
|
print("{}\n", apply((a, b) => a + b, IntCell.{ v = 40 }, IntCell.{ v = 2 })); // 42
|
|
0
|
|
}
|