Files
sx/examples/packs/0542-packs-mapper-projection-spread.sx
agra 66bdc70bf1 test: group examples into per-category folders
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.
2026-06-21 14:41:34 +03:00

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
}