effect-io-ai

Package: effect
Module: Data

Data.TaggedError

Creates a tagged error class with a _tag discriminator.

When to use

Use when you need domain errors with discriminated-union handling.

Details

Like Error, but instances also carry a readonly _tag property, enabling Effect.catchTag and Effect.catchTags for tag-based recovery. The _tag is excluded from the constructor argument. Yielding an instance inside Effect.gen fails the effect with this error.

Example (Recovering by tag)

import { Data, Effect } from "effect"

class NotFound extends Data.TaggedError("NotFound")<{
  readonly resource: string
}> {}

class Forbidden extends Data.TaggedError("Forbidden")<{
  readonly reason: string
}> {}

const program = Effect.gen(function*() {
  return yield* new NotFound({ resource: "/users/42" })
})

const recovered = program.pipe(
  Effect.catchTag("NotFound", (e) =>
    Effect.succeed(`missing: ${e.resource}`))
)

See

Signature

declare const TaggedError: <Tag extends string>(tag: Tag) => new <A extends Record<string, any> = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & { readonly _tag: Tag; } & Readonly<A>

Source

Since v2.0.0