export type Result = { ok: true; value: T } | { ok: false; error: E }; export type ValueOf = R extends { ok: true; value: infer T } ? T : never; export type ErrorOf = R extends { ok: false; error: infer E } ? E : never; export function ok(value: T): { ok: true; value: T } { return { ok: true, value }; } export function err(error: E): { ok: false; error: E } { return { ok: false, error }; }