export type Result = { tag: "ok"; value: A } | { tag: "error"; error: E } export const Result = { ok(value: A): Result { return { tag: "ok", value } }, err(error: E): Result { return { tag: "error", error } }, map(result: Result, f: (x: A) => B): Result { switch (result.tag) { case "ok": return { tag: "ok", value: f(result.value) } case "error": return { tag: "error", error: result.error } } }, }