<A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>
readonly onDone: (leftover: L) => Effect<AH, EH, RH>
}): <R>(
self: Pull<A, E, L, R>
) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
<A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(
self: Pull<A, E, L, R>,
options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>
readonly onDone: (leftover: L) => Effect<AH, EH, RH>
}
): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>Pattern matches on a Pull, handling success, failure, and done cases.
When to use
Use to handle all three Pull outcomes with effectful handlers.
Example (Matching Pull outcomes)
import { Cause, Effect, Pull } from "effect"
const pull = Cause.done("stream ended")
const result = Pull.matchEffect(pull, {
onSuccess: (value) => Effect.succeed(`Got value: ${value}`),
onFailure: (cause) => Effect.succeed(`Got error: ${cause}`),
onDone: (leftover) => Effect.succeed(`Stream halted with: ${leftover}`)
})export const const matchEffect: {
<
A,
E,
L,
AS,
ES,
RS,
AF,
EF,
RF,
AH,
EH,
RH
>(options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}): <R>(
self: Pull<A, E, L, R>
) => Effect<
AS | AF | AH,
ES | EF | EH,
R | RS | RF | RH
>
<
A,
E,
L,
R,
AS,
ES,
RS,
AF,
EF,
RF,
AH,
EH,
RH
>(
self: Pull<A, E, L, R>,
options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
): Effect<
AS | AF | AH,
ES | EF | EH,
R | RS | RF | RH
>
}
Pattern matches on a Pull, handling success, failure, and done cases.
When to use
Use to handle all three Pull outcomes with effectful handlers.
Example (Matching Pull outcomes)
import { Cause, Effect, Pull } from "effect"
const pull = Cause.done("stream ended")
const result = Pull.matchEffect(pull, {
onSuccess: (value) => Effect.succeed(`Got value: ${value}`),
onFailure: (cause) => Effect.succeed(`Got error: ${cause}`),
onDone: (leftover) => Effect.succeed(`Stream halted with: ${leftover}`)
})
matchEffect: {
<function (type parameter) A in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) AS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS, function (type parameter) AF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF, function (type parameter) AH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>(options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>onSuccess: (value: Avalue: function (type parameter) A in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
onFailure: (failure: Cause.Cause<E>(parameter) failure: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
failure: import CauseCause.interface Cause<out E>A structured representation of how an Effect failed.
When to use
Use to preserve the full structured failure information for an effect instead
of collapsing it to a single error value.
Details
Access the individual failure entries through the reasons array, then
narrow each entry with
isFailReason
,
isDieReason
, or
- Use
hasFails
/
hasDies
/
hasInterrupts
to test
for the presence of specific reason kinds without iterating.
- Use
findError
/
findDefect
to extract the first value
of a given kind.
- Use
combine
to merge two causes.
Cause implements Equal — two causes with the same reasons (by value)
compare as equal.
Example (Creating and inspecting a cause)
import { Cause } from "effect"
const cause = Cause.fail("Something went wrong")
console.log(cause.reasons.length) // 1
console.log(Cause.isFailReason(cause.reasons[0])) // true
Companion namespace for the Cause interface.
Cause<function (type parameter) E in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E>) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF>
readonly onDone: (leftover: L) => Effect<AH, EH, RH>onDone: (leftover: Lleftover: function (type parameter) L in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>
}): <function (type parameter) R in <R>(self: Pull<A, E, L, R>): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>R>(self: Pull<A, E, L, R>(parameter) self: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface Pull<out A, out E = never, out Done = void, out R = never>An effectful pull step that either produces a value, fails with E, or
signals completion with Cause.Done<Done>.
When to use
Use to model one low-level pull step when a consumer repeatedly evaluates an
effect that may emit a value, fail normally, or signal normal completion
through Cause.Done.
Details
Pull represents completion in the error channel so low-level stream
consumers can distinguish ordinary failures from end-of-input and carry a
leftover value when needed.
Pull<function (type parameter) A in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) R in <R>(self: Pull<A, E, L, R>): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>R>) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS | function (type parameter) AF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF | function (type parameter) AH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) ES in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES | function (type parameter) EF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF | function (type parameter) EH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) R in <R>(self: Pull<A, E, L, R>): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>R | function (type parameter) RS in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS | function (type parameter) RF in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF | function (type parameter) RH in <A, E, L, AS, ES, RS, AF, EF, RF, AH, EH, RH>(options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): <R>(self: Pull<A, E, L, R>) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>
<function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R, function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS, function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF, function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>(self: Pull<A, E, L, R>(parameter) self: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface Pull<out A, out E = never, out Done = void, out R = never>An effectful pull step that either produces a value, fails with E, or
signals completion with Cause.Done<Done>.
When to use
Use to model one low-level pull step when a consumer repeatedly evaluates an
effect that may emit a value, fail normally, or signal normal completion
through Cause.Done.
Details
Pull represents completion in the error channel so low-level stream
consumers can distinguish ordinary failures from end-of-input and carry a
leftover value when needed.
Pull<function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R>, options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>onSuccess: (value: Avalue: function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
onFailure: (failure: Cause.Cause<E>(parameter) failure: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
failure: import CauseCause.interface Cause<out E>A structured representation of how an Effect failed.
When to use
Use to preserve the full structured failure information for an effect instead
of collapsing it to a single error value.
Details
Access the individual failure entries through the reasons array, then
narrow each entry with
isFailReason
,
isDieReason
, or
- Use
hasFails
/
hasDies
/
hasInterrupts
to test
for the presence of specific reason kinds without iterating.
- Use
findError
/
findDefect
to extract the first value
of a given kind.
- Use
combine
to merge two causes.
Cause implements Equal — two causes with the same reasons (by value)
compare as equal.
Example (Creating and inspecting a cause)
import { Cause } from "effect"
const cause = Cause.fail("Something went wrong")
console.log(cause.reasons.length) // 1
console.log(Cause.isFailReason(cause.reasons[0])) // true
Companion namespace for the Cause interface.
Cause<function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E>) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF>
readonly onDone: (leftover: L) => Effect<AH, EH, RH>onDone: (leftover: Lleftover: function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>
}): interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS | function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF | function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES | function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF | function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R | function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS | function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF | function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>
} = dual<(...args: Array<any>) => any, <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>>(arity: 2, body: <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>): ((...args: Array<any>) => any) & (<A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}) => Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>) (+1 overload)
Creates a function that can be called in data-first style or data-last
(pipe-friendly) style.
When to use
Use to expose one implementation through both direct and pipe-friendly
call styles.
Details
Pass either the arity of the uncurried function or a predicate that decides
whether the current call is data-first. Arity is the common case. Use a
predicate when optional arguments make arity ambiguous.
Example (Selecting data-first or data-last style by arity)
import { Function, pipe } from "effect"
const sum = Function.dual<
(that: number) => (self: number) => number,
(self: number, that: number) => number
>(2, (self, that) => self + that)
console.log(sum(2, 3)) // 5
console.log(pipe(2, sum(3))) // 5
Example (Defining overloads with call signatures)
import { Function, pipe } from "effect"
const sum: {
(that: number): (self: number) => number
(self: number, that: number): number
} = Function.dual(2, (self: number, that: number): number => self + that)
console.log(sum(2, 3)) // 5
console.log(pipe(2, sum(3))) // 5
Example (Selecting data-first or data-last style with a predicate)
import { Function, pipe } from "effect"
const sum = Function.dual<
(that: number) => (self: number) => number,
(self: number, that: number) => number
>(
(args) => args.length === 2,
(self, that) => self + that
)
console.log(sum(2, 3)) // 5
console.log(pipe(2, sum(3))) // 5
dual(2, <function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R, function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS, function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF, function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>(self: Pull<A, E, L, R>(parameter) self: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface Pull<out A, out E = never, out Done = void, out R = never>An effectful pull step that either produces a value, fails with E, or
signals completion with Cause.Done<Done>.
When to use
Use to model one low-level pull step when a consumer repeatedly evaluates an
effect that may emit a value, fail normally, or signal normal completion
through Cause.Done.
Details
Pull represents completion in the error channel so low-level stream
consumers can distinguish ordinary failures from end-of-input and carry a
leftover value when needed.
Pull<function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A, function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E, function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R>, options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>onSuccess: (value: Avalue: function (type parameter) A in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
A) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES, function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
onFailure: (failure: Cause.Cause<E>(parameter) failure: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
failure: import CauseCause.interface Cause<out E>A structured representation of how an Effect failed.
When to use
Use to preserve the full structured failure information for an effect instead
of collapsing it to a single error value.
Details
Access the individual failure entries through the reasons array, then
narrow each entry with
isFailReason
,
isDieReason
, or
- Use
hasFails
/
hasDies
/
hasInterrupts
to test
for the presence of specific reason kinds without iterating.
- Use
findError
/
findDefect
to extract the first value
of a given kind.
- Use
combine
to merge two causes.
Cause implements Equal — two causes with the same reasons (by value)
compare as equal.
Example (Creating and inspecting a cause)
import { Cause } from "effect"
const cause = Cause.fail("Something went wrong")
console.log(cause.reasons.length) // 1
console.log(Cause.isFailReason(cause.reasons[0])) // true
Companion namespace for the Cause interface.
Cause<function (type parameter) E in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
E>) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF, function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF, function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF>
readonly onDone: (leftover: L) => Effect<AH, EH, RH>onDone: (leftover: Lleftover: function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L) => interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH>
}): interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS | function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF | function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES | function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF | function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) R in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
R | function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS | function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF | function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH> =>
import internalEffectinternalEffect.const matchCauseEffect: {
<E, A2, E2, R2, A, A3, E3, R3>(options: {
readonly onFailure: (
cause: Cause.Cause<E>
) => Effect.Effect<A2, E2, R2>
readonly onSuccess: (
a: A
) => Effect.Effect<A3, E3, R3>
}): <R>(
self: Effect.Effect<A, E, R>
) => Effect.Effect<
A2 | A3,
E2 | E3,
R2 | R3 | R
>
<A, E, R, A2, E2, R2, A3, E3, R3>(
self: Effect.Effect<A, E, R>,
options: {
readonly onFailure: (
cause: Cause.Cause<E>
) => Effect.Effect<A2, E2, R2>
readonly onSuccess: (
a: A
) => Effect.Effect<A3, E3, R3>
}
): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
}
matchCauseEffect(self: Pull<A, E, L, R>(parameter) self: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self, {
onSuccess: (value: A) => Effect<AS, ES, RS>onSuccess: options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options.onSuccess: (value: A) => Effect<AS, ES, RS>onSuccess,
onFailure: (
cause: Cause.Cause<E | Cause.Done<L>>
) => Effect<
AS | AF | AH,
ES | EF | EH,
RS | RF | RH
>
onFailure: (cause: Cause.Cause<E | Cause.Done<L>>(parameter) cause: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
cause): interface Effect<out A, out E = never, out R = never>The Effect interface defines a value that lazily describes a workflow or
job. The workflow requires some context R, and may fail with an error of
type E, or succeed with a value of type A.
When to use
Use when you need to represent a lazy, composable workflow that can require
services, fail with a typed error, or succeed with a typed value.
Details
Effect values model resourceful interaction with the outside world,
including synchronous, asynchronous, concurrent, and parallel interaction.
They use a fiber-based concurrency model, with built-in support for
scheduling, fine-grained interruption, structured concurrency, and high
scalability.
To run an Effect value, you need a Runtime, which is a type that is
capable of executing Effect values.
Effect<function (type parameter) AS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AS | function (type parameter) AF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AF | function (type parameter) AH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
AH, function (type parameter) ES in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
ES | function (type parameter) EF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EF | function (type parameter) EH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
EH, function (type parameter) RS in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RS | function (type parameter) RF in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RF | function (type parameter) RH in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
RH> => {
const const halt: Result.Result<
Cause.Done<L> | Cause.Done.Only<E>,
Cause.Cause<Exclude<E, Cause.Done<any>>>
>
halt = const filterDone: <E>(
input: Cause.Cause<E>
) => Result.Result<
Cause.Done.Only<E>,
Cause.Cause<ExcludeDone<E>>
>
Finds a Cause.Done failure in a Cause.
When to use
Use to separate Cause.Done completion from ordinary causes while preserving
the typed done value.
Details
Returns a successful Result with the Cause.Done value when one is
present, otherwise returns a failed Result containing the non-done cause.
filterDone(cause: Cause.Cause<E | Cause.Done<L>>(parameter) cause: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
cause)
return !import ResultResult.const isFailure: <A, E>(
self: Result<A, E>
) => self is Failure<A, E>
Checks whether a Result is a Failure.
When to use
Use to narrow a known Result to the Failure variant.
Details
- Acts as a TypeScript type guard, narrowing to
Failure<A, E>
- After narrowing, you can access
.failure to read the error value
Example (Narrowing to failure)
import { Result } from "effect"
const result = Result.fail("oops")
if (Result.isFailure(result)) {
console.log(result.failure)
// Output: "oops"
}
isFailure(const halt: Result.Result<
Cause.Done<L> | Cause.Done.Only<E>,
Cause.Cause<Exclude<E, Cause.Done<any>>>
>
halt) ? options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options.onDone: (leftover: L) => Effect<AH, EH, RH>onDone(const halt: Result.Success<
Cause.Done<L> | Cause.Done.Only<E>,
Cause.Cause<Exclude<E, Cause.Done<any>>>
>
const halt: {
_tag: "Success";
_op: "Success";
success: A;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
halt.Success<Done<L> | Done<A = void>.Only<E>, Cause<Exclude<E, Done<any>>>>.success: Cause.Done<L> | Cause.Done.Only<E>success.Done<A = void>.value: unknownvalue as function (type parameter) L in <A, E, L, R, AS, ES, RS, AF, EF, RF, AH, EH, RH>(self: Pull<A, E, L, R>, options: {
readonly onSuccess: (value: A) => Effect<AS, ES, RS>;
readonly onFailure: (failure: Cause.Cause<E>) => Effect<AF, EF, RF>;
readonly onDone: (leftover: L) => Effect<AH, EH, RH>;
}): Effect<AS | AF | AH, ES | EF | EH, R | RS | RF | RH>
L) : options: {
readonly onSuccess: (
value: A
) => Effect<AS, ES, RS>
readonly onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
readonly onDone: (
leftover: L
) => Effect<AH, EH, RH>
}
options.onFailure: (
failure: Cause.Cause<E>
) => Effect<AF, EF, RF>
onFailure(const halt: Result.Failure<
Cause.Done<L> | Cause.Done.Only<E>,
Cause.Cause<Exclude<E, Cause.Done<any>>>
>
const halt: {
_tag: "Failure";
_op: "Failure";
failure: E;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
halt.Failure<Done<L> | Done<A = void>.Only<E>, Cause<Exclude<E, Done<any>>>>.failure: Cause.Cause<Exclude<E, Cause.Done<any>>>(property) Failure<Done<L> | Done<A = void>.Only<E>, Cause<Exclude<E, Done<any>>>>.failure: {
reasons: ReadonlyArray<Reason<E>>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
failure)
}
}))