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), })