FuncType - v0.45.0
    Preparing search index...

    Interface IOType<R, E, A>

    IO<R, E, A> represents a lazy, composable effect.

    interface IOType<R extends Type, E extends Type, A extends Type> {
        "[iterator]"(): Generator<IOType<R, E, A>, A, A>;
        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>;
        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

    • R extends Type

      Requirements (environment/dependencies needed to run)

    • E extends Type

      Error type (typed failures)

    • A extends Type

      Success type (value produced on success)

    Index

    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, A>

    • 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 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>