070 for with binding

✓ Passing This code compiles and runs correctly.

Code

// Test: for loop using continuation binding
// When we have | result data |> for(data), the binding must be captured
//
// BUG: Currently generates:
//   .result => |_| { for (data) ... }  // data is undefined!
//
// EXPECTED:
//   .result => |data| { for (data) ... }  // data is captured

~import "$std/control"

const std = @import("std");

// Event that returns an array OR fails (multiple branches = switch needed)
const my_items = [_]i32{ 1, 2, 3 };

~event get_items {}
| items *const [3]i32
| failed []const u8

~proc get_items {
    return .{ .items = &my_items };
}

// Process each item
var sum: i32 = 0;

~event add_item { value: i32 }
| done {}

~proc add_item {
    sum += value;
    std.debug.print("Added {}, sum = {}\n", .{value, sum});
    return .{ .done = .{} };
}

// Show result
~event show_sum {}
| done {}

~proc show_sum {
    std.debug.print("Final sum: {}\n", .{sum});
    return .{ .done = .{} };
}

// Main flow: the binding 'arr' must be captured in the switch arm
~get_items()
| items arr |> for(arr)
    | each x |> add_item(value: x)
        | done |> _
    | done |> show_sum()
        | done |> _
| failed _ |> _
input.kz

Expected Output

Added 1, sum = 1
Added 2, sum = 3
Added 3, sum = 6
Final sum: 6

Test Configuration

MUST_RUN