import type { UnionToIntersection } from "@principia/prelude/Utils"; import { AtomicReference } from "../../support"; import type { Cause } from "../Exit/Cause"; import type { Managed } from "../Managed/model"; import type { DefaultEnv } from "../Task"; export declare const URI = "Layer"; export declare type URI = typeof URI; export declare abstract class Layer { readonly hash: AtomicReference; readonly _R: (_: R) => void; readonly _E: () => E; readonly _Out: () => A; setKey(hash: symbol): this; ["_I"](): LayerInstruction; } declare module "@principia/prelude/HKT" { interface URItoKind { readonly [URI]: Layer; } } export declare enum LayerInstructionTag { Fold = "LayerFold", Map = "LayerMap", Chain = "LayerChain", Fresh = "LayerRefresh", Managed = "LayerManaged", Suspend = "LayerSuspend", MapBothPar = "LayerMapBothPar", AllPar = "LayerAllPar", AllSeq = "LayerAllSeq", MapBothSeq = "LayerMapBothSeq" } /** * Type level bound to make sure a layer is complete */ export declare const main: (layer: Layer) => Layer; export declare type LayerInstruction = | LayerFoldInstruction | LayerMapInstruction | LayerChainInstruction | LayerChainInstruction | LayerFreshInstruction | LayerManagedInstruction | LayerSuspendInstruction | LayerMapBothParInstruction | LayerMapBothSeqInstruction | LayerAllParInstruction[]> | LayerAllSeqInstruction[]>; export declare class LayerFoldInstruction extends Layer< RIn & R, E1 | E2, ROut1 | ROut2 > { readonly layer: Layer; readonly onFailure: Layer], E1, ROut1>; readonly onSuccess: Layer; readonly _tag = LayerInstructionTag.Fold; constructor( layer: Layer, onFailure: Layer], E1, ROut1>, onSuccess: Layer ); } export declare class LayerMapInstruction extends Layer { readonly layer: Layer; readonly f: (a: A) => B; readonly _tag = LayerInstructionTag.Map; constructor(layer: Layer, f: (a: A) => B); } export declare class LayerChainInstruction extends Layer { readonly layer: Layer; readonly f: (a: A) => Layer; readonly _tag = LayerInstructionTag.Chain; constructor(layer: Layer, f: (a: A) => Layer); } export declare class LayerFreshInstruction extends Layer { readonly layer: Layer; readonly _tag = LayerInstructionTag.Fresh; constructor(layer: Layer); } export declare class LayerManagedInstruction extends Layer { readonly managed: Managed; readonly _tag = LayerInstructionTag.Managed; constructor(managed: Managed); } export declare class LayerSuspendInstruction extends Layer { readonly factory: () => Layer; readonly _tag = LayerInstructionTag.Suspend; constructor(factory: () => Layer); } export declare type MergeR[]> = UnionToIntersection< { [k in keyof Ls]: [Ls[k]] extends [Layer] ? (unknown extends X ? never : X) : never; }[number] >; export declare type MergeE[]> = { [k in keyof Ls]: [Ls[k]] extends [Layer] ? X : never; }[number]; export declare type MergeA[]> = UnionToIntersection< { [k in keyof Ls]: [Ls[k]] extends [Layer] ? (unknown extends X ? never : X) : never; }[number] >; export declare class LayerMapBothParInstruction extends Layer { readonly layer: Layer; readonly that: Layer; readonly f: (a: A, b: B) => C; readonly _tag = LayerInstructionTag.MapBothPar; constructor(layer: Layer, that: Layer, f: (a: A, b: B) => C); } export declare class LayerAllParInstruction[]> extends Layer< MergeR, MergeE, MergeA > { readonly layers: Ls & { 0: Layer; }; readonly _tag = LayerInstructionTag.AllPar; constructor( layers: Ls & { 0: Layer; } ); } export declare class LayerMapBothSeqInstruction extends Layer { readonly layer: Layer; readonly that: Layer; readonly f: (a: A, b: B) => C; readonly _tag = LayerInstructionTag.MapBothSeq; constructor(layer: Layer, that: Layer, f: (a: A, b: B) => C); } export declare class LayerAllSeqInstruction[]> extends Layer< MergeR, MergeE, MergeA > { readonly layers: Ls & { 0: Layer; }; readonly _tag = LayerInstructionTag.AllSeq; constructor( layers: Ls & { 0: Layer; } ); } //# sourceMappingURL=model.d.ts.map