001 concrete source concrete branch

○ Planned This feature is planned but not yet implemented.

Feature: Tap fusion with concrete source and concrete branch

Code

// Test 180: Concrete Source + Concrete Branch (VALID)
//
// Pattern: ~input:compute -> * | result r |>
//
// This is VALID because:
// - Source is concrete (input:compute) - we know exactly which event
// - Branch is concrete (result) - we know compute has .result branch
// - Type safe: We can verify at compile time that compute.result exists

const std = @import("std");

~import "$app/test_lib/logger"

~event compute { x: i32 }
| result { value: i32 }

~proc compute {
    std.debug.print("compute({d})\n", .{x});
    return .{ .result = .{ .value = x * 2 } };
}

~compute(x: 42)
| result |> _
input.kz

Expected Output

compute(42)
[TAP] Concrete source + concrete branch: compute.result

Imported Files

// Logger with concrete source + concrete branch tap

const std = @import("std");

~pub event log { event_name: []const u8 }
| done {}

~proc log {
    std.debug.print("[TAP] Concrete source + concrete branch: {s}\n", .{event_name});
    return .{ .done = .{} };
}

// VALID: Concrete source (input:compute) + concrete branch (result)
// Type safe - we know input:compute has .result branch
~input:compute -> *
| result |> log(event_name: "compute.result")
    | done |> _
test_lib/logger.kz

Test Configuration

MUST_RUN