@typed/fp
Version:
Data Structures and Resources for fp-ts
529 lines • 15.5 kB
TypeScript
import { Disposable } from '@most/types';
import * as Alt_ from 'fp-ts/Alt';
import * as FpApplicative from 'fp-ts/Applicative';
import * as Ap from 'fp-ts/Apply';
import * as FpChain from 'fp-ts/Chain';
import { ChainRec2 } from 'fp-ts/ChainRec';
import * as E from 'fp-ts/Either';
import * as FIO from 'fp-ts/FromIO';
import * as FR from 'fp-ts/FromReader';
import * as FT from 'fp-ts/FromTask';
import * as FN from 'fp-ts/function';
import { Functor2 } from 'fp-ts/Functor';
import * as IO from 'fp-ts/IO';
import { Monad2 } from 'fp-ts/Monad';
import { Pointed2 } from 'fp-ts/Pointed';
import * as Re from 'fp-ts/Reader';
import * as Task from 'fp-ts/Task';
import { FromResume2 } from './FromResume';
import { ArgsOf, Arity1 } from './function';
import { Intersect } from './HKT';
import { MonadRec2 } from './MonadRec';
import * as P from './Provide';
import * as R from './Resume';
/**
* Env is specialization of Reader<R, Resume<A>>
* @since 0.9.2
* @category Model
*/
export interface Env<R, A> extends Re.Reader<R, R.Resume<A>> {
}
/**
* @since 0.9.2
* @category Type-level
*/
export declare type RequirementsOf<A> = [A] extends [Env<infer R, any>] ? R : [A] extends [FN.FunctionN<any, Env<infer R, any>>] ? R : never;
/**
* @since 0.9.2
* @category Type-level
*/
export declare type ValueOf<A> = A extends Env<any, infer R> ? R : A extends FN.FunctionN<any, Env<any, infer R>> ? R : never;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const ap: <R, A>(fa: Env<R, A>) => <B>(fab: Env<R, Arity1<A, B>>) => Env<R, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apW: <R1, A>(fa: Env<R1, A>) => <R2, B>(fab: Env<R2, Arity1<A, B>>) => Env<R1 & R2, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chain: <A, R, B>(f: (a: A) => Re.Reader<R, R.Resume<B>>) => (ma: Re.Reader<R, R.Resume<A>>) => Re.Reader<R, R.Resume<B>>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainW: <A, R1, B>(f: (a: A) => Env<R1, B>) => <R2>(ma: Env<R2, A>) => Env<R1 & R2, B>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromReader: <R, A>(ma: Re.Reader<R, A>) => Env<R, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const map: <A, B>(f: (a: A) => B) => <R>(fa: Env<R, A>) => Env<R, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const tap: <A>(f: (a: A) => any) => <R>(fa: Env<R, A>) => Env<R, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const constant: <A>(a: A) => <R>(fa: Env<R, unknown>) => Env<R, A>;
/**
* @since 0.9.2
* @category Model
*/
export declare type Of<A> = Env<unknown, A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const of: <A>(a: A) => Of<A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const asksIOK: <R, A>(f: (r: R) => IO.IO<A>) => Env<R, A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const asksTaskK: <R, A>(f: (r: R) => Task.Task<A>) => Env<R, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare function chainRec<F extends (value: any) => Env<any, E.Either<any, any>>>(f: F): (value: ArgsOf<F>[0]) => Env<RequirementsOf<ReturnType<F>>, [
ValueOf<ReturnType<F>>
] extends [E.Either<any, infer R>] ? R : never>;
/**
* @since 0.9.2
* @category URI
*/
export declare const URI = "@typed/fp/Env";
/**
* @since 0.9.2
* @category URI
*/
export declare type URI = typeof URI;
declare module 'fp-ts/HKT' {
interface URItoKind2<E, A> {
[URI]: Env<E, A>;
}
}
declare module './HKT' {
interface URItoVariance {
[URI]: V<E, Contravariant>;
}
}
/**
* @since 0.9.2
* @category Instance
*/
export declare const Pointed: Pointed2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Functor: Functor2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const flap: <A>(a: A) => <E, B>(fab: Env<E, (a: A) => B>) => Env<E, B>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Apply: Ap.Apply2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apS: <N extends string, A, E, B>(name: Exclude<N, keyof A>, fb: Env<E, B>) => (fa: Env<E, A>) => Env<E, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apSW: <N extends string, A, E1, B>(name: Exclude<N, keyof A>, fb: Env<E1, B>) => <E2>(fa: Env<E2, A>) => Env<E1 & E2, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apT: <E, B>(fb: Env<E, B>) => <A extends readonly unknown[]>(fas: Env<E, A>) => Env<E, readonly [...A, B]>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apTW: <E1, B>(fb: Env<E1, B>) => <E2, A extends readonly unknown[]>(fas: Env<E2, A>) => Env<E1 & E2, readonly [...A, B]>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apFirst: <E, B>(second: Env<E, B>) => <A>(first: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apFirstW: <E1, B>(second: Env<E1, B>) => <E2, A>(first: Env<E2, A>) => Env<E1 & E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apSecond: <E, B>(second: Env<E, B>) => <A>(first: Env<E, A>) => Env<E, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const apSecondW: <E1, B>(second: Env<E1, B>) => <E2, A>(first: Env<E2, A>) => Env<E1 & E2, B>;
/**
* @since 0.9.2
* @category Typeclass Constructor
*/
export declare const getSemigroup: <A, E>(S: import("fp-ts/Semigroup").Semigroup<A>) => import("fp-ts/Semigroup").Semigroup<Env<E, A>>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Applicative: FpApplicative.Applicative2<URI>;
/**
* @since 0.9.2
* @category Typeclass Constructor
*/
export declare const getMonoid: <A, E>(M: import("fp-ts/Monoid").Monoid<A>) => import("fp-ts/Monoid").Monoid<Env<E, A>>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Chain: FpChain.Chain2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirst: <A, E, B>(f: (a: A) => Env<E, B>) => (first: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstW: <A, E1, B>(f: (a: A) => Env<E1, B>) => <E2>(first: Env<E2, A>) => Env<E1 & E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const flattenW: <E1, E2, A>(env: Env<E1, Env<E2, A>>) => Env<E1 & E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const flatten: <E, A>(env: Env<E, Env<E, A>>) => Env<E, A>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Monad: Monad2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const ChainRec: ChainRec2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const MonadRec: MonadRec2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const FromReader: FR.FromReader2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const raceW: <E1, A>(a: Env<E1, A>) => <E2, B>(b: Env<E2, B>) => Env<E1 & E2, A | B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const race: <E, A>(a: Env<E, A>) => <B>(b: Env<E, B>) => Env<E, A | B>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Alt: Alt_.Alt2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const alt: <E, A>(second: FN.Lazy<Env<E, A>>) => (first: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const altW: <E1, A>(snd: FN.Lazy<Env<E1, A>>) => <E2>(fst: Env<E2, A>) => Env<E1 & E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const altAll: <E, A>(startWith: Env<E, A>) => (as: readonly Env<E, A>[]) => Env<E, A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromIO: <A>(fa: IO.IO<A>) => Env<unknown, A>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const FromIO: FIO.FromIO2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const FromTask: FT.FromTask2<URI>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromTask: <A, E = unknown>(fa: Task.Task<A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromResume: <A, E = unknown>(resume: R.Resume<A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const FromResume: FromResume2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const useSome: <E1>(provided: E1) => <E2, A>(env: Env<E1 & E2, A>) => Env<E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const provideSome: <E1>(provided: E1) => <E2, A>(env: Env<E1 & E2, A>) => Env<E2, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const useAll: <E1>(provided: E1) => <A>(env: Env<E1, A>) => Env<unknown, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const provideAll: <E1>(provided: E1) => <A>(env: Env<E1, A>) => Env<unknown, A>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const UseSome: P.UseSome2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const UseAll: P.UseAll2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const ProvideSome: P.ProvideSome2<URI>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const ProvideAll: P.ProvideAll2<URI>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const provideAllWith: <R, A>(provider: Env<R, A>) => <B>(hkt: Env<A, B>) => Env<R, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const useAllWith: <R, A>(provider: Env<R, A>) => <B>(hkt: Env<A, B>) => Env<R, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const provideSomeWith: <E1, A>(provider: Env<E1, A>) => P.Provider2<"@typed/fp/Env", A, E1>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const useSomeWith: <E1, A>(provider: Env<E1, A>) => P.Provider2<"@typed/fp/Env", A, E1>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const askAndUse: <E, B>(hkt: Env<E, B>) => Env<E, Env<unknown, B>>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const askAndProvide: <E, B>(hkt: Env<E, B>) => Env<E, Env<unknown, B>>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const toResume: <E, B>(hkt: Env<E, B>) => Env<E, R.Resume<B>>;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Provide: P.Provide2<URI>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const Do: Env<unknown, {}>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const bindTo: <N extends string>(name: N) => <E, A>(fa: Env<E, A>) => Env<E, { readonly [K in N]: A; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const bind: <N extends string, A, E, B>(name: Exclude<N, keyof A>, f: (a: A) => Env<E, B>) => (ma: Env<E, A>) => Env<E, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const bindW: <N extends string, A, E1, B>(name: Exclude<N, keyof A>, f: (a: A) => Env<E1, B>) => <E2>(ma: Env<E2, A>) => Env<E1 & E2, { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const tupled: <E, A>(fa: Env<E, A>) => Env<E, readonly [A]>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const ask: <R>() => Env<R, R>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const asks: <R, A>(f: (r: R) => A) => Env<R, A>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const asksE: <R, E, A>(f: (r: R) => Env<E, A>) => Env<E & R, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainReaderK: <A, R, B>(f: (a: A) => Re.Reader<R, B>) => (ma: Env<R, A>) => Env<R, B>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromReaderK: <A extends readonly unknown[], R, B>(f: (...a: A) => Re.Reader<R, B>) => (...a: A) => Env<R, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstResumeK: <A, B>(f: (value: A) => R.Resume<B>) => <E>(hkt: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainResumeK: <A, B>(f: (value: A) => R.Resume<B>) => <E>(hkt: Env<E, A>) => Env<E, B>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromResumeK: <A extends readonly any[], B>(f: (...args: A) => R.Resume<B>) => <E>(...args: A) => Env<E, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstTaskK: <A, B>(f: (a: A) => Task.Task<B>) => <E>(first: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainTaskK: <A, B>(f: (a: A) => Task.Task<B>) => <E>(first: Env<E, A>) => Env<E, B>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromTaskK: <A extends readonly unknown[], B>(f: (...a: A) => Task.Task<B>) => <E>(...a: A) => Env<E, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstIOK: <A, B>(f: (a: A) => IO.IO<B>) => <E>(first: Env<E, A>) => Env<E, A>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainIOK: <A, B>(f: (a: A) => IO.IO<B>) => <E>(first: Env<E, A>) => Env<E, B>;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromIOK: <A extends readonly unknown[], B>(f: (...a: A) => IO.IO<B>) => <E>(...a: A) => Env<E, B>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const zip: <E, A>(ta: readonly Env<E, A>[]) => Env<E, readonly A[]>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const zipW: <A extends readonly Env<any, any>[]>(envs: A) => Env<Intersect<{ [K in keyof A]: RequirementsOf<A[K]>; }, unknown>, { [K_1 in keyof A]: ValueOf<A[K_1]>; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const combineAll: <A extends readonly Env<any, any>[]>(...envs: A) => Env<Intersect<{ [K in keyof A]: RequirementsOf<A[K]>; }, unknown>, { [K_1 in keyof A]: ValueOf<A[K_1]>; }>;
/**
* @since 0.11.0
* @category Combinator
*/
export declare const combineStruct: <Props extends Readonly<Record<string, Env<any, any>>>>(props: Props) => Env<unknown, { readonly [K in keyof Props]: ValueOf<Props[K]>; }>;
/**
* @since 0.9.2
* @category Execution
*/
export declare const runWith: <A>(f: (value: A) => Disposable) => <E>(requirements: E) => (env: Env<E, A>) => Disposable;
/**
* @since 0.9.2
* @category Execution
*/
export declare const execWith: <E>(requirements: E) => (env: Env<E, any>) => Disposable;
/**
* Construct an Env to a lazily-defined Env-based effect that must be provided later.
* Does not support functions which require type-parameters as they will resolve to unknown, due
* to limitations in TS, if you need this maybe use [asksE](#askse)
* @since 0.9.2
* @category Constructor
*/
export declare const op: <F extends (...args: readonly any[]) => Env<any, any>>() => <K extends PropertyKey>(key: K) => {
(...args: ArgsOf<F>): Env<RequirementsOf<ReturnType<F>> & { readonly [_ in K]: F; }, ValueOf<ReturnType<F>>>;
readonly key: K;
};
/**
* @since 0.9.2
* @category Combinator
*/
export declare const toResumeK: <Args extends readonly any[], E, A>(envK: (...args: Args) => Env<E, A>) => Env<E, (...args: Args) => R.Resume<A>>;
//# sourceMappingURL=Env.d.ts.map