import { Option } from "../option/option"; export declare const EitherType: { Left: symbol; Right: symbol; }; export interface Match { left: (val: L) => U; right: (val: R) => U; } export interface Either { type: symbol; isLeft(): boolean; isRight(): boolean; left(): Option; leftAndThen(fn: (val: L) => Either): Either; right(): Option; rightAndThen(fn: (val: R) => Either): Either; unwrap(): L | R; unwrapLeft(): L | never; unwrapLeftOr(other: L): L; unwrapLeftOrElse(fn: (right: R) => L): L; unwrapRight(): R | never; unwrapRightOr(other: R): R; unwrapRightOrElse(fn: (left: L) => R): R; match(fn: Match): U; map(fn: (val: L | R) => U): Either; mapLeft(fn: (left: L) => U): Either; mapRight(fn: (right: R) => U): Either; } export interface ResLeft extends Either { unwrap(): L; unwrapLeft(): L; unwrapRight(): never; match(fn: Match): U; map(fn: (val: L | R) => U): ResLeft; mapLeft(fn: (left: L) => U): Either; mapRight(fn: (right: R) => U): ResLeft; } export interface ResRight extends Either { unwrap(): R; unwrapLeft(): never; unwrapRight(): R; match(fn: Match): U; map(fn: (val: L | R) => U): ResRight; mapLeft(fn: (left: L) => U): Either; mapRight(fn: (right: R) => U): ResRight; } export declare function Left(val: L): ResLeft; export declare function Right(val: R): ResRight; export declare function isLeft(val: Either): val is ResLeft; export declare function isRight(val: Either): val is ResRight; //# sourceMappingURL=either.d.ts.map