// --- Core Result type --- export type Result = | { readonly ok: true; readonly value: T } | { readonly ok: false; readonly error: E }; // --- Constructors (runtime, but tiny — these ship as JS) --- export function Ok(value: T): Result { return { ok: true, value }; } export function Err(error: E): Result { return { ok: false, error }; } // --- Type guards --- export function isOk(result: Result): result is { ok: true; value: T } { return result.ok === true; } export function isErr(result: Result): result is { ok: false; error: E } { return result.ok === false; } // --- Unwrap (throws if Err — escape hatch) --- export function unwrap(result: Result): T { if (result.ok) return result.value; throw result.error instanceof Error ? result.error : new Error(String(result.error)); } // --- Infer helpers --- export type InferOk = R extends Result ? T : never; export type InferErr = R extends Result ? E : never; // --- Async Result --- export type AsyncResult = Promise>;