/** * This file contains the Nil algebraic data type. Nil is a native form of the * Option algebraic data type. Instead of encapsulating a value in a tagged * union it uses the native `undefined` and `null` types built in to javascript. * Unfortunately, this makes its algebraic structure implementations unsound in * some cases, specifically when one wants to use undefined or null as * significant values (meaning they have some meaning beyond empty). * * @module Nil * @since 2.0.0 */ import "./_dnt.polyfills.js"; import type { $, Kind, Out } from "./kind.js"; import type { Applicable } from "./applicable.js"; import type { Combinable } from "./combinable.js"; import type { Comparable } from "./comparable.js"; import type { Either } from "./either.js"; import type { Filterable } from "./filterable.js"; import type { Flatmappable } from "./flatmappable.js"; import type { Foldable } from "./foldable.js"; import type { Initializable } from "./initializable.js"; import type { Mappable } from "./mappable.js"; import type { Option } from "./option.js"; import type { Pair } from "./pair.js"; import type { Predicate } from "./predicate.js"; import type { Refinement } from "./refinement.js"; import type { Showable } from "./showable.js"; import type { Sortable } from "./sortable.js"; import type { Traversable } from "./traversable.js"; import type { Wrappable } from "./wrappable.js"; /** * @since 2.0.0 */ export type Nil = A | undefined | null; /** * @since 2.0.0 */ export interface KindNil extends Kind { readonly kind: Nil>; } /** * @since 2.0.0 */ export declare function nil(a: A): Nil; /** * @since 2.0.0 */ export declare function init(): Nil; /** * @since 2.0.0 */ export declare function fail(): Nil; /** * @since 2.0.0 */ export declare function fromPredicate(refinement: Refinement): (a: A) => Nil; export declare function fromPredicate(predicate: Predicate): (ta: Nil) => Nil; /** * @since 2.0.0 */ export declare function fromOption(ua: Option): Nil; /** * @since 2.0.0 */ export declare function tryCatch(fda: (...d: D) => A): (...d: D) => Nil; /** * @since 2.0.0 */ export declare function match(onNil: () => I, onValue: (a: A) => I): (ta: Nil) => I; /** * @since 2.0.0 */ export declare function getOrElse(onNil: () => A): (ta: Nil) => A; /** * @since 2.0.0 */ export declare function toNull(ta: Nil): A | null; /** * @since 2.0.0 */ export declare function toUndefined(ta: Nil): A | undefined; /** * @since 2.0.0 */ export declare function isNil(ta: Nil): ta is undefined | null; /** * @since 2.0.0 */ export declare function isNotNil(ta: Nil): ta is NonNullable; /** * @since 2.0.0 */ export declare function wrap(a: A): Nil; /** * @since 2.0.0 */ export declare function apply(ua: Nil): (ufai: Nil<(a: A) => I>) => Nil; /** * @since 2.0.0 */ export declare function map(fai: (a: A) => I): (ta: Nil) => Nil; /** * @since 2.0.0 */ export declare function flatmap(fati: (a: A) => Nil): (ta: Nil) => Nil; /** * @since 2.0.0 */ export declare function alt(tb: Nil): (ta: Nil) => Nil; /** * @since 2.0.0 */ export declare function exists(predicate: Predicate): (ua: Nil) => boolean; /** * @since 2.0.0 */ export declare function filter(refinement: Refinement): (ta: Nil) => Nil; export declare function filter(predicate: Predicate): (ta: Nil) => Nil; /** * @since 2.0.0 */ export declare function filterMap(fai: (a: A) => Option): (ua: Nil) => Nil; /** * @since 2.0.0 */ export declare function partition(refinement: Refinement): (ua: Nil) => Pair, Nil>; export declare function partition(predicate: Predicate): (ua: Nil) => Pair, Nil>; /** * @since 2.0.0 */ export declare function partitionMap(fai: (a: A) => Either): (ua: Nil) => Pair, Nil>; /** * @since 2.0.0 */ export declare function traverse(A: Applicable): (favi: (a: A) => $) => (ta: Nil) => $, J, K], [L], [M]>; /** * @since 2.0.0 */ export declare function fold(reducer: (accumulator: O, current: A) => O, initial: O): (ua: Nil) => O; /** * @since 2.0.0 */ export declare function getShowableNil({ show }: Showable): Showable>; /** * @since 2.0.0 */ export declare function getComparableNil({ compare }: Comparable): Comparable>; /** * @since 2.0.0 */ export declare function getSortableNil({ sort }: Sortable): Sortable>; /** * @since 2.0.0 */ export declare function getCombinableNil({ combine }: Combinable): Combinable>; /** * @since 2.0.0 */ export declare function getInitializableNil(I: Initializable): Initializable>; /** * @since 2.0.0 */ export declare const ApplicableNil: Applicable; /** * @since 2.0.0 */ export declare const MappableNil: Mappable; /** * @since 2.0.0 */ export declare const FilterableNil: Filterable; /** * @since 2.0.0 */ export declare const FlatmappableNil: Flatmappable; /** * @since 2.0.0 */ export declare const FoldableNil: Foldable; /** * @since 2.0.0 */ export declare const TraversableNil: Traversable; /** * @since 2.0.0 */ export declare const WrappableNil: Wrappable; /** * @since 2.0.0 */ export declare const tap: (fn: (value: A) => void) => (ua: Nil) => Nil; /** * @since 2.0.0 */ export declare const bind: (name: Exclude, faui: (a: A) => Nil) => (ua: Nil) => Nil<{ readonly [K_1 in N | keyof A]: K_1 extends keyof A ? A[K_1] : I; }>; /** * @since 2.0.0 */ export declare const bindTo: (name: N) => (ua: Nil) => Nil<{ readonly [K in N]: A; }>;