Files
sx/examples/0617-comptime-reify-recvresult.sx
agra 6627f7348b xfail(reify): RecvResult/TryResult channel result types over reify
REIFY Phase 3.0. Add examples/0617 using RecvResult(i64) / TryResult(i64)
(construct + match, plus payload-less .closed / .empty). Seed an empty
expected/*.exit marker. RED by design — the type-fns aren't defined yet
("unresolved RecvResult"); Phase 3.1 adds them to meta.sx as type-fns
over reify and turns this green.
2026-06-16 19:10:34 +03:00

38 lines
1.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// REIFY Phase 3: RecvResult($T) / TryResult($T) — the channel result types,
// built ENTIRELY in sx library code as type-fns over `reify` (no new compiler
// machinery beyond Phases 01). A blocking recv yields a value or a `closed`
// marker; a non-blocking try-recv adds `empty` — three states a bool can't
// express. This locks that they construct and match like any enum, and that
// `RecvResult(i64)` is one nominal type across sites (the type-fn identity path).
#import "modules/std.sx";
#import "modules/std/meta.sx";
main :: () -> i32 {
r := RecvResult(i64).value(42);
if r == {
case .value: (v) { print("recv value {}\n", v); }
case .closed: { print("recv closed\n"); }
}
rc : RecvResult(i64) = .closed;
if rc == {
case .value: (v) { print("recv value {}\n", v); }
case .closed: { print("recv closed\n"); }
}
t := TryResult(i64).value(7);
if t == {
case .value: (v) { print("try value {}\n", v); }
case .empty: { print("try empty\n"); }
case .closed: { print("try closed\n"); }
}
te : TryResult(i64) = .empty;
if te == {
case .value: (v) { print("try value {}\n", v); }
case .empty: { print("try empty\n"); }
case .closed: { print("try closed\n"); }
}
return 0;
}