import { Option } from '../option/option'; /** * A Try represents a computation that may or may not have succeeded. * * :TODO: Narrow self-type in `getOrElse` and `orElse` interfaces. */ interface Try { isFailure: boolean; isSuccess: boolean; equals(other: Try): boolean; filter(predicate: (value: A) => boolean): Try; flatMap(f: (value: A) => Try): Try; foreach(run: (value: A) => void): void; get(): A; getOrElse(defaultValue: () => B): B; map(f: (value: A) => B): Try; match(matcher: { Success: (a: A) => B; Failure: (e: Error) => B; }): B; orElse(alternative: () => Try): Try; recover(fn: (error: Error) => A): Try; recoverWith(fn: (error: Error) => Try): Try; toOption(): Option; } declare function Try(fn: () => A): Try; declare namespace Try { function flatten(tries: Array>): Array; } export { Try };