FuncType - v1.4.1
    Preparing search index...

    Interface IOType<R, E, A>

    interface IOType<in out R extends Type, out E extends Type, out A extends Type> {
        "[toStringTag]": string;
        "[iterator]"(): Generator<IOType<R, E, A>, A, unknown>;
        catchAll<R2 extends unknown, E2 extends unknown, B extends unknown>(
            handler: (e: E) => IOType<R2, E2, B>,
        ): IOType<R | R2, E2, A | B>;
        catchTag<
            K extends string,
            R2 extends unknown,
            E2 extends unknown,
            B extends unknown,
        >(
            tag: K,
            handler: (e: Extract<E, { _tag: K }>) => IOType<R2, E2, B>,
        ): IOType<R | R2, E2 | Exclude<E, { _tag: K }>, A | B>;
        delay(ms: number): IOType<R, E, A>;
        flatMap<R2 extends unknown, E2 extends unknown, B extends unknown>(
            f: (a: A) => IOType<R2, E2, B>,
        ): IOType<R | R2, E | E2, B>;
        flatten<R2 extends unknown, E2 extends unknown, B extends unknown>(
            this: IOType<R, E, IOType<R2, E2, B>>,
        ): IOType<R | R2, E | E2, B>;
        fold<B extends unknown>(
            onFailure: (e: E) => B,
            onSuccess: (a: A) => B,
        ): IOType<R, never, B>;
        map<B extends unknown>(f: (a: A) => B): IOType<R, E, B>;
        mapError<E2 extends unknown>(f: (e: E) => E2): IOType<R, E2, A>;
        match<B extends unknown>(
            patterns: { failure: (e: E) => B; success: (a: A) => B },
        ): IOType<R, never, B>;
        pipe<B>(f: (self: IOType<R, E, A>) => B): B;
        provideContext<R2 extends unknown>(
            context: ContextType<R2>,
        ): IOType<Exclude<R, R2>, E, A>;
        provideLayer<RIn extends unknown, E2 extends unknown, ROut extends unknown>(
            layer: LayerType<RIn, E2, ROut>,
        ): IOType<RIn | Exclude<R, ROut>, E | E2, A>;
        provideService<S extends unknown>(
            tag: TagType<S>,
            service: S,
        ): IOType<Exclude<R, S>, E, A>;
        recover<B extends unknown>(fallback: B): IOType<R, never, A | B>;
        recoverWith<R2 extends unknown, E2 extends unknown, B extends unknown>(
            f: (e: E) => IOType<R2, E2, B>,
        ): IOType<R | R2, E2, A | B>;
        retry(n: number): IOType<R, E, A>;
        retryWhile(
            opts: {
                delayMs?: number;
                n: number;
                while: (error: E, attempt: number) => boolean;
            },
        ): IOType<R, E, A>;
        retryWithBackoff(
            opts: {
                baseMs: number;
                factor?: number;
                jitter?: boolean;
                maxMs?: number;
                n: number;
                while?: (error: E, attempt: number) => boolean;
            },
        ): IOType<R, E, A>;
        retryWithDelay(n: number, delayMs: number): IOType<R, E, A>;
        run(this: IOType<never, E, A>): Promise<Either<E, A>>;
        runExit(this: IOType<never, E, A>): Promise<ExitType<E, A>>;
        runOption(this: IOType<never, E, A>): Promise<Option<A>>;
        runOrThrow(this: IOType<never, E, A>): Promise<A>;
        runSync(this: IOType<never, E, A>): Either<E, A>;
        runSyncOrThrow(this: IOType<never, E, A>): A;
        runTry(this: IOType<never, E, A>): Promise<Try<A>>;
        tap(f: (a: A) => void): IOType<R, E, A>;
        tapEffect<R2 extends unknown, E2 extends unknown, B extends unknown>(
            f: (a: A) => IOType<R2, E2, B>,
        ): IOType<R | R2, E | E2, A>;
        tapError(f: (e: E) => void): IOType<R, E, A>;
        timeout(ms: number): IOType<R, E | TimeoutError, A>;
        timeoutTo<B extends unknown>(ms: number, fallback: B): IOType<R, E, A | B>;
        toJSON(): { _tag: string; effect: unknown };
        toString(): string;
        zip<R2 extends unknown, E2 extends unknown, B extends unknown>(
            that: IOType<R2, E2, B>,
        ): IOType<R | R2, E | E2, readonly [A, B]>;
        zipLeft<R2 extends unknown, E2 extends unknown, B extends unknown>(
            that: IOType<R2, E2, B>,
        ): IOType<R | R2, E | E2, A>;
        zipRight<R2 extends unknown, E2 extends unknown, B extends unknown>(
            that: IOType<R2, E2, B>,
        ): IOType<R | R2, E | E2, B>;
    }

    Type Parameters

    Index

    Properties

    "[toStringTag]": string

    Methods

    • Makes IO iterable for generator do-notation (yield* syntax). Yields the IO itself, allowing IO.gen to extract the value.

      Returns Generator<IOType<R, E, A>, A, unknown>

    • Catches all errors (alias for recoverWith).

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      Returns IOType<R | R2, E2, A | B>

    • Catches errors with a specific tag and handles them.

      Type Parameters

      • K extends string
      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      • tag: K

        The error tag to catch

      • handler: (e: Extract<E, { _tag: K }>) => IOType<R2, E2, B>

        Handler for the caught error

      Returns IOType<R | R2, E2 | Exclude<E, { _tag: K }>, A | B>

    • Delays execution by the specified milliseconds.

      Parameters

      • ms: number

      Returns IOType<R, E, A>

    • Chains another IO effect based on the success value.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      • f: (a: A) => IOType<R2, E2, B>

        Function returning next IO effect

      Returns IOType<R | R2, E | E2, B>

      New IO with combined effects

    • Pattern matches on success and failure.

      Type Parameters

      • B extends unknown

      Parameters

      • onFailure: (e: E) => B

        Handler for failures

      • onSuccess: (a: A) => B

        Handler for successes

      Returns IOType<R, never, B>

      New IO with handled result

    • Transforms the success value.

      Type Parameters

      • B extends unknown

      Parameters

      • f: (a: A) => B

        Function to apply to the success value

      Returns IOType<R, E, B>

      New IO with transformed value

    • Transforms the error value.

      Type Parameters

      • E2 extends unknown

      Parameters

      • f: (e: E) => E2

        Function to apply to the error

      Returns IOType<R, E2, A>

      New IO with transformed error

    • Pattern matches with object pattern syntax.

      Type Parameters

      • B extends unknown

      Parameters

      • patterns: { failure: (e: E) => B; success: (a: A) => B }

      Returns IOType<R, never, B>

    • Pipes the IO through a function.

      Type Parameters

      • B

      Parameters

      Returns B

    • Provides a context to satisfy the requirements of this effect.

      Type Parameters

      • R2 extends unknown

      Parameters

      • context: ContextType<R2>

        The context containing required services

      Returns IOType<Exclude<R, R2>, E, A>

    • Provides a single service to satisfy part of the requirements.

      Type Parameters

      • S extends unknown

      Parameters

      • tag: TagType<S>

        The service tag

      • service: S

        The service implementation

      Returns IOType<Exclude<R, S>, E, A>

    • Recovers from any error with a fallback value.

      Type Parameters

      • B extends unknown

      Parameters

      • fallback: B

        Value to use on error

      Returns IOType<R, never, A | B>

      New IO that never fails

    • Recovers from error by running another effect.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      • f: (e: E) => IOType<R2, E2, B>

        Function returning recovery effect

      Returns IOType<R | R2, E2, A | B>

      New IO with error handling

    • Retries the effect up to n times on failure.

      Parameters

      • n: number

        Maximum number of retries

      Returns IOType<R, E, A>

    • Retries the effect only while a predicate over the error holds.

      Useful for selective retry policies — e.g. retry HTTP 5xx but not 4xx, retry network errors but not validation errors. The predicate is evaluated BEFORE each retry; returning false short-circuits and re-fails with the original error.

      Parameters

      • opts: { delayMs?: number; n: number; while: (error: E, attempt: number) => boolean }
        • Optional ReadonlydelayMs?: number

          Optional fixed delay between attempts.

        • Readonlyn: number

          Maximum number of retry attempts.

        • Readonlywhile: (error: E, attempt: number) => boolean

          Predicate (error, attempt) => boolean (attempt is 1-indexed for the first retry; if the predicate returns false, the retry is skipped).

      Returns IOType<R, E, A>

      Http.get("/api/users", { decode })
      .retryWhile({
      n: 3,
      while: (e) => e._tag === "HttpStatusError" && e.status >= 500,
      delayMs: 250,
      })
    • Retries the effect with exponential backoff and optional full jitter.

      Delay schedule: min(maxMs, baseMs * factor^(attempt-1)). With jitter enabled, the actual delay is computed * (0.5 + Math.random() * 0.5) (full jitter, 50–100% of the computed value) — prevents thundering herd.

      Parameters

      • opts: {
            baseMs: number;
            factor?: number;
            jitter?: boolean;
            maxMs?: number;
            n: number;
            while?: (error: E, attempt: number) => boolean;
        }
        • ReadonlybaseMs: number

          Initial delay before the first retry.

        • Optional Readonlyfactor?: number

          Backoff multiplier per attempt. Defaults to 2.

        • Optional Readonlyjitter?: boolean

          Apply full jitter (50–100% of computed delay). Defaults to true.

        • Optional ReadonlymaxMs?: number

          Cap on per-attempt delay. Defaults to 30_000.

        • Readonlyn: number

          Maximum number of retry attempts.

        • Optional Readonlywhile?: (error: E, attempt: number) => boolean

          Optional predicate (error, attempt) => boolean gating each retry.

      Returns IOType<R, E, A>

      const isRetryable = (e: HttpError): boolean =>
      e._tag === "NetworkError" ||
      (e._tag === "HttpStatusError" && (e.status >= 500 || e.status === 429))

      Http.get("/api/users", { decode })
      .retryWithBackoff({ n: 3, baseMs: 250, while: isRetryable })
      .timeout(10_000)
    • Retries the effect with a delay between attempts.

      Parameters

      • n: number

        Maximum number of retries

      • delayMs: number

        Delay between retries in milliseconds

      Returns IOType<R, E, A>

    • Runs the effect and returns an Either. Never throws. This is the safe default - all errors become Left. Requires R = never.

      Parameters

      Returns Promise<Either<E, A>>

    • Runs the effect and returns an Option. Some(value) on success, None on failure.

      Parameters

      Returns Promise<Option<A>>

    • Runs the effect and returns a Promise of the value. Throws on any error (typed E, defect, or interrupt). Requires R = never.

      Parameters

      Returns Promise<A>

    • Runs a sync effect and returns an Either. Never throws. This is the safe default - all errors become Left. Throws only if the effect is async (cannot be made safe synchronously). Requires R = never.

      Parameters

      Returns Either<E, A>

    • Runs a sync effect and returns the value. Throws on any error or if the effect is async. Requires R = never.

      Parameters

      Returns A

    • Runs the effect and returns a Try. Success(value) on success, Failure(error) on failure.

      Parameters

      Returns Promise<Try<A>>

    • Applies a side effect without changing the value.

      Parameters

      • f: (a: A) => void

        Side effect function

      Returns IOType<R, E, A>

      Same IO for chaining

    • Applies an effectful side effect without changing the value.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      • f: (a: A) => IOType<R2, E2, B>

        Function returning IO for side effect

      Returns IOType<R | R2, E | E2, A>

      Same value after running side effect

    • Executes a side effect on the error without changing it. Useful for logging errors while preserving the error chain.

      Parameters

      • f: (e: E) => void

        Side effect function to run on error

      Returns IOType<R, E, A>

      Same IO with the side effect attached

      const io = IO.asyncResult(() => query(), toError)
      .tapError(err => console.error('Query failed:', err))
      .map(data => transform(data))
    • Fails with TimeoutError if the effect doesn't complete within the specified duration.

      Parameters

      • ms: number

        Maximum time in milliseconds

      Returns IOType<R, E | TimeoutError, A>

    • Returns a fallback value if the effect doesn't complete within the specified duration.

      Type Parameters

      • B extends unknown

      Parameters

      • ms: number

        Maximum time in milliseconds

      • fallback: B

        Value to return on timeout

      Returns IOType<R, E, A | B>

    • Converts to JSON representation.

      Returns { _tag: string; effect: unknown }

    • Converts to string representation.

      Returns string

    • Zips two IOs into a tuple.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      Returns IOType<R | R2, E | E2, readonly [A, B]>

    • Sequences two IOs, keeping the first value.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      Returns IOType<R | R2, E | E2, A>

    • Sequences two IOs, keeping the second value.

      Type Parameters

      • R2 extends unknown
      • E2 extends unknown
      • B extends unknown

      Parameters

      Returns IOType<R | R2, E | E2, B>