diff options
Diffstat (limited to '')
| -rw-r--r-- | src/utils/result.ts | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/utils/result.ts b/src/utils/result.ts new file mode 100644 index 0000000..c0120b8 --- /dev/null +++ b/src/utils/result.ts @@ -0,0 +1,14 @@ +import { Enum, constructors, match } from "./adt"; + +export type Result<V, E> = Enum<{ Ok: V, Err: E }> +export const Result = constructors<Result<any, any>>() + +export const mapResult = <A, B, E>(res: Result<A, E>, fn: (_: A) => B): Result<B, E> => + chainResult(res, a => Result.Ok(fn(a))) + +export const chainResult = <A, B, E>(res: Result<A, E>, fn: (_: A) => Result<B, E>): Result<B, E> => + match(res, { + Ok: a => fn(a), + Err: e => Result.Err(e), + }); + |
