Hyperlinkv0.8.0-beta.28

Data

Data.TaggedErrorconsteffect/Data.ts:770
<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>

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}`))
)
constructorsErrorTaggedClass
Source effect/Data.ts:7705 lines
export 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> = core.TaggedError as any
Referenced by 46 symbols