import type { Kind, InvariantParam, CovariantParam } from '../../kinds/index.js'; import * as tFunctor from '../../typeclass/functor'; import * as tbifunctor from '../../typeclass/bifunctor'; import * as tOf from '../../typeclass/of'; import * as tTo from '../../typeclass/to'; import * as tFlip from '../../typeclass/flip'; import * as tApplicative from '../../typeclass/applicative'; import * as tMonad from '../../typeclass/monad'; import * as tBiFlatMap from '../../typeclass/biflatmap'; import * as tFoldable from '../../typeclass/foldable'; import * as tTraversable from '../../typeclass/traversable'; import * as tSemiAlternative from '../../typeclass/semialternative'; import * as tSemiAlign from '../../typeclass/semialign'; import * as O from '../option'; import { Result, Err, Ok } from './result.types'; export declare const err: (e: E) => Result; export declare const ok: (a: A) => Result; export declare const isErr: (result: Result) => result is Err; export declare const isOk: (result: Result) => result is Ok; export interface TResult extends Kind<[InvariantParam, CovariantParam]> { return: Result; } export declare const Of: tOf.Of; export declare const To: tTo.To; export declare const OptionalTo: tTo.OptionalTo; export declare const Flip: tFlip.Flip; export declare const Bifunctor: tbifunctor.BiFunctor; export declare const BiFlatMap: tBiFlatMap.BiFlatMap; export declare const Functor: tFunctor.Functor; export declare const SemiAlternative: tSemiAlternative.SemiAlternative; export declare const Foldable: tFoldable.Foldable; export declare const Applicative: tApplicative.Applicative; export declare const Monad: tMonad.Monad; export declare const Traversable: tTraversable.Traversable; export declare const SemiAlign: tSemiAlign.SemiAlign; export declare const match: (onOk: (a: A) => B, onErr: (e: E) => C) => (result: Result) => B | C; /** * of :: `a -> Result` * * of :: `(a: A) => Result` * * @param a any value * @returns `Result` * * @example * ```ts * pipe(1, of) // ok(1) * ``` */ export declare const of: (a: A) => Result; /** * getOrElse :: `(e -> b) -> Result -> a | b` * * getOrElse :: `(f: (e: E) => B) => (fa: Result) => A | B` * * @param f `e -> b` * @returns `Result -> a | b` * * @example * ```ts * pipe(ok(0), getOrElse(() => 1)) // 0 * pipe(err("error"), getOrElse(() => 1)) // 1 * ``` */ export declare const getOrElse: (f: (args_0: A2) => A1) => (fa: Result) => A1 | A; /** * getOr :: `b -> Result -> a | b` * * getOr :: `(b: B) => (fa: Result) => A | B` * * @param b `b` * @returns `Result -> a | b` * * @example * ```ts * pipe(ok(0), getOr(1)) // 0 * pipe(err("error"), getOr(1)) // 1 * ``` */ export declare const getOr: (args_0: A1) => (args_0: Result) => A1 | B1; /** * flip :: `Result -> Result` * * @param fa `Result` * @returns `Result` * * @example * ```ts * pipe(ok(0), flip) // err(0) * pipe(err("error"), flip) // ok("error") * ``` */ export declare const flip: (args_0: Result) => Result; /** * get :: `Result -> Option` * * get :: `(fa: Result) => Option` * * @param fa `Result` * @returns `Option` * * @example * ```ts * pipe(ok(0), get) // some(0) * pipe(err("error"), get) // none * ``` */ export declare const get: (args_0: Result) => O.Option; /** * alias of {@link get} * * toOption :: `Result -> Option` * * toOption :: `(fa: Result) => Option` * * @param fa `Result` * @returns `Option` * * @example * ```ts * pipe(ok(0), toOption) // some(0) * pipe(err("error"), toOption) // none * ``` */ export declare const toOption: (args_0: Result) => O.Option; /** * fromOption :: `(() -> e ) -> Option -> Result` * * fromOption :: `(onErr: () => E) => (option: O.Option): Result` * * @param onErr A function that returns an error of type `E`. * @returns A function that takes an `Option` and returns a `Result`. * * @example * ```ts * pipe(some(0), fromOption(() => "error")) // ok(0) * pipe(none(), fromOption(() => "error")) // err("error") * ``` */ export declare const fromOption: (onErr: () => E) => (option: O.Option) => Result; /** * fromNullable :: `(() -> e) -> a | null | undefined -> Result` * * fromNullable :: `(onErr: () => E) => (a: A | null | undefined) => Result` * * @param onErr A function that returns an error of type `E`. * @returns A function that takes a value of type `A | null | undefined` and returns a `Result`. * * @example * ```ts * pipe(0, fromNullable(() => "error")) // ok(0) * pipe(null, fromNullable(() => "error")) // err("error") * pipe(undefined, fromNullable(() => "error")) // err("error") * ``` */ export declare const fromNullable: (onErr: () => E) => (a: A | null | undefined) => Result; /** * fromPredicate :: `(a -> boolean) (a -> e) -> a -> Result` * * fromPredicate :: `(predicate: (a: A) => boolean, onErr: (a: A) => E) => (a: A) => Result` * * @param predicate A function that takes a value of type `A` and returns a boolean. * @param onErr A function that takes a value of type `A` and returns an error of type `E`. * @returns A function that takes a value of type `A` and returns a `Result`. * * @example * ```ts * pipe(0, fromPredicate(x => x === 0, () => "error")) // ok(0) * pipe(1, fromPredicate(x => x === 0, () => "error")) // err("error") * ``` */ export declare const fromPredicate: (predicate: (a: A) => boolean, onErr: (a: A) => E) => (a: A) => Result; /** * orElse :: `(e1 -> Result) -> Result -> Result` * * orElse :: `(f: (e: E1) => Result) => (fa: Result) => Result` * * @param f `e1 -> Result` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), orElse(() => ok(1))) // ok(0) * pipe(err("error"), orElse(() => ok(1))) // ok(1) * pipe(err("error"), orElse((e) => err(`${e}!`))) // err("error!") * ``` */ export declare const orElse: (args_0: (args_0: A1) => Result) => (args_0: Result) => Result; /** * less strict version of {@link orElse} * * orElseW :: `(e1 -> Result) -> Result -> Result` * * @param f `(e1 -> Result)` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), orElseW(() => ok(1))) // ok(0) * pipe(ok(0), orElseW(() => ok("hello"))) // ok(0) * pipe(err("error"), orElseW(() => ok(1))) // ok(1) * pipe(err("error"), orElseW(() => err("error!"))) // err("error!") * ``` */ export declare const orElseW: (f: (e: E1) => Result) => (fa: Result) => Result; /** * Alternative version of orElse * * orElseAlt :: `(() -> Result) -> Result -> Result` * * orElseAlt :: `(fb: () => Result) => (fa: Result) => Result` * * @param fb `() -> Result` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), orElseAlt(() => ok(1))) // ok(0) * pipe(err("error"), orElseAlt(() => ok(1))) // ok(1) * pipe(err("error"), orElseAlt(() => err("error!"))) // err("error!") * ``` */ export declare const orElseAlt: (args_0: () => Result) => (args_0: Result) => Result; /** * or :: `Result -> Result -> Result` * * or :: `(fb: Result) => (fa: Result) => Result` * * @param fb `Result` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), or(ok(1))) // ok(0) * pipe(err("error"), or(ok(1))) // ok(1) * pipe(err("error"), or(err("error!"))) // err("error!") * ``` */ export declare const or: (args_0: Result) => (args_0: Result) => Result; /** * map :: `(a -> b) -> Result -> Result` * * map :: `(f: (a: A) => B) => (fa: Result) => Result` * * @param f `a -> b` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), map(x => x + 1)) // ok(1) * pipe(err("error"), map(x => x + 1)) // err("error") * ``` */ export declare const map: (args_0: (args_0: A1) => A2) => (args_0: Result) => Result; /** * reduce :: `(b a -> b) b -> Result -> b` * * reduce :: `(f: (b: B, a: A) => B, b: B) => (fa: Result) => B` * * @param f `(b a -> b) b` * @param b `b` * @returns `Result -> b` * * @example * ```ts * pipe(ok(0), reduce((b, a) => b + a, 0)) // 0 * pipe(err("error"), reduce((b, a) => b + a, 0)) // 0 * ``` */ export declare const reduce: (args_0: (args_0: A1, args_1: A2) => A1, args_1: A1) => (args_0: Result) => A1; /** * flap :: `a -> Result<(a -> b), e> -> Result` * * flap :: `(a: A) => (fab: Result<(a: A) => B, E>) => Result` * * @param a `a` * @returns `Result<(a -> b), e> -> Result` * * @example * ```ts * pipe(ok(x => x + 1), flap(0)) // ok(1) * pipe(err("error"), flap(0)) // err("error") * ``` */ export declare const flap: (args_0: A1) => (args_0: Result<(args_0: A1) => B1, B2>) => Result; /** * as :: `b -> Result -> Result` * * as :: `(b: B) => (fa: Result) => Result` * * @param b `b` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), as(1)) // ok(1) * pipe(err("error"), as(1)) // err("error") * ``` */ export declare const as: (args_0: A1) => (args_0: Result) => Result; /** * tap :: `(a -> void) -> Result -> Result` * * tap :: `(f: (a: A) => void) => (fa: Result) => Result` * * @param f `(a -> void)` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), tap(x => console.log(x))) // ok(0) * pipe(err("error"), tap(x => console.log(x))) // err("error") * ``` */ export declare const tap: (args_0: (args_0: A1) => void) => (args_0: Result) => Result; /** * doubleMap :: `(a -> b) -> Result, e2> -> Result, e2>` * * doubleMap :: `(f: (a: A) => B) => (fa: Result, E2>) => Result, E2>` * * @param f `a -> b` * @returns `Result, e2> -> Result, e2>` * * @example * ```ts * pipe(ok(ok(0)), doubleMap(x => x + 1)) // ok(ok(1)) * pipe(err("error"), doubleMap(x => x + 1)) // err("error") * ``` */ export declare const doubleMap: (args_0: (args_0: A1) => A2) => (args_0: Result, B2>) => Result, B2>; /** * bimap :: `(a -> b) (e1 -> e2) -> Result -> Result` * * bimap :: `(f: (a: A) => B, g: (e: E1) => E2) => (fa: Result) => Result` * * @param f `a -> b` * @param g `e1 -> e2` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), bimap(x => x + 1, x => x + "!")) // ok(1) * pipe(err("error"), bimap(x => x + 1, x => x + "!")) // err("error!") * ``` */ export declare const bimap: (args_0: (args_0: A1) => A2, args_1: (args_0: A3) => A4) => (args_0: Result) => Result; export declare const bitap: (args_0: (args_0: A1) => void, args_1: (args_0: A2) => void) => (args_0: Result) => Result; export declare const mapLeft: (args_0: (args_0: A1) => A2) => (args_0: Result) => Result; export declare const mapRight: (args_0: (args_0: A1) => A2) => (args_0: Result) => Result; export declare const tapLeft: (args_0: (args_0: A1) => void) => (args_0: Result) => Result; export declare const tapRight: (args_0: (args_0: A1) => void) => (args_0: Result) => Result; export declare const tapErr: (args_0: (args_0: A1) => void) => (args_0: Result) => Result; /** * mapErr :: `(e1 -> e2) -> Result -> Result` * * mapErr :: `(f: (e: E1) => E2) => (fa: Result) => Result` * * @param f `e1 -> e2` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), mapErr(x => x + "!")) // ok(0) * pipe(err("error"), mapErr(x => x + "!")) // err("error!") */ export declare const mapErr: (args_0: (args_0: A1) => A2) => (args_0: Result) => Result; /** * ap :: `Result -> Result<(a -> b), e2> -> Result` * * ap :: `(fa: Result) => (fab: Result<(a: A) => B, E2>) => Result` * * @param fa `Result` * @returns fab: `Result<(a -> b), e2> -> Result` * * @example * ```ts * pipe(of(x => x + 1), ap(ok(0))) // ok(1) * pipe(err("error"), ap(ok(0))) // err("error") * pipe(of(x => x + 1), ap(err("error"))) // err("error") * ``` */ export declare const ap: (args_0: Result) => (args_0: Result<(args_0: A1) => B1, B2>) => Result; export declare const liftA2: (args_0: (args_0: A1, args_1: A2) => A3) => (args_0: Result) => (args_0: Result) => Result; export declare const product: (args_0: Result) => (args_0: Result) => Result<[A1, B1], A2 | B2>; export declare const productMany: (args_0: Result) => (args_0: Result[]) => Result; /** * flatMap :: `(a -> Result) -> Result -> Result` * * flatMap :: `(f: (a: A) => Result) => (fa: Result) => Result` * * @param f `a -> Result` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(5), flatMap(x => ok(x + 1))) // ok(6) * pipe(err("error"), flatMap(x => ok(x + 1))) // err("error") * pipe(ok(5), flatMap(x => err("error"))) // err("error") * ``` */ export declare const flatMap: (args_0: (args_0: A1) => Result) => (args_0: Result) => Result; /** * alias for {@link flatMap} */ export declare const andThen: (args_0: (args_0: A1) => Result) => (args_0: Result) => Result; /** * alias of {@link flatMap} */ export declare const chain: (args_0: (args_0: A1) => Result) => (args_0: Result) => Result; /** * flatten :: `Result, e2> -> Result` * * flatten :: `(ffa: Result, E2>) => Result` * * @param ffa `Result, e2>` * @returns `Result` * * @example * ```ts * pipe(ok(ok(0)), flatten) // ok(0) * pipe(ok(err("error")), flatten) // err("error") * pipe(err("error"), flatten) // err("error") * ``` */ export declare const flatten: (args_0: Result, A3>) => Result; /** * biFlapMap :: `(a -> Result) (e1 -> Result) -> Result -> Result` * * biFlapMap :: `(f: (a: A) => Result, g: (e: E1) => Result) => (fa: Result) => Result` * * @param f `a -> Result` * @param g `e1 -> Result` * @returns `Result -> Result` * * @example * ```ts * pipe(ok(0), biFlapMap(x => ok(x + 1), x => err("error"))) // ok(1) * pipe(err("error"), biFlapMap(x => ok(x + 1), x => err("error!"))) // err("error!") * ``` */ export declare const biFlatMap: (args_0: (args_0: A1) => Result, args_1: (args_0: A4) => Result) => (args_0: Result) => Result; /** * traverse :: `Applicative f => (a -> f b) -> Result -> f Result` * * traverse :: `(applicative: Applicative) => (f: (a: A) => $) => (fa: Result) => $]> * * @param applicative `Applicative` * @returns `(a -> f b) -> Result -> f Result` * * @example * ```ts * const traverseOption = traverse(O.Applicative); * pipe(ok(0), traverseOption(x => some(x + 1))) // some(ok(1)) * pipe(err("error"), traverseOption(x => some(x + 1))) // some(err("error")) * pipe(ok(0), traverseOption(x => none)) // none * ``` */ export declare const traverse: (F: tApplicative.Applicative) => tTraversable.Traversable.$traverse; /** * sequence :: `Applicative f => Result -> f Result` * * sequence :: `(applicative: Applicative) => (fa: Result<$, E>) => $]> * * @param applicative `Applicative` * @returns `Result -> f Result` * * @example * ```ts * const sequenceOption = sequence(O.Applicative); * pipe(ok(some(0)), sequenceOption) // some(ok(0)) * pipe(ok(none), sequenceOption) // none * pipe(err("error"), sequenceOption) // some(err("error")) * ``` */ export declare const sequence: (F: tApplicative.Applicative) => tTraversable.Traversable.$sequence; export declare const pluck: (k: K) => (args_0: Result) => Result; export declare const zipWith: (args_0: (args_0: A1, args_1: A2) => A3) => (args_0: Result) => (args_0: Result) => Result; export declare const zip: (args_0: Result) => (args_0: Result) => Result<[A1, B1], A2 | B2>;