import type { UnionToIntersection } from "@principia/prelude/Utils"; import type { Has, Region, Tag } from "../Has"; import * as X from "../XPure"; import type { Sync } from "./model"; /** * Access a record of services with the required Service Entries */ export declare const asksServicesM: >>( s: SS ) => ( f: (a: { [k in keyof SS]: [SS[k]] extends [Tag] ? T : unknown }) => Sync ) => X.XPure< unknown, never, R & UnionToIntersection<{ [k_1 in keyof SS]: [SS[k_1]] extends [Tag] ? Has : unknown }[keyof SS]>, E, B >; export declare const asksServicesTM: []>( ...s: SS ) => ( f: (...a: { [k in keyof SS]: [SS[k]] extends [Tag] ? T : unknown }) => Sync ) => X.XPure< unknown, never, R & UnionToIntersection< { [k_1 in keyof SS]: [SS[k_1]] extends [Tag] ? Has : never }[keyof SS & number] >, E, B >; export declare const asksServicesT: []>( ...s: SS ) => ( f: (...a: { [k in keyof SS]: [SS[k]] extends [Tag] ? T : unknown }) => B ) => X.XPure< unknown, never, UnionToIntersection<{ [k_1 in keyof SS]: [SS[k_1]] extends [Tag] ? Has : never }[keyof SS & number]>, never, B >; /** * Access a record of services with the required Service Entries */ export declare const asksServices: >>( s: SS ) => ( f: (a: { [k in keyof SS]: [SS[k]] extends [Tag] ? T : unknown }) => B ) => X.XPure< unknown, never, UnionToIntersection<{ [k_1 in keyof SS]: [SS[k_1]] extends [Tag] ? Has : unknown }[keyof SS]>, never, B >; /** * Access a service with the required Service Entry */ export declare const asksServiceM: ( s: Tag ) => (f: (a: T) => Sync) => X.XPure, E, B>; /** * Access a service with the required Service Entry */ export declare const asksServiceF: ( s: Tag ) => < K extends keyof T & { [k in keyof T]: T[k] extends (...args: any[]) => Sync ? k : never }[keyof T] >( k: K ) => ( ...args: T[K] extends (...args: infer ARGS) => Sync ? ARGS : unknown[] ) => T[K] extends (...args: any[]) => Sync ? Sync, E, A> : unknown[]; /** * Access a service with the required Service Entry */ export declare const asksService: (s: Tag) => (f: (a: T) => B) => X.XPure, never, B>; /** * Access a service with the required Service Entry */ export declare const askService: (s: Tag) => X.XPure, never, T>; /** * Provides the service with the required Service Entry, depends on global HasRegistry */ export declare const giveServiceM: ( _: Tag ) => (f: Sync) => (ma: Sync, E1, A1>) => Sync; /** * Provides the service with the required Service Entry, depends on global HasRegistry */ export declare const giveService: ( _: Tag ) => (f: T) => (ma: Sync, E1, A1>) => Sync; /** * Replaces the service with the required Service Entry, depends on global HasRegistry */ export declare const replaceServiceM: ( _: Tag, f: (_: T) => Sync ) => (ma: Sync, E1, A1>) => Sync, E | E1, A1>; /** * Replaces the service with the required Service Entry, depends on global HasRegistry */ export declare const replaceServiceM_: ( ma: Sync, E1, A1>, _: Tag, f: (_: T) => Sync ) => Sync, E | E1, A1>; /** * Replaces the service with the required Service Entry, depends on global HasRegistry */ export declare const replaceService: ( _: Tag, f: (_: T) => T ) => (ma: Sync, E1, A1>) => Sync, E1, A1>; /** * Replaces the service with the required Service Entry, depends on global HasRegistry */ export declare const replaceService_: ( ma: Sync, E1, A1>, _: Tag, f: (_: T) => T ) => Sync, E1, A1>; export declare const region: () => Tag>; export declare const useRegion: ( h: Tag> ) => (e: Sync) => X.XPure>, E, A>; export declare const asksRegionM: ( h: Tag> ) => (e: (_: T) => Sync) => X.XPure>, E, A>; export declare const asksRegion: ( h: Tag> ) => (e: (_: T) => A) => X.XPure>, never, A>; export declare const askRegion: (h: Tag>) => X.XPure>, never, T>; export declare const askServiceIn: ( _: Tag ) => (h: Tag & T, K>>) => X.XPure & T, K>>, never, A>; export declare const asksServiceIn: ( _: Tag ) => ( h: Tag & T, K>> ) => (f: (_: A) => B) => X.XPure & T, K>>, never, B>; export declare const asksServiceInM: ( _: Tag ) => ( h: Tag & T, K>> ) => (f: (_: A) => Sync) => X.XPure & T, K>>, E, B>; /** * ```haskell * asService :: Tag a -> Task r e a -> Task r e (Has a) * ``` * * Maps the success value of this effect to a service. */ export declare const asService: (has: Tag) => (fa: Sync) => X.XPure>; //# sourceMappingURL=service.d.ts.map