diff options
| author | amankumarsingh77 <amankumarsingh7702@gmal.com> | 2026-05-02 15:31:01 +0530 |
|---|---|---|
| committer | amankumarsingh77 <amankumarsingh7702@gmal.com> | 2026-05-02 15:31:01 +0530 |
| commit | 310d0a7324477079022b178f1a83161e9e61fb1d (patch) | |
| tree | 69e7bbad57cdffe8e8e174fbd6b84fa88388a7fe /src/util/result.ts | |
| parent | 6759b6fd0ab435aa1e9fdb4591bd828b7a861a33 (diff) | |
feat(util): add result, time, and paths primitives for v0.3 rewrite
Diffstat (limited to 'src/util/result.ts')
| -rw-r--r-- | src/util/result.ts | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/util/result.ts b/src/util/result.ts new file mode 100644 index 0000000..ca57c2a --- /dev/null +++ b/src/util/result.ts @@ -0,0 +1,15 @@ +export type Result<T, E> = + | { readonly success: true; readonly data: T } + | { readonly success: false; readonly error: E }; + +export const ok = <T>(data: T): Result<T, never> => ({ success: true, data }); +export const err = <E>(error: E): Result<never, E> => ({ success: false, error }); + +export const map = <T, U, E>(r: Result<T, E>, f: (t: T) => U): Result<U, E> => + r.success ? ok(f(r.data)) : r; + +export const andThen = <T, U, E>(r: Result<T, E>, f: (t: T) => Result<U, E>): Result<U, E> => + r.success ? f(r.data) : r; + +export const mapErr = <T, E, F>(r: Result<T, E>, f: (e: E) => F): Result<T, F> => + r.success ? r : err(f(r.error)); |
