/** * This file contains the Datum algebraic data type. Datum represents an * optional value that has an additional notation for a pending state. * * @module Datum * @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 { Filterable } from "./filterable.js"; import type { Mappable } from "./mappable.js"; import type { Wrappable } from "./wrappable.js"; import type { Comparable } from "./comparable.js"; import type { Either } from "./either.js"; import type { Flatmappable } from "./flatmappable.js"; import type { Initializable } from "./initializable.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"; /** * @since 2.0.0 */ export type Initial = { readonly tag: "Initial"; }; /** * @since 2.0.0 */ export type Pending = { readonly tag: "Pending"; }; /** * @since 2.0.0 */ export type Refresh = { readonly tag: "Refresh"; readonly value: A; }; /** * @since 2.0.0 */ export type Replete = { readonly tag: "Replete"; readonly value: A; }; /** * @since 2.0.0 */ export type Datum = Initial | Pending | Refresh | Replete; /** * @since 2.0.0 */ export type None = Initial | Pending; /** * @since 2.0.0 */ export type Some = Refresh | Replete; /** * @since 2.0.0 */ export type Loading = Pending | Refresh; /** * @since 2.0.0 */ export interface KindDatum extends Kind { readonly kind: Datum>; } /** * @since 2.0.0 */ export declare const initial: Initial; /** * @since 2.0.0 */ export declare const pending: Pending; /** * @since 2.0.0 */ export declare function refresh(value: D): Datum; /** * @since 2.0.0 */ export declare function replete(value: D): Datum; /** * @since 2.0.0 */ export declare function constInitial(): Datum; /** * @since 2.0.0 */ export declare function constPending(): Datum; /** * @since 2.0.0 */ export declare function fromNullable(a: A): Datum>; /** * @since 2.0.0 */ export declare function tryCatch(fasr: (...as: AS) => A): (...as: AS) => Datum; /** * @since 2.0.0 */ export declare function toLoading(ta: Datum): Datum; /** * @since 2.0.0 */ export declare function isInitial(ta: Datum): ta is Initial; /** * @since 2.0.0 */ export declare function isPending(ta: Datum): ta is Pending; /** * @since 2.0.0 */ export declare function isRefresh(ta: Datum): ta is Refresh; /** * @since 2.0.0 */ export declare function isReplete(ta: Datum): ta is Replete; /** * @since 2.0.0 */ export declare function isNone(ta: Datum): ta is None; /** * @since 2.0.0 */ export declare function isSome(ta: Datum): ta is Some; /** * @since 2.0.0 */ export declare function isLoading(ta: Datum): ta is Loading; /** * @since 2.0.0 */ export declare function match(onInitial: () => B, onPending: () => B, onReplete: (a: A) => B, onRefresh: (a: A) => B): (ma: Datum) => B; /** * @since 2.0.0 */ export declare function getOrElse(onNone: () => A): (ma: Datum) => A; /** * @since 2.0.0 */ export declare function wrap(a: A): Datum; /** * @since 2.0.0 */ export declare function map(fai: (a: A) => I): (ta: Datum) => Datum; /** * @since 2.0.0 */ export declare function apply(ua: Datum): (ufai: Datum<(a: A) => I>) => Datum; /** * @since 2.0.0 */ export declare function flatmap(fati: (a: A) => Datum): (ta: Datum) => Datum; /** * @since 2.0.0 */ export declare function alt(tb: Datum): (ta: Datum) => Datum; /** * @since 2.0.0 */ export declare function fold(foao: (o: O, a: A) => O, o: O): (ta: Datum) => O; /** * @since 2.0.0 */ export declare function exists(predicate: Predicate): (ua: Datum) => boolean; /** * @since 2.0.0 */ export declare function filter(refinement: Refinement): (ta: Datum) => Datum; export declare function filter(predicate: Predicate): (ta: Datum) => Datum; /** * @since 2.0.0 */ export declare function filterMap(fai: (a: A) => Option): (ua: Datum) => Datum; /** * @since 2.0.0 */ export declare function partition(refinement: Refinement): (ua: Datum) => Pair, Datum>; export declare function partition(predicate: Predicate): (ua: Datum) => Pair, Datum>; /** * @since 2.0.0 */ export declare function partitionMap(fai: (a: A) => Either): (ua: Datum) => Pair, Datum>; /** * @since 2.0.0 */ export declare function traverse(A: Applicable): (favi: (a: A) => $) => (ta: Datum) => $, J, K], [L], [M]>; /** * @since 2.0.0 */ export declare function getShowableDatum({ show }: Showable): Showable>; /** * @since 2.0.0 */ export declare function getCombinableDatum(S: Combinable): Combinable>; /** * @since 2.0.0 */ export declare function getInitializableDatum(S: Initializable): Initializable>; /** * @since 2.0.0 */ export declare function getComparableDatum(S: Comparable): Comparable>; /** * @since 2.0.0 */ export declare function getSortableDatum(O: Sortable): Sortable>; /** * @since 2.0.0 */ export declare const ApplicableDatum: Applicable; /** * @since 2.0.0 */ export declare const MappableDatum: Mappable; /** * @since 2.0.0 */ export declare const FlatmappableDatum: Flatmappable; /** * @since 2.0.0 */ export declare const TraversableDatum: Traversable; /** * @since 2.0.0 */ export declare const WrappableDatum: Wrappable; /** * @since 2.0.0 */ export declare const FilterableDatum: Filterable; /** * @since 2.0.0 */ export declare const tap: (fn: (value: A) => void) => (ua: Datum) => Datum; /** * @since 2.0.0 */ export declare const bind: (name: Exclude, faui: (a: A) => Datum) => (ua: Datum) => Datum<{ 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: Datum) => Datum<{ readonly [K in N]: A; }>;