<F extends (...args: Array<any>) => any>(fn: F): Effectify.Effectify<
F,
Effectify.EffectifyError<F>
>
<F extends (...args: Array<any>) => any, E>(
fn: F,
onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E
): Effectify.Effectify<F, E>
<F extends (...args: Array<any>) => any, E, E2>(
fn: F,
onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E,
onSyncError: (error: unknown, args: Parameters<F>) => E2
): Effectify.Effectify<F, E | E2>Converts an error-first callback API into a function that returns an
Effect.
Details
The original function is called with the supplied arguments plus a final
callback. A non-null callback error fails the returned effect, while a
successful callback value becomes the effect success. Use onError to map
callback errors and onSyncError to turn synchronous throws into typed
failures; otherwise synchronous throws become defects.
Example (Converting callbacks to effects)
import { Effect } from "effect"
import * as fs from "fs"
// Convert Node.js readFile to an Effect
const readFile = Effect.effectify(fs.readFile)
// Use the effectified function
const program = readFile("package.json", "utf8")
Effect.runPromise(program).then(console.log)
// Output: contents of package.jsonExample (Mapping callback errors to typed failures)
import { Effect } from "effect"
import * as fs from "fs"
const readFile = Effect.effectify(
fs.readFile,
(error, args) => new Error(`Failed to read file ${args[0]}: ${error.message}`)
)
const program = readFile("nonexistent.txt", "utf8")
Effect.runPromiseExit(program).then(console.log)
// Output: Exit.failure with custom error messageexport const const effectify: {
<F extends (...args: Array<any>) => any>(
fn: F
): Effectify.Effectify<
F,
Effectify.EffectifyError<F>
>
<F extends (...args: Array<any>) => any, E>(
fn: F,
onError: (
error: Effectify.EffectifyError<F>,
args: Parameters<F>
) => E
): Effectify.Effectify<F, E>
<F extends (...args: Array<any>) => any, E, E2>(
fn: F,
onError: (
error: Effectify.EffectifyError<F>,
args: Parameters<F>
) => E,
onSyncError: (
error: unknown,
args: Parameters<F>
) => E2
): Effectify.Effectify<F, E | E2>
}
Converts an error-first callback API into a function that returns an
Effect.
Details
The original function is called with the supplied arguments plus a final
callback. A non-null callback error fails the returned effect, while a
successful callback value becomes the effect success. Use onError to map
callback errors and onSyncError to turn synchronous throws into typed
failures; otherwise synchronous throws become defects.
Example (Converting callbacks to effects)
import { Effect } from "effect"
import * as fs from "fs"
// Convert Node.js readFile to an Effect
const readFile = Effect.effectify(fs.readFile)
// Use the effectified function
const program = readFile("package.json", "utf8")
Effect.runPromise(program).then(console.log)
// Output: contents of package.json
Example (Mapping callback errors to typed failures)
import { Effect } from "effect"
import * as fs from "fs"
const readFile = Effect.effectify(
fs.readFile,
(error, args) => new Error(`Failed to read file ${args[0]}: ${error.message}`)
)
const program = readFile("nonexistent.txt", "utf8")
Effect.runPromiseExit(program).then(console.log)
// Output: Exit.failure with custom error message
effectify: {
<function (type parameter) F in <F extends (...args: Array<any>) => any>(fn: F): Effectify.Effectify<F, Effectify.EffectifyError<F>>F extends (...args: any[]args: interface Array<T>Array<any>) => any>(fn: F extends (...args: Array<any>) => anyfn: function (type parameter) F in <F extends (...args: Array<any>) => any>(fn: F): Effectify.Effectify<F, Effectify.EffectifyError<F>>F): Effectify.type Effectify.Effectify<T, E> = T extends {
(...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer Args9, infer _E9, infer A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer Args10, infer _E10, infer A10>): infer _R10;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends (...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>) => infer _R1 ? (...args: Args1) => Effect<Effectify.WithoutNull<A1>, E> : never
Converts a callback-based function type into an Effect-returning function type.
Effectify<function (type parameter) F in <F extends (...args: Array<any>) => any>(fn: F): Effectify.Effectify<F, Effectify.EffectifyError<F>>F, Effectify.type Effectify.EffectifyError<T> = T extends {
(...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer _Args9, infer E9, infer _A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer _Args10, infer E10, infer _A10>): infer _R10;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends (...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>) => infer _R1 ? NonNullable<...> : never
Extracts the callback error type from a callback-based function type.
EffectifyError<function (type parameter) F in <F extends (...args: Array<any>) => any>(fn: F): Effectify.Effectify<F, Effectify.EffectifyError<F>>F>>
<function (type parameter) F in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>F extends (...args: any[]args: interface Array<T>Array<any>) => any, function (type parameter) E in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>E>(
fn: F extends (...args: Array<any>) => anyfn: function (type parameter) F in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>F,
onError: (
error: Effectify.EffectifyError<F>,
args: Parameters<F>
) => E
onError: (error: Effectify.EffectifyError<F>error: Effectify.type Effectify.EffectifyError<T> = T extends {
(...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer _Args9, infer E9, infer _A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer _Args10, infer E10, infer _A10>): infer _R10;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends (...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>) => infer _R1 ? NonNullable<...> : never
Extracts the callback error type from a callback-based function type.
EffectifyError<function (type parameter) F in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>F>, args: Parameters<F>args: type Parameters<
T extends (...args: any) => any
> = T extends (...args: infer P) => any
? P
: never
Obtain the parameters of a function type in a tuple
Parameters<function (type parameter) F in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>F>) => function (type parameter) E in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>E
): Effectify.type Effectify.Effectify<T, E> = T extends {
(...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer Args9, infer _E9, infer A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer Args10, infer _E10, infer A10>): infer _R10;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends (...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>) => infer _R1 ? (...args: Args1) => Effect<Effectify.WithoutNull<A1>, E> : never
Converts a callback-based function type into an Effect-returning function type.
Effectify<function (type parameter) F in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>F, function (type parameter) E in <F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E): Effectify.Effectify<F, E>E>
<function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F extends (...args: any[]args: interface Array<T>Array<any>) => any, function (type parameter) E in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E, function (type parameter) E2 in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E2>(
fn: F extends (...args: Array<any>) => anyfn: function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F,
onError: (
error: Effectify.EffectifyError<F>,
args: Parameters<F>
) => E
onError: (error: Effectify.EffectifyError<F>error: Effectify.type Effectify.EffectifyError<T> = T extends {
(...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer _Args9, infer E9, infer _A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer _Args10, infer E10, infer _A10>): infer _R10;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends {
...;
} ? NonNullable<...> : T extends (...args: Effectify.ArgsWithCallback<infer _Args1, infer E1, infer _A1>) => infer _R1 ? NonNullable<...> : never
Extracts the callback error type from a callback-based function type.
EffectifyError<function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F>, args: Parameters<F>args: type Parameters<
T extends (...args: any) => any
> = T extends (...args: infer P) => any
? P
: never
Obtain the parameters of a function type in a tuple
Parameters<function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F>) => function (type parameter) E in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E,
onSyncError: (
error: unknown,
args: Parameters<F>
) => E2
onSyncError: (error: unknownerror: unknown, args: Parameters<F>args: type Parameters<
T extends (...args: any) => any
> = T extends (...args: infer P) => any
? P
: never
Obtain the parameters of a function type in a tuple
Parameters<function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F>) => function (type parameter) E2 in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E2
): Effectify.type Effectify.Effectify<T, E> = T extends {
(...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
(...args: Effectify.ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
(...args: Effectify.ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
(...args: Effectify.ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
(...args: Effectify.ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
(...args: Effectify.ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
(...args: Effectify.ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
(...args: Effectify.ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
(...args: Effectify.ArgsWithCallback<infer Args9, infer _E9, infer A9>): infer _R9;
(...args: Effectify.ArgsWithCallback<infer Args10, infer _E10, infer A10>): infer _R10;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends {
...;
} ? {
...;
} : T extends (...args: Effectify.ArgsWithCallback<infer Args1, infer _E1, infer A1>) => infer _R1 ? (...args: Args1) => Effect<Effectify.WithoutNull<A1>, E> : never
Converts a callback-based function type into an Effect-returning function type.
Effectify<function (type parameter) F in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>F, function (type parameter) E in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E | function (type parameter) E2 in <F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: Effectify.EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify.Effectify<F, E | E2>E2>
} =
(<function (type parameter) A in <A>(fn: Function, onError?: (e: any, args: any) => any, onSyncError?: (e: any, args: any) => any): (...args: Array<any>) => Effect<A, globalThis.Error, never>A>(fn: Functionfn: Function, onError: ((e: any, args: any) => any) | undefinedonError?: (e: anye: any, args: anyargs: any) => any, onSyncError: ((e: any, args: any) => any) | undefinedonSyncError?: (e: anye: any, args: anyargs: any) => any) =>
(...args: any[]args: interface Array<T>Array<any>) =>
const callback: <A, E = never, R = never>(
register: (
this: Scheduler,
resume: (effect: Effect<A, E, R>) => void,
signal: AbortSignal
) => void | Effect<void, never, R>
) => Effect<A, E, R>
Creates an Effect from a callback-based asynchronous API.
When to use
Use when you need to integrate APIs that complete through callbacks instead
of returning a Promise.
Details
The registration function receives a resume callback and, when requested,
an AbortSignal. Call resume at most once with the effect that should
complete the fiber; later calls are ignored. Return an optional cleanup
effect from the registration function to run if the fiber is interrupted.
Example (Integrating callback APIs)
import { Effect } from "effect"
const delay = (ms: number) =>
Effect.callback<void>((resume) => {
const timeoutId = setTimeout(() => {
resume(Effect.void)
}, ms)
// Cleanup function for interruption
return Effect.sync(() => clearTimeout(timeoutId))
})
const program = delay(1000)
callback<function (type parameter) A in <A>(fn: Function, onError?: (e: any, args: any) => any, onSyncError?: (e: any, args: any) => any): (...args: Array<any>) => Effect<A, globalThis.Error, never>A, module globalThisglobalThis.Error>((resume: (
effect: Effect<A, globalThis.Error, never>
) => void
resume) => {
try {
fn: Functionfn(...args: any[]args, (err: globalThis.Error | nullerr: module globalThisglobalThis.Error | null, result: Aresult: function (type parameter) A in <A>(fn: Function, onError?: (e: any, args: any) => any, onSyncError?: (e: any, args: any) => any): (...args: Array<any>) => Effect<A, globalThis.Error, never>A) => {
if (err: globalThis.Error | nullerr) {
resume: (
effect: Effect<A, globalThis.Error, never>
) => void
resume(const fail: <E>(
error: E
) => Effect<never, E>
Creates an Effect that represents a recoverable error.
When to use
Use to explicitly signal a recoverable error in an Effect.
Details
The error keeps propagating unless it is handled. You can handle tagged
errors with functions like
catchTag
or
catchTags
.
Example (Creating a failed effect)
import { Data, Effect } from "effect"
class OperationFailedError extends Data.TaggedError("OperationFailedError")<{}> {}
// ┌─── Effect<never, OperationFailedError, never>
// ▼
const failure = Effect.fail(
new OperationFailedError()
)
fail(onError: ((e: any, args: any) => any) | undefinedonError ? onError: (e: any, args: any) => anyonError(err: globalThis.Error(parameter) err: {
name: string;
message: string;
stack: string;
cause: unknown;
}
err, args: any[]args) : err: globalThis.Error(parameter) err: {
name: string;
message: string;
stack: string;
cause: unknown;
}
err))
} else {
resume: (
effect: Effect<A, globalThis.Error, never>
) => void
resume(const succeed: <A>(value: A) => Effect<A>Creates an Effect that always succeeds with a given value.
When to use
Use when an effect should complete successfully with a specific value without any errors
or external dependencies.
Example (Creating a successful effect)
import { Effect } from "effect"
// Creating an effect that represents a successful scenario
//
// ┌─── Effect<number, never, never>
// ▼
const success = Effect.succeed(42)
succeed(result: Aresult))
}
})
} catch (function (local var) err: unknownerr) {
resume: (
effect: Effect<A, globalThis.Error, never>
) => void
resume(onSyncError: ((e: any, args: any) => any) | undefinedonSyncError ? const fail: <E>(
error: E
) => Effect<never, E>
Creates an Effect that represents a recoverable error.
When to use
Use to explicitly signal a recoverable error in an Effect.
Details
The error keeps propagating unless it is handled. You can handle tagged
errors with functions like
catchTag
or
catchTags
.
Example (Creating a failed effect)
import { Data, Effect } from "effect"
class OperationFailedError extends Data.TaggedError("OperationFailedError")<{}> {}
// ┌─── Effect<never, OperationFailedError, never>
// ▼
const failure = Effect.fail(
new OperationFailedError()
)
fail(onSyncError: (e: any, args: any) => anyonSyncError(function (local var) err: unknownerr, args: any[]args)) : const die: (
defect: unknown
) => Effect<never>
Creates an effect that terminates a fiber with a specified error.
When to use
Use when you need an Effect to report an unrecoverable defect instead of a
typed error.
Details
The die function is used to signal a defect, which represents a critical
and unexpected error in the code. When invoked, it produces an effect that
does not handle the error and instead terminates the fiber.
The error channel of the resulting effect is of type never, indicating that
it cannot recover from this failure.
Example (Failing on division by zero)
import { Effect } from "effect"
const divide = (a: number, b: number) =>
b === 0
? Effect.die(new Error("Cannot divide by zero"))
: Effect.succeed(a / b)
// ┌─── Effect<number, never, never>
// ▼
const program = divide(1, 0)
Effect.runPromise(program).catch(console.error)
// Output:
// (FiberFailure) Error: Cannot divide by zero
// ...stack trace...
die(function (local var) err: unknownerr))
}
})) as any