import { Monad, FunctorFunc, ApplicativeFunc } from "./interfaces"; import { Maybe } from "./maybe"; import { Option } from "./option"; export declare abstract class Either implements Monad { abstract map(f: (a: R) => S): Either; abstract fmap(f: FunctorFunc): Either; abstract applies(f: ApplicativeFunc): (mb: Either) => Either; abstract mbind(f: Either>): Either; abstract bimap(lf: (l: L) => M, rf: (r: R) => S): Either; abstract cata(lf: (l: L) => V, rf: (r: R) => V): V; abstract flatten(): Either; abstract get(): R | never; abstract getOrElse(f: () => R): R; abstract getOrElseGet(right: R): R; abstract getOrThrow(err?: Error): R | never; abstract orElse(f: () => Either): Either; abstract toObject(): { left?: L; right?: R; }; isLeft(): boolean; isRight(): boolean; getLeft(): L | never; getRight(): R | never; toMaybe(): Maybe; toOption(): Option; equals(other: Either): boolean; toJSON(): { left?: L; right?: R; }; toString(): string; } export declare namespace Either { function left(left: L): Left; function right(right: R): Right; function nothing(): Left; function sequence(...eithers: Array>): Either; function traverse(f: (a: R) => Either): (as: R[]) => Either; function lift(partialFunction: (...args: any[]) => T): (...args: any[]) => Either; class Left extends Either { private left; constructor(left: L); map(f: (a: R) => S): Left; fmap(f: (a: R) => Either): Left; applies(f: (a: R) => (b: S) => Left): (mb: Either) => Left; mbind(f: Either Either>): Left; bimap(lf: (l: L) => M, rf: (r: R) => S): Left; cata(lf: (l: L) => V, rf: (r: R) => V): V; flatten(): Left; isLeft(): boolean; get(): never; getLeft(): L; getOrElse(f: () => R): R; getOrElseGet(right: R): R; getOrThrow(err?: Error): never; orElse(f: () => Either): Either; toObject(): { left?: L; right?: R; }; } class Right extends Either { private right; constructor(right: R); map(f: (a: R) => S): Right; fmap(f: FunctorFunc): Either; applies(f: ApplicativeFunc): (eb: Either) => Either; mbind(f: Either>): Either; bimap(lf: (l: L) => M, rf: (r: R) => S): Right; cata(lf: (l: L) => V, rf: (r: R) => V): V; flatten(): Either; isRight(): boolean; get(): R; getRight(): R; getOrElse(f: () => R): R; getOrElseGet(right: R): R; getOrThrow(): R; orElse(f: () => Either): Either; toMaybe(): Maybe; toOption(): Option; toObject(): { left?: L; right?: R; }; } }