// Result type - a discriminated union for handling success/error cases export type Result = | { ok: true; value: T } | { ok: false; error: E }; // Constructors export const Ok = (value: T): Result => ({ ok: true, value }); export const Err = (error: E): Result => ({ ok: false, error }); // The success value type of a Result. Lets callers infer an action's payload // type from its return (`OkValue>>`) instead // of the action exporting a dedicated type. export type OkValue = R extends { ok: true; value: infer T } ? T : never;