✓
Passing This code compiles and runs correctly.
Code
// The bind-into-void corner: `| ok v |> void-sink()` threads the payload
// into a tor that declares NO input. The refusal is right — the linear
// discipline binds-or-discards, and `v` is neither — and since the
// flow-checker fix the diagnostic names the real cause: "binding 'v' has
// nowhere to go — the continuation target 'void-sink' takes no input"
// (previously the generic KORU100 "unused binding", which hid why).
~import std/io
const std = @import("std");
~pub tor stage { }
| ok string
| err string
~proc stage|zig { return .{ .ok = "hi" }; }
~pub tor void-sink { }
~proc void-sink|zig { std.debug.print("sink\n", .{}); }
~stage()
| ok v |> void-sink()
| err e |> std/io:print.ln("err: {{ e:s }}")
Frontend must reject with:
CONTAINS KORU100
CONTAINS takes no inputFlows
flow ~stage click a branch to expand · @labels scroll to their anchor
stage