import { Either } from './Either'; import { Lazy } from './function'; import { Alternative1 } from './Functors/Alternative'; import { Chain1 } from './Functors/Chain'; import { Extend1 } from './Functors/Extend'; import { Monad1 } from './Functors/Monad'; import { PipeableTraverse1, Traversable1 } from './Functors/Traversable'; import { Predicate } from './Predicate'; import { Refinement } from './Refinement'; export interface None { readonly _tag: 'None'; } export interface Some { readonly _tag: 'Some'; readonly value: A; } export declare type Maybe = None | Some; export declare const MaybeKind: unique symbol; export declare type MaybeKind = typeof MaybeKind; declare module './Functors/HKT' { interface Kinded { readonly [MaybeKind]: Maybe; } } /** * Returns whether the maybe is `None` or not. * * @example * * ```ts * assert.deepStrictEqual(isNone(none), true) * assert.deepStrictEqual(isNone(some(1)), false) * ``` */ export declare const isNone: (ma: Maybe) => ma is None; /** * Returns whether the maybe is `Some` or not. * * @example * * ```ts * assert.deepStrictEqual(isSome(some(1)), true) * assert.deepStrictEqual(isSome(none), false) * ``` */ export declare const isSome: (ma: Maybe) => ma is Some; /** * `None` value. Represents a missing value. */ export declare const none: Maybe; /** * Constructs a `Some`. Represents an optional value that exists. */ export declare const some: (value: A) => Maybe; /** * Returns `Some` or `None` based on the given predicate. * * @example * * ```ts * const getMaybe = fromPredicate((n: number) => n > 0) * * assert.deepStrictEqual(getMaybe(-1), none) * assert.deepStrictEqual(getMaybe(1), some(1)) * ``` */ export declare function fromPredicate(Refinement: Refinement): (a: A) => Maybe; export declare function fromPredicate(predicate: Predicate): (b: B) => Maybe; export declare function fromPredicate(predicate: Predicate): (a: A) => Maybe; /** * Transforms the `Maybe` with a given function. Returns `None` if the `Maybe` is `None`. */ export declare const map: (f: (a: A) => B) => (fa: Maybe) => Maybe; /** * Takes a value and wraps it into a `Some`. */ export declare const of: (value: A) => Maybe; /** * Returns the `Maybe` if it is `Some`, otherwise returns the function result. */ export declare const alt: (that: Lazy>) => (ma: Maybe) => Maybe; /** * Applies a `Some` function over a `Some` value. Returns `None` if the `Maybe` or the function is `None`. */ export declare const ap: (ma: Maybe) => (fab: Maybe<(a: A) => B>) => Maybe; /** * Returns `None`. */ export declare const empty: () => None; /** * Alias of `empty`. */ export declare const zero: () => None; /** * Takes a predicate function and a `Maybe`, returns the `Maybe` if it's `Some` and the predicate returns true, otherwise returns `None`. * * @example * * ```ts * const f = flow( * filter((n: number) => n > 0) * ) * * assert.deepStrictEqual(f(some(1)), some(1)) * assert.deepStrictEqual(f(some(0)), none) * assert.deepStrictEqual(none, none) * ``` */ export declare const filter: (predicate: Predicate) => (ma: Maybe) => Maybe; /** * Returns the onNone default value if the `Maybe` is `None`, otherwise returns the onSome function result with `Maybe`. * * @example * * ```ts * const f = flow( * match(() => 0, (n: number) => n + 1) * ) * * assert.deepStrictEqual(f(some(1)), 2) * assert.deepStrictEqual(f(none), 1) * ``` */ export declare const match: (onNone: Lazy, onSome: (a: A) => C) => (ma: Maybe) => B | C; /** * Composes computations in sequence. Useful for chaining many computations that may result in a missing value. * * @example * * ```ts * const f = flow( * chain((n: number) => some(n + 1) * ) * * assert.deepStrictEqual(f(some(1)), some(2)) * assert.deepStrictEqual(f(none), none) * ``` */ export declare const chain: (f: (a: A) => Maybe) => (ma: Maybe) => Maybe; /** * Returns none if the `Maybe` is a `None`, otherwise returns the result of the applying function and wrapped in a `Some`. * * @example * * ```ts * assert.deepStrictEqual(pipe(some(1), extend(getOrElse(zero))), some(1)) * assert.deepStrictEqual(pipe(none, extend(getOrElse(zero))), none) * ``` */ export declare const extend: (f: (a: Maybe) => B) => (ma: Maybe) => Maybe; /** * Returns a `Right` from a `Some` or a `Left` with a default left value if `Maybe` is `None`. * * @example * * ```ts * const f = flow( * () => 0 * ) * * assert.deepStrictEqual(f(some(1)), right(1)) * assert.deepStrictEqual(f(none), left(0)) * ``` */ export declare const toEither: (f: Lazy) => (ma: Maybe) => Either; /** * Extracts the value out of `Maybe` if it exists, otherwise returns `null`. * * @example * * ```ts * const f = flow( * toNullable * ) * * assert.deepStrictEqual(f(some(1)), 1) * assert.deepStrictEqual(f(none), null) * ``` */ export declare const toNullable: (ma: Maybe) => A | null; /** * Extracts the value out of `Maybe` if it exists, otherwise returns `undefined`. * * @example * * ```ts * const f = flow( * toUndefined * ) * * assert.deepStrictEqual(f(some(1)), 1) * assert.deepStrictEqual(f(none), undefined) * ``` */ export declare const toUndefined: (ma: Maybe) => A | undefined; /** * Extracts the value of `Maybe` if it exists, otherwise returns then default onNone value. * * @example * * ```ts * const f = flow( * getOrElse(() => 0) * ) * * assert.deepStrictEqual(f(some(1)), 1) * assert.deepStrictEqual(f(none)), 0) * ``` */ export declare const getOrElse: (onNone: Lazy) => (ma: Maybe) => A | B; /** * Returns `Maybe` if it's a `Some`, otherwise returns onNone result. * * @example * const f = flow( * orElse(() => some(1)) * ) * * assert.deepStrictEqual(f(some(0)), some(0)) * assert.deepStrictEqual(f(none), some(1)) */ export declare const orElse: (onNone: Lazy>) => (ma: Maybe) => Maybe; /** * Returns a `Maybe` from a function that might throw. * * @example * * ```ts * const unsafeDiv = (top: number, bottom: number) => { * if(bottom === 0) throw new Error('unsafe division') * return top / bottom * } * const div = (top: number, bottom: number) => * tryCatch(() => unsafeDiv(top, bottom)) * * assert.deepStrictEqual(div(2, 0), none) * assert.deepStrictEqual(div(2, 1), some(2)) * ``` */ export declare const tryCatch: (f: Lazy) => Maybe; /** * Maps each element of a `HKT` structure to an action, and collects the results wrapped in `Some`. * * Returns a `HKT` contains a none if the `Maybe` is a `None`. * * @example * * ```ts * const f = traverse(Maybe.Monad)((n: number) => n > 0 ? some(n): none) * assert.deepStrictEqual(pipe(some(1), f), some(some(1))) * assert.deepStrictEqual(pipe(none, f), some(none)) * assert.deepStrictEqual(pipe(some(-1), f), none) * ``` */ export declare const traverse: PipeableTraverse1; /** * Takes a function and an initial value and returns the initial value if `Maybe` is `none`, * otherwise returns the result of applying the function to the initial value and the value inside `Maybe`. * * @example * * ```ts * assert.deepStrictEqual(pipe(some(1), reduce((acc, a) => acc + a, 1), 2) * assert.deepStrictEqual(pipe(none, reduce((acc, a) => acc + a, 1), 1) * ``` */ export declare const reduce: (f: (acc: B, a: A) => B, b: B) => (ma: Maybe) => B; /** * Compares one `Maybe` to another `Maybe`. Returns false if maybes or the wrapped values are different. * * @example * * ```ts * assert.deepStrictEqual(equals(some(1), some(1)), true) * assert.deepStrictEqual(equals(some(2), some(1)), false) * assert.deepStrictEqual(equals(some(1), none), false) * assert.deepStrictEqual(equals(none, none), true) * assert.deepStrictEqual(equals(none, right(1)), false) * ``` */ export declare const equals: (a: Maybe, b: Maybe) => boolean; /** * Alternative Functor */ export declare const Alternative: Alternative1; /** * Monad Functor */ export declare const Monad: Monad1; /** * Chain Functor */ export declare const Chain: Chain1; /** * Extend Functor */ export declare const Extend: Extend1; /** * Traversable Functor */ export declare const Traversable: Traversable1;