export type Result = | Readonly<{ isSuccess: true; data: T }> | Readonly<{ isSuccess: false; error: E }>; export const Result = { ok(data: T): Result { return Object.freeze({ isSuccess: true, data }); }, fail(error: E): Result { return Object.freeze({ isSuccess: false, error }); }, }; export class Maybe { private constructor(private readonly value: T | undefined) {} static some(value: T): Maybe { return new Maybe(value); } static none(): Maybe { return new Maybe(undefined); } getOrUndefined(): T | undefined { return this.value; } }