UNPKG

@effect-ts/system

Version:

Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.

359 lines (300 loc) 8.33 kB
// ets_tracing: off import type * as Cause from "../Cause/core.js" import type { Tuple } from "../Collections/Immutable/Tuple/index.js" import type * as Exit from "../Exit/exit.js" import type { FiberContext } from "../Fiber/context.js" import type * as Fiber from "../Fiber/core.js" import type { FiberID } from "../Fiber/id.js" import type { Platform } from "../Fiber/index.js" import type { Trace } from "../Fiber/tracing.js" import type { Runtime } from "../FiberRef/fiberRef.js" import type * as O from "../Option/index.js" import type { Scope } from "../Scope/index.js" import type { Supervisor } from "../Supervisor/index.js" import type { XPureBase } from "../XPure/core.js" import type { Effect } from "./effect.js" import { Base } from "./effect.js" // // @category Primitives // export type Instruction = | IFlatMap<any, any, any, any, any, any> | ISucceed<any> | IEffectPartial<any, any> | IEffectTotal<any> | IEffectAsync<any, any, any> | IFold<any, any, any, any, any, any, any, any, any> | IFork<any, any, any> | IInterruptStatus<any, any, any> | ICheckInterrupt<any, any, any> | ICheckTracingStatus<any, any, any> | IFail<any> | IDescriptor<any, any, any> | IYield | ITrace | IRead<any, any, any, any> | IProvide<any, any, any> | ISuspend<any, any, any> | ISuspendPartial<any, any, any, any> | IFiberRefNew<any> | IFiberRefModify<any, any> | IRaceWith<any, any, any, any, any, any, any, any, any, any, any, any> | ISupervise<any, any, any> | IGetForkScope<any, any, any> | IOverrideForkScope<any, any, any> | ITracingStatus<any, any, any> | IPlatform<any, any, any> | ITracer<any, any, any> | XPureBase<unknown, unknown, unknown, any, any, any> export class IFail<E> extends Base<unknown, E, never> { readonly _tag = "Fail" constructor( readonly fill: (_: () => Trace) => Cause.Cause<E>, readonly trace?: string ) { super() } } export class IFlatMap<R, E, A, R1, E1, A1> extends Base<R & R1, E | E1, A1> { readonly _tag = "FlatMap" constructor( readonly val: Effect<R, E, A>, readonly f: (a: A) => Effect<R1, E1, A1>, readonly trace?: string ) { super() } } export class ISucceed<A> extends Base<unknown, never, A> { readonly _tag = "Succeed" constructor(readonly val: A, readonly trace?: string) { super() } } export class ITrace extends Base<unknown, never, Trace> { readonly _tag = "Trace" constructor() { super() } } export class ITracingStatus<R, E, A> extends Base<R, E, A> { readonly _tag = "TracingStatus" constructor(readonly effect: Effect<R, E, A>, readonly flag: boolean) { super() } } export class ICheckTracingStatus<R, E, A> extends Base<R, E, A> { readonly _tag = "CheckTracingStatus" constructor(readonly f: (tracingStatus: boolean) => Effect<R, E, A>) { super() } } export class IEffectPartial<E, A> extends Base<unknown, E, A> { readonly _tag = "EffectPartial" constructor( readonly effect: () => A, readonly onThrow: (u: unknown) => E, readonly trace?: string ) { super() } } export class IEffectTotal<A> extends Base<unknown, never, A> { readonly _tag = "EffectTotal" constructor(readonly effect: () => A, readonly trace?: string) { super() } } export class IEffectAsync<R, E, A> extends Base<R, E, A> { readonly _tag = "EffectAsync" constructor( readonly register: (cb: (_: Effect<R, E, A>) => void) => O.Option<Effect<R, E, A>>, readonly blockingOn: readonly FiberID[], readonly trace?: string ) { super() } } export class IFold<R, E, A, R2, E2, A2, R3, E3, A3> extends Base< R & R2 & R3, E2 | E3, A2 | A3 > { readonly _tag = "Fold" constructor( readonly value: Effect<R, E, A>, readonly failure: (cause: Cause.Cause<E>) => Effect<R2, E2, A2>, readonly apply: (a: A) => Effect<R3, E3, A3>, readonly trace?: string ) { super() } } export type FailureReporter = (e: Cause.Cause<unknown>) => void export class IFork<R, E, A> extends Base<R, never, FiberContext<E, A>> { readonly _tag = "Fork" constructor( readonly value: Effect<R, E, A>, readonly scope: O.Option<Scope<Exit.Exit<any, any>>>, readonly reportFailure: O.Option<FailureReporter>, readonly trace?: string ) { super() } } export class IInterruptStatus<R, E, A> extends Base<R, E, A> { readonly _tag = "InterruptStatus" constructor( readonly effect: Effect<R, E, A>, readonly flag: Fiber.InterruptStatus, readonly trace?: string ) { super() } } export class ICheckInterrupt<R, E, A> extends Base<R, E, A> { readonly _tag = "CheckInterrupt" constructor( readonly f: (_: Fiber.InterruptStatus) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class IDescriptor<R, E, A> extends Base<R, E, A> { readonly _tag = "Descriptor" constructor( readonly f: (_: Fiber.Descriptor) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class IYield extends Base<unknown, never, void> { readonly _tag = "Yield" constructor() { super() } } export class IRead<R0, R, E, A> extends Base<R & R0, E, A> { readonly _tag = "Read" constructor(readonly f: (_: R0) => Effect<R, E, A>, readonly trace?: string) { super() } } export class IPlatform<R, E, A> extends Base<R, E, A> { readonly _tag = "Platform" constructor( readonly f: (_: Platform<unknown>) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class ITracer<R, E, A> extends Base<R, E, A> { readonly _tag = "Tracer" constructor( readonly f: (tracer: (trace?: string) => void) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class IProvide<R, E, A> extends Base<unknown, E, A> { readonly _tag = "Provide" constructor(readonly r: R, readonly next: Effect<R, E, A>, readonly trace?: string) { super() } } export class ISuspend<R, E, A> extends Base<R, E, A> { readonly _tag = "Suspend" constructor( readonly factory: (platform: Platform<unknown>, id: FiberID) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class ISuspendPartial<R, E, A, E2> extends Base<R, E | E2, A> { readonly _tag = "SuspendPartial" constructor( readonly factory: (platform: Platform<unknown>, id: FiberID) => Effect<R, E, A>, readonly onThrow: (u: unknown) => E2, readonly trace?: string ) { super() } } export class IFiberRefNew<A> extends Base<unknown, never, Runtime<A>> { readonly _tag = "FiberRefNew" constructor( readonly initial: A, readonly onFork: (a: A) => A, readonly onJoin: (a: A, a2: A) => A ) { super() } } export class IFiberRefModify<A, B> extends Base<unknown, never, B> { readonly _tag = "FiberRefModify" constructor( readonly fiberRef: Runtime<A>, readonly f: (a: A) => Tuple<[B, A]>, readonly trace?: string ) { super() } } export class IRaceWith<R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3> extends Base< R & R1 & R2 & R3, E2 | E3, A2 | A3 > { readonly _tag = "RaceWith" constructor( readonly left: Effect<R, E, A>, readonly right: Effect<R1, E1, A1>, readonly leftWins: ( exit: Exit.Exit<E, A>, fiber: Fiber.Fiber<E1, A1> ) => Effect<R2, E2, A2>, readonly rightWins: ( exit: Exit.Exit<E1, A1>, fiber: Fiber.Fiber<E, A> ) => Effect<R3, E3, A3>, readonly scope: O.Option<Scope<Exit.Exit<any, any>>>, readonly trace?: string ) { super() } } export class ISupervise<R, E, A> extends Base<R, E, A> { readonly _tag = "Supervise" constructor( readonly effect: Effect<R, E, A>, readonly supervisor: Supervisor<any>, readonly trace?: string ) { super() } } export class IGetForkScope<R, E, A> extends Base<R, E, A> { readonly _tag = "GetForkScope" constructor( readonly f: (_: Scope<Exit.Exit<any, any>>) => Effect<R, E, A>, readonly trace?: string ) { super() } } export class IOverrideForkScope<R, E, A> extends Base<R, E, A> { readonly _tag = "OverrideForkScope" constructor( readonly effect: Effect<R, E, A>, readonly forkScope: O.Option<Scope<Exit.Exit<any, any>>>, readonly trace?: string ) { super() } } export * from "./effect.js"