○
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 |> _
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 Configuration
MUST_RUN