UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

417 lines 10.9 kB
/** * Data is an ADT which allows you to represent all the states involved in loading a * piece of data asynchronously. * * @since 0.9.2 */ import * as AD from 'fp-ts/Alt'; import * as Alternative_ from 'fp-ts/Alternative'; import * as App from 'fp-ts/Applicative'; import * as Ap from 'fp-ts/Apply'; import * as Ch from 'fp-ts/Chain'; import { Compactable1 } from 'fp-ts/Compactable'; import * as Ei from 'fp-ts/Either'; import { Eq } from 'fp-ts/Eq'; import { Filterable1 } from 'fp-ts/Filterable'; import { Foldable1 } from 'fp-ts/Foldable'; import { Lazy } from 'fp-ts/function'; import * as F from 'fp-ts/Functor'; import { HKT } from 'fp-ts/HKT'; import { Monad1 } from 'fp-ts/Monad'; import { Monoid } from 'fp-ts/Monoid'; import * as O from 'fp-ts/Option'; import { Pointed1 } from 'fp-ts/Pointed'; import { Predicate } from 'fp-ts/Predicate'; import { Semigroup } from 'fp-ts/Semigroup'; import { Separated } from 'fp-ts/Separated'; import { Show } from 'fp-ts/Show'; import { Traversable1 } from 'fp-ts/Traversable'; import * as P from './Progress'; /** * @since 0.9.2 * @category Model */ export declare type Data<A> = NoData | Loading | Refresh<A> | Replete<A>; /** * @since 0.9.2 * @category Type-level */ export declare type Value<A> = [A] extends [Data<infer R>] ? R : never; /** * @since 0.9.2 * @category Refinement */ export declare const isNoData: <A>(data: Data<A>) => data is NoData; /** * @since 0.9.2 * @category Refinement */ export declare const isLoading: <A>(data: Data<A>) => data is Loading; /** * @since 0.9.2 * @category Refinement */ export declare const isRefresh: <A>(data: Data<A>) => data is Refresh<A>; /** * @since 0.9.2 * @category Refinement */ export declare const isReplete: <A>(data: Data<A>) => data is Replete<A>; /** * @since 0.9.2 * @category Refinement */ export declare const hasValue: <A>(data: Data<A>) => data is Refresh<A> | Replete<A>; /** * @since 0.9.2 * @category Model */ export interface NoData { readonly _tag: 'NoData'; } /** * @since 0.9.2 * @category Constructor */ export declare const noData: NoData; /** * @since 0.9.2 * @category Model */ export interface Loading { readonly _tag: 'Loading'; readonly progress: O.Option<P.Progress>; } /** * @since 0.9.2 * @category Constructor */ export declare const loading: Loading; /** * @since 0.9.2 * @category Constructor */ export declare const fromProgress: (progress: P.Progress) => Loading; /** * @since 0.9.2 * @category Model */ export interface Refresh<A> { readonly _tag: 'Refresh'; readonly value: A; readonly progress: O.Option<P.Progress>; } /** * @since 0.9.2 * @category Constructor */ export declare const refresh: <A>(value: A, progress?: O.Option<P.Progress>) => Refresh<A>; /** * @since 0.9.2 * @category Model */ export interface Replete<A> { readonly _tag: 'Replete'; readonly value: A; } /** * @since 0.9.2 * @category Constructor */ export declare const replete: <A>(value: A) => Replete<A>; /** * @since 0.9.2 * @category Deconstructor */ export declare const matchW: <A, B, C, D, E>(onNoData: () => A, onLoading: (progress: O.Option<P.Progress>) => B, onRefresh: (value: C, progress: O.Option<P.Progress>) => D, onReplete: (value: C) => E) => (data: Data<C>) => A | B | D | E; /** * @since 0.9.2 * @category Deconstructor */ export declare const match3W: <A, B, C, D>(onNoData: () => A, onLoading: (progress: O.Option<P.Progress>) => B, onRefreshOrReplete: (value: C) => D) => (data: Data<C>) => A | B | D; /** * @since 0.9.2 * @category Deconstructor */ export declare const match: <A, B>(onNoData: () => A, onLoading: () => A, onRefresh: (value: B) => A, onReplete: (value: B) => A) => (data: Data<B>) => A; /** * @since 0.9.2 * @category Combinator */ export declare const toLoading: <A>(data: Data<A>) => Data<A>; /** * @since 0.9.2 * @category Constructor */ export declare const fromNullable: <A>(a: A | null | undefined) => Data<A>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getShow: <A>(S: Show<A>) => Show<Data<A>>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getEq: <A>(S: Eq<A>) => Eq<Data<A>>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getSemigroup: <A>(S: Semigroup<A>) => Semigroup<Data<A>>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getMonoid: <A>(S: Semigroup<A>) => Monoid<Data<A>>; /** * @since 0.9.2 * @category Combinator */ export declare const getOrElse: <A>(onInitial: () => A, onLoading: (progress: O.Option<P.Progress>) => A) => (ma: Data<A>) => A; /** * @since 0.9.2 * @category Combinator */ export declare const getOrElseW: <A, B>(onInitial: () => A, onLoading: (progress: O.Option<P.Progress>) => B) => <C>(ma: Data<C>) => A | B | C; /** * @since 0.9.2 * @category Combinator */ export declare const elem: <A>(E: Eq<A>) => (a: A) => (ma: Data<A>) => boolean; /** * @since 0.9.2 * @category Combinator */ export declare const exists: <A>(predicate: Predicate<A>) => (ma: Data<A>) => boolean; /** * @since 0.9.2 * @category Constructor */ export declare const of: <A>(value: A) => Data<A>; /** * @since 0.9.2 * @category Combinator */ export declare const map: <A, B>(f: (value: A) => B) => (data: Data<A>) => Data<B>; /** * @since 0.9.2 * @category Combinator */ export declare const chain: <A, B>(f: (value: A) => Data<B>) => (data: Data<A>) => Data<B>; /** * @since 0.9.2 * @category URI */ export declare const URI = "@typed/fp/Data"; /** * @since 0.9.2 * @category URI */ export declare type URI = typeof URI; declare module 'fp-ts/HKT' { interface URItoKind<A> { [URI]: Data<A>; } } /** * @since 0.9.2 * @category Instance */ export declare const Pointed: Pointed1<URI>; /** * @since 0.9.2 * @category Instance */ export declare const Functor: F.Functor1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const bindTo: <N extends string>(name: N) => <A>(fa: Data<A>) => Data<{ [K in N]: A; }>; /** * @since 0.9.2 * @category Combinator */ export declare const flap: <A>(a: A) => <B>(fab: Data<(a: A) => B>) => Data<B>; /** * @since 0.9.2 * @category Combinator */ export declare const tupled: <A>(fa: Data<A>) => Data<readonly [A]>; /** * @since 0.9.2 * @category Instance */ export declare const Chain: Ch.Chain1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const ap: <A>(fa: Data<A>) => <B>(fab: Data<(a: A) => B>) => Data<B>; /** * @since 0.9.2 * @category Combinator */ export declare const bind: <N extends string, A, B>(name: Exclude<N, keyof A>, f: (a: A) => Data<B>) => (ma: Data<A>) => Data<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>; /** * @since 0.9.2 * @category Combinator */ export declare const chainFirst: <A, B>(f: (a: A) => Data<B>) => (first: Data<A>) => Data<A>; /** * @since 0.9.2 * @category Instance */ export declare const Apply: Ap.Apply1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const apFirst: <B>(second: Data<B>) => <A>(first: Data<A>) => Data<A>; /** * @since 0.9.2 * @category Combinator */ export declare const apS: <N extends string, A, B>(name: Exclude<N, keyof A>, fb: Data<B>) => (fa: Data<A>) => Data<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>; /** * @since 0.9.2 * @category Combinator */ export declare const apSecond: <B>(second: Data<B>) => <A>(first: Data<A>) => Data<B>; /** * @since 0.9.2 * @category Combinator */ export declare const apT: <B>(fb: Data<B>) => <A extends readonly unknown[]>(fas: Data<A>) => Data<readonly [...A, B]>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getApplySemigroup: <A>(S: Semigroup<A>) => Semigroup<Data<A>>; /** * @since 0.9.2 * @category Instance */ export declare const Applicative: App.Applicative1<URI>; /** * @since 0.9.2 * @category Typeclass Constructor */ export declare const getApplicativeMonoid: <A>(M: Monoid<A>) => Monoid<Data<A>>; /** * @since 0.9.2 * @category Instance */ export declare const Monad: Monad1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const chainRec: <A, B>(f: (value: A) => Data<Ei.Either<A, B>>) => (value: A) => Data<B>; /** * @since 0.9.2 * @category Combinator */ export declare const alt: <A>(f: Lazy<Data<A>>) => <B>(b: Data<B>) => Data<A | B>; /** * @since 0.9.2 * @category Instance */ export declare const Alt: AD.Alt1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const altAll: <A>(startWith: Data<A>) => (as: readonly Data<A>[]) => Data<A>; /** * @since 0.9.2 * @category Constructor */ export declare const zero: <A>() => Data<A>; /** * @since 0.9.2 * @category Instance */ export declare const Alternative: Alternative_.Alternative1<URI>; /** * @since 0.9.2 * @category Natural Transformation */ export declare const fromOption: <A>(option: O.Option<A>) => Data<A>; /** * @since 0.9.2 * @category Natural Transformation */ export declare const toOption: <A>(data: Data<A>) => O.Option<A>; /** * @since 0.9.2 * @category Combinator */ export declare function foldMap<M>(M: Monoid<M>): <A>(f: (a: A) => M) => (fa: Data<A>) => M; /** * @since 0.9.2 * @category Deconstructor */ export declare const reduce: <A, B>(seed: A, f: (acc: A, value: B) => A) => (data: Data<B>) => A; /** * @since 0.9.2 * @category Deconstructor */ export declare const reduceRight: <A, B>(seed: A, f: (value: B, acc: A) => A) => (data: Data<B>) => A; /** * @since 0.9.2 * @category Instance */ export declare const Foldable: Foldable1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare function traverse<F>(F: App.Applicative<F>): <A, B>(f: (value: A) => HKT<F, B>) => (data: Data<A>) => HKT<F, Data<B>>; /** * @since 0.9.2 * @category Instance */ export declare const Traversable: Traversable1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const compact: <A>(dataOption: Data<O.Option<A>>) => Data<A>; /** * @since 0.9.2 * @category Combinator */ export declare const separate: <E, A>(dataEither: Data<Ei.Either<E, A>>) => Separated<Data<E>, Data<A>>; /** * @since 0.9.2 * @category Instance */ export declare const Compactable: Compactable1<URI>; /** * @since 0.9.2 * @category Combinator */ export declare const partitionMap: Filterable1<URI>['partitionMap']; /** * @since 0.9.2 * @category Combinator */ export declare const partition: import("fp-ts/Filterable").Partition1<"@typed/fp/Data">; /** * @since 0.9.2 * @category Combinator */ export declare const filterMap: Filterable1<URI>['filterMap']; /** * @since 0.9.2 * @category Combinator */ export declare const filter: import("fp-ts/Filterable").Filter1<"@typed/fp/Data">; /** * @since 0.9.2 * @category Instance */ export declare const Filterable: Filterable1<URI>; //# sourceMappingURL=Data.d.ts.map