/**
* 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; }>;