✓
Passing Passing: the compiler rejects this program as expected.
Code
// PINS: a REQUIRED param that nothing can fill is a HARD KORU error, never a
// silent void-fill and never a Zig leak. `render-at` requires `text`; the only
// binding in scope is `count` (i64), and the thread `tick` produces is an i64
// too. No name matches, no type matches — so the refusal must be a koru
// sentence naming the parameter and its type (KORU092), at the boundary.
//
// The two implicit fills both have to miss for this to be the pin it is: the
// bind-pun misses because nothing is NAMED `text`, and the point-free thread
// misses because nothing in `render-at` is TYPED i64 once `x` is written.
const std = @import("std");
~tor tick {} -> i64
~proc tick|zig { return 1; }
~tor render-at { x: i64, text: string }
~proc render-at|zig { std.debug.print("{d}:{s}\n", .{ x, text }); }
~tick(): count |> render-at(x: 5)
Actual compiler output
error[KORU092]: nothing in 'render-at' accepts a i64 — its parameter 'text' is a string
--> tests/regression/200_COMPILER_FEATURES/210_PARSER/210_155_pun_required_no_match/input.kz:18:0
|
18 | ~tick(): count |> render-at(x: 5)
| ^
hint: a `|>` step takes the previous stage's `-> T` by TYPE into an unfilled parameter. Give 'render-at' a i64 parameter, or write 'text' explicitly and end the thread there.Must fail at frontend compile:
Parsing or type-checking must reject the program.
Error output must contain
KORU092Flows
flow ~tick click a branch to expand · @labels scroll to their anchor
tick
Test Configuration
MUST_ERROR