import { Enum, constructors, match } from "./adt"; export type Result = Enum<{ Ok: V, Err: E }> export const Result = constructors>() export const mapResult = (res: Result, fn: (_: A) => B): Result => chainResult(res, a => Result.Ok(fn(a))) export const chainResult = (res: Result, fn: (_: A) => Result): Result => match(res, { Ok: a => fn(a), Err: e => Result.Err(e), });