002 concrete source metatype

○ Planned This feature is planned but not yet implemented.

Feature: Tap fusion with concrete source and metatype branch

Code

// Test 181: Concrete Source + Metatype (VALID)
//
// Pattern: ~input:compute -> * | Transition t |>
//
// This is VALID because:
// - Source is concrete (input:compute) - we know exactly which event
// - Branch is metatype (Transition) - works on any branch
// - Metatypes provide metadata about transitions without requiring specific branch types

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 } };
}

~event format { value: i32 }
| formatted { text: []const u8 }

~proc format {
    std.debug.print("format({d})\n", .{value});
    return .{ .formatted = .{ .text = "formatted" } };
}

~compute(x: 42)
| result r |> format(value: r.value)
    | formatted |> _
input.kz

Expected Output

compute(42)
[TAP] Transition: compute -> format (branch: result)
format(84)

Imported Files

// Logger with concrete source + metatype tap

const std = @import("std");

~pub event log { source: []const u8, dest: []const u8, branch: []const u8 }
| done {}

~proc log {
    std.debug.print("[TAP] Transition: {s} -> {s} (branch: {s})\n", .{source, dest, branch});
    return .{ .done = .{} };
}

// VALID: Concrete source (input:compute) + metatype (Transition)
// Metatypes work on any branch - they provide metadata about the transition
~input:compute -> *
| Transition t |> log(source: "compute", dest: T.destination, branch: @tagName(t.branch))
| done |> _
test_lib/logger.kz

Test Configuration

MUST_RUN