export type Result = { ok: true; value: T } | { ok: false; error: E }; export const ok = (value: T): Result => ({ ok: true, value }); export const err = (error: E): Result => ({ ok: false, error }); export function isOk(r: Result): r is { ok: true; value: T } { return r.ok; } export function isErr(r: Result): r is { ok: false; error: E } { return !r.ok; } export function unwrap(r: Result): T { if (r.ok) return r.value; throw r.error instanceof Error ? r.error : new Error(String(r.error)); } export function map(r: Result, fn: (v: T) => U): Result { return r.ok ? ok(fn(r.value)) : r; } export async function tryAsync(fn: () => Promise): Promise> { try { return ok(await fn()); } catch (e) { return err(e instanceof Error ? e : new Error(String(e))); } }