import * as tfunctor from '../../typeclass/functor'; import * as tOf from '../../typeclass/of'; import * as tTo from '../../typeclass/to'; import * as tNone from '../../typeclass/none'; import * as tApplicative from '../../typeclass/applicative'; import * as tMonad from '../../typeclass/monad'; import * as tFoldable from '../../typeclass/foldable'; import * as tFilterable from '../../typeclass/filterable'; import * as tSemiAlternative from '../../typeclass/semialternative'; import * as tAlternative from '../../typeclass/alternative'; import * as tSemiAlign from '../../typeclass/semialign'; import type { Option, TOption } from './option.types'; /** * produce none Option of type a * * none :: `() -> Option` * * none :: `<...>() => none` * * @returns `Option` * * @example * ```ts * pipe(none(), map(x => x + 1)) // none * ``` */ export declare const none: () => Option; /** * produce some Option of type a * * some :: `a -> Option` * * some :: `(a: A) => Option` * * @param a any value * @returns `Option` * * @example * ```ts * pipe(some(1), map(x => x + 1)) // some(2) * ``` */ export declare const some: (a: A) => Option; /** * isNone :: `Option -> boolean` * * isNone :: `(option: Option) => option is None` * * @param option `Option` * @returns `boolean` * * @example * ```ts * pipe(some(1), isNone) // false * pipe(none, isNone) // true * ``` */ export declare const isNone: (option: Option) => option is Option.None; /** * isSome :: `Option -> boolean` * * isSome :: `(option: Option) => option is Some` * * @param option `Option` * @returns `boolean` * * @example * ```ts * pipe(some(1), isSome) // true * pipe(none, isSome) // false * ``` */ export declare const isSome: (option: Option) => option is Option.Some; /** * fromNullable :: `a | null | undefined -> Option` * * fromNullable :: `(a: A | null | undefined) => Option` * * @param a `a | null | undefined` * @returns `Option` * * @example * ```ts * pipe(1, fromNullable) // some(1) * pipe(null, fromNullable) // none * pipe(undefined, fromNullable) // none * ``` */ export declare const fromNullable: (a: A | null | undefined) => Option; /** * fromPredicate :: `(a -> boolean) -> a -> Option` * * fromPredicate :: `(predicate: (a: A) => boolean) => (a: A) => Option` * * @param predicate `(a -> boolean)` * @returns `a -> Option` * * @example * ```ts * pipe(1, fromPredicate(x => x > 1)) // none * pipe(2, fromPredicate(x => x > 1)) // some(2) * ``` */ export declare const fromPredicate: (predicate: (a: A) => boolean) => (a: A) => Option; /** * fromIterable :: `Iterable -> Option` * * fromIterable :: `(iterable: Iterable) => Option` * * @param iterable `Iterable` * @returns `Option` * * @example * ```ts * pipe([1, 2, 3], fromIterable) // some(1) * pipe([], fromIterable) // none * ``` */ export declare const fromIterable: (iterable: Iterable) => Option; /** * toNullable :: `Option -> a | null` * * toNullable :: `(option: Option) => A | null` * * @param option `Option` * @returns `a | null` * * @example * ```ts * pipe(some(1), toNullable) // 1 * pipe(none, toNullable) // null * ``` */ export declare const toNullable: (option: Option) => A | null; /** * toUndefined :: `Option -> a | undefined` * * toUndefined :: `(option: Option) => A | undefined` * * @param option `Option` * @returns `a | undefined` * * @example * ```ts * pipe(some(1), toUndefined) // 1 * pipe(none, toUndefined) // undefined * ``` */ export declare const toUndefined: (option: Option) => A | undefined; export declare const None: tNone.None; export declare const Of: tOf.Of; export declare const To: tTo.To; export declare const Functor: tfunctor.Functor; export declare const SemiAlternative: tSemiAlternative.SemiAlternative; export declare const Foldable: tFoldable.Foldable; export declare const Filterable: tFilterable.Filterable; export declare const Applicative: tApplicative.Applicative; export declare const Alternative: tAlternative.Alternative; export declare const Monad: tMonad.Monad; export declare const SemiAlign: tSemiAlign.SemiAlign; export declare const match: (onSome: (a: A) => B, onNone: () => C) => (fa: Option) => B | C; /** * of :: `a -> Option` * * of :: `(a: A) => Option` * * @param a any value * @returns `Option` * * @example * ```ts * pipe(1, of) // some(1) * ``` */ export declare const of: (a: A) => Option; /** * getOrElse :: `() -> b -> Option -> a | b` * * getOrElse :: `(f: () => B) => (fa: Option) => A | B` * * @param f `() -> b` * @returns `Option -> a | b` * * @example * ```ts * pipe(some(1), getOrElse(() => 0)) // 1 * pipe(none, getOrElse(() => 0)) // 0 * ``` */ export declare const getOrElse: (f: () => A1) => (fa: Option) => A1 | A; /** * getOr :: `b -> Option -> a | b` * * getOr :: `(b: B) => (fa: Option) => A | B` * * @param b `b` * @returns `Option -> a | b` * * @example * ```ts * pipe(some(1), getOr(0)) // 1 * pipe(none, getOr(0)) // 0 * ``` */ export declare const getOr: (args_0: A1) => (args_0: Option) => A1 | B1; /** * orElse :: `(() -> Option) -> Option -> Option` * * orElse :: `(fb: () => Option) => (fa: Option) => Option` * * @param fb `() -> Option` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), orElse(() => some(2))) // some(1) * pipe(some(1), orElse(() => none)) // some(1) * pipe(none, orElse(() => some(2))) // some(2) * pipe(none, orElse(() => none)) // none * ``` */ export declare const orElse: (args_0: () => Option) => (args_0: Option) => Option; /** * or :: `Option -> Option -> Option` * * or :: `(fb: Option) => (fa: Option) => Option` * * @param fb `Option` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), or(some(2))) // some(1) * pipe(some(1), or(none)) // some(1) * pipe(none, or(some(2))) // some(2) * pipe(none, or(none)) // none * ``` */ export declare const or: (args_0: Option) => (args_0: Option) => Option; /** * map :: `(a -> b) -> Option -> Option` * * map :: `(f: (a: A) => B) => (fa: Option) => Option` * * @param f `a -> b` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), map(x => x + 1)) // some(2) * pipe(none, map(x => x + 1)) // none * ``` */ export declare const map: (args_0: (args_0: A1) => A2) => (args_0: Option) => Option; /** * flap :: `a -> Option<(a -> b)> -> Option` * * flap :: `(a: A) => (fab: Option<(a: A) => B>) => Option` * * @param a `a` * @returns `Option<(a -> b)> -> Option` * * @example * ```ts * pipe(some(x => x + 1), flap(0)) // some(1) * pipe(none, flap(0)) // none * ``` */ export declare const flap: (args_0: A1) => (args_0: Option<(args_0: A1) => B1>) => Option; /** * as :: `b -> Option -> Option` * * as :: `(b: B) => (fa: Option) => Option` * * @param b `b` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), as(0)) // some(0) * pipe(none, as(0)) // none * ``` */ export declare const as: (args_0: A1) => (args_0: Option) => Option; /** * tap :: `(a -> void) -> Option -> Option` * * tap :: `(f: (a: A) => void) => (fa: Option) => Option` * * @param f `(a -> void)` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), tap(console.log)) // some(1) * pipe(none, tap(console.log)) // none * ``` */ export declare const tap: (args_0: (args_0: A1) => void) => (args_0: Option) => Option; /** * doubleMap :: `(a -> b) -> Option> -> Option>` * * doubleMap :: `(f: (a: A) => B) => (fa: Option>) => Option>` * * @param f `a -> b` * @returns `Option> -> Option>` * * @example * ```ts * pipe(some(some(1)), doubleMap(x => x + 1)) // some(some(2)) * pipe(some(none), doubleMap(x => x + 1)) // some(none) * pipe(none, doubleMap(x => x + 1)) // none */ export declare const doubleMap: (args_0: (args_0: A1) => A2) => (args_0: Option>) => Option>; /** * ap :: `Option -> Option<(a -> b)> -> Option` * * ap :: `(fa: Option) => (fab: Option<(a: A) => B>) => Option` * * @param fa : Option * @returns fab: Option<(a -> b)> -> Option * * @example * ```ts * pipe(of(x => x + 1), ap(some(1))) // some(2) * pipe(of(x => x + 1), ap(none)) // none * pipe(none, ap(some(1))) // none * pipe(none, ap(none)) // none * ``` */ export declare const ap: (args_0: Option) => (args_0: Option<(args_0: A1) => B1>) => Option; /** * liftA2 :: `(a b -> c) -> Option -> Option -> Option` * * liftA2 :: `(f: (a: A, b: B) => C) => (fa: Option) => (fb: Option) => Option` * * @param f `(a b -> c)` * @returns `Option -> Option -> Option` * * @example * ```ts * pipe(liftA2((a, b) => a + b)(some(1))(some(2))) // some(3) * pipe(liftA2((a, b) => a + b)(some(1))(none())) // none() * pipe(liftA2((a, b) => a + b)(none())(some(2))) // none() * pipe(liftA2((a, b) => a + b)(none())(none())) // none() * ``` */ export declare const liftA2: (args_0: (args_0: A1, args_1: A2) => A3) => (args_0: Option) => (args_0: Option) => Option; export declare const product: (args_0: Option) => (args_0: Option) => Option<[A1, B1]>; export declare const productMany: (args_0: Option) => (args_0: Option[]) => Option; /** * flatMap :: `(a -> Option) -> Option -> Option` * * flatMap :: `(f: (a: A) => Option) => (fa: Option) => Option` * * @param f `a -> Option` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), flatMap(x => some(x + 1))) // some(2) * pipe(none, flatMap(x => some(x + 1))) // none * ``` */ export declare const flatMap: (args_0: (args_0: A1) => Option) => (args_0: Option) => Option; /** * alias for {@link flatMap} */ export declare const andThen: (args_0: (args_0: A1) => Option) => (args_0: Option) => Option; /** * alias for {@link flatMap} */ export declare const chain: (args_0: (args_0: A1) => Option) => (args_0: Option) => Option; /** * flatten :: `Option> -> Option` * * flatten :: `(ffa: Option>) => Option` * * @param ffa `Option>` * @returns `Option` * * @example * ```ts * pipe(some(some(1)), flatten) // some(1) * pipe(some(none), flatten) // none * pipe(none, flatten) // none * ``` */ export declare const flatten: (args_0: Option>) => Option; /** * reduce :: `(b a -> b) b -> Option -> b` * * reduce :: `(f: (b: B, a: A) => B, b: B) => (fa: Option) => B` * * @param f `(b a -> b) b` * @param b `b` * @returns `Option -> b` * * @example * ```ts * pipe(some(1), reduce((b, a) => b + a, 0)) // 1 * pipe(none, 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: Option) => A1; /** * filterMap :: `(a -> Option) -> Option -> Option` * * filterMap :: `(f: (a: A) => Option) => (fa: Option) => Option` * * @param f `(a -> Option)` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), filterMap(x => x > 1 ? some(x) : none)) // none * pipe(some(2), filterMap(x => x > 1 ? some(x) : none)) // some(2) * pipe(none, filterMap(x => x > 1 ? some(x) : none)) // none * ``` */ export declare const filterMap: (args_0: (args_0: A1) => Option) => (args_0: Option) => Option; /** * filter :: `(a -> boolean) -> Option -> Option` * * filter :: `(f: (a: A) => boolean) => (fa: Option) => Option` * * @param f `(a -> boolean)` * @returns `Option -> Option` * * @example * ```ts * pipe(some(1), filter(x => x > 1)) // none * pipe(some(2), filter(x => x > 1)) // some(2) * pipe(none, filter(x => x > 1)) // none * ``` */ export declare const filter: (args_0: (args_0: A1) => boolean) => (args_0: Option) => Option; export declare const compact: (args_0: Option>) => Option; export declare const pluck: (k: K) => (args_0: Option) => Option; export declare const zipWith: (args_0: (args_0: A1, args_1: A2) => A3) => (args_0: Option) => (args_0: Option) => Option; export declare const zip: (args_0: Option) => (args_0: Option) => Option<[A1, B1]>;