import type { Erase, UnionToIntersection } from "@principia/prelude/Utils"; import type { Has, Tag } from "../../Has"; import * as Sy from "./_internal"; import type { SyncMemoMap } from "./model"; import { SyncLayer, SyncLayerInstructionTag } from "./model"; export declare const getMemoOrElseCreate: (layer: SyncLayer) => (m: SyncMemoMap) => Sy.Sync; export declare class FromSyncInstruction extends SyncLayer { readonly sync: Sy.Sync; readonly _tag = SyncLayerInstructionTag.FromSync; constructor(sync: Sy.Sync); scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync>; } export declare class FreshInstruction extends SyncLayer { readonly layer: SyncLayer; readonly _tag = SyncLayerInstructionTag.Fresh; constructor(layer: SyncLayer); scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync>; } export declare class SuspendInstruction extends SyncLayer { readonly factory: () => SyncLayer; readonly _tag = SyncLayerInstructionTag.Suspend; constructor(factory: () => SyncLayer); scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync>; } export declare class BothInstruction extends SyncLayer { readonly left: SyncLayer; readonly right: SyncLayer; readonly _tag = SyncLayerInstructionTag.Both; constructor(left: SyncLayer, right: SyncLayer); scopeBoth( self: BothInstruction ): Sy.Sync Sy.Sync>; scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync>; } export declare class UsingInstruction extends SyncLayer, E | E1, A & A1> { readonly left: SyncLayer; readonly right: SyncLayer; readonly _tag = SyncLayerInstructionTag.Using; constructor(left: SyncLayer, right: SyncLayer); scope(): Sy.Sync Sy.Sync, E | E1, A & A1>>; } export declare class FromInstruction extends SyncLayer, E | E1, A1> { readonly left: SyncLayer; readonly right: SyncLayer; readonly _tag = SyncLayerInstructionTag.From; constructor(left: SyncLayer, right: SyncLayer); scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync, E | E1, A1>>; } export declare type MergeR>> = UnionToIntersection< { [k in keyof Ls]: [Ls[k]] extends [SyncLayer] ? (unknown extends X ? never : X) : never; }[number] >; export declare type MergeE>> = { [k in keyof Ls]: [Ls[k]] extends [SyncLayer] ? X : never; }[number]; export declare type MergeA>> = UnionToIntersection< { [k in keyof Ls]: [Ls[k]] extends [SyncLayer] ? (unknown extends X ? never : X) : never; }[number] >; export declare class AllInstruction>> extends SyncLayer< MergeR, MergeE, MergeA > { readonly layers: Layers & { 0: SyncLayer; }; readonly _tag = SyncLayerInstructionTag.All; constructor( layers: Layers & { 0: SyncLayer; } ); scope(): Sy.IO<(_: SyncMemoMap) => Sy.Sync, MergeE, MergeA>>; } export declare const fromRawSync: (sync: Sy.Sync) => SyncLayer; export declare const fresh: (layer: SyncLayer) => FreshInstruction; export declare const suspend: (layer: () => SyncLayer) => SuspendInstruction; export declare const fromSync: (tag: Tag) => (_: Sy.Sync) => SyncLayer>; export declare const fromFunction: (tag: Tag) => (f: (_: R) => T) => SyncLayer>; export declare const fromValue: (tag: Tag) => (_: T) => SyncLayer>; export declare const and: ( left: SyncLayer ) => (right: SyncLayer) => SyncLayer; export declare const andTo: ( left: SyncLayer ) => (right: SyncLayer) => SyncLayer, E2 | E, A & A2>; export declare const to: ( left: SyncLayer ) => (right: SyncLayer) => SyncLayer, E2 | E, A2>; export declare const using: ( left: SyncLayer ) => (right: SyncLayer) => SyncLayer & R2, E2 | E, A & A2>; export declare const from: ( left: SyncLayer ) => (right: SyncLayer) => SyncLayer & R2, E2 | E, A>; export declare const giveLayer: ( layer: SyncLayer ) => (_: Sy.Sync) => Sy.Sync; export declare const all: []>( ...ls: Ls & { 0: SyncLayer; } ) => SyncLayer< UnionToIntersection< { [k in keyof Ls]: [Ls[k]] extends [SyncLayer] ? (unknown extends X ? never : X) : never; }[number] >, MergeE, UnionToIntersection< { [k_1 in keyof Ls]: [Ls[k_1]] extends [SyncLayer] ? unknown extends X_1 ? never : X_1 : never; }[number] > >; //# sourceMappingURL=core.d.ts.map