/** * @tsplus type effect/core/io/Deferred/State */ export type DeferredState = Pending | Done /** * @tsplus type effect/core/io/Deferred/State.Ops */ export interface DeferredStateOps {} export const DeferredState: DeferredStateOps = {} export class Pending { readonly _tag = "Pending" constructor(readonly joiners: Array<(_: Effect) => void>) {} } export class Done { readonly _tag = "Done" constructor(readonly value: Effect) {} } /** * @tsplus static effect/core/io/Deferred/State.Ops pending */ export function pending( joiners: Array<(_: Effect) => void> ): DeferredState { return new Pending(joiners) } /** * @tsplus static effect/core/io/Deferred/State.Ops done */ export function done(value: Effect): DeferredState { return new Done(value) }