export type Result = | { ok: true; value: T; } | { ok: false; error: E; }; export const ok = (value: T): Result => { return { ok: true, value }; }; export const err = (error: E): Result => { return { ok: false, error }; }; export const expect = (v: Result, msg: string = 'expected result to not be error:') => { if (v.ok) { return v.value; } throw `${msg} ${v.error}`; }; export const map = (v: Result, fn: (value: T) => U): Result => { if (v.ok) { return ok(fn(v.value)); } return err(v.error); };