export type Result = | { readonly success: true; readonly data: T } | { readonly success: false; readonly error: E }; export const ok = (data: T): Result => ({ success: true, data }); export const err = (error: E): Result => ({ success: false, error }); export const map = (r: Result, f: (t: T) => U): Result => r.success ? ok(f(r.data)) : r; export const andThen = (r: Result, f: (t: T) => Result): Result => r.success ? f(r.data) : r; export const mapErr = (r: Result, f: (e: E) => F): Result => r.success ? r : err(f(r.error));