import * as C from "./Cause"; import { failure } from "./constructors"; import { map_ } from "./functor"; import { isFailure } from "./guards"; import type { Exit } from "./model"; /* * ------------------------------------------- * Bifunctor Exit * ------------------------------------------- */ export const first_ = (pab: Exit, f: (e: E) => G): Exit => isFailure(pab) ? failure(C.map_(pab.cause, f)) : pab; export const first = (f: (e: E) => G) => (pab: Exit): Exit => first_(pab, f); export const bimap_ = (pab: Exit, f: (e: E) => G, g: (a: A) => B): Exit => isFailure(pab) ? first_(pab, f) : map_(pab, g); export const bimap = (f: (e: E) => G, g: (a: A) => B) => (pab: Exit): Exit => bimap_(pab, f, g);