diff --git a/packages/effect/src/Effect.ts b/packages/effect/src/Effect.ts index 4fd271ec9a..f6d8a7858a 100644 --- a/packages/effect/src/Effect.ts +++ b/packages/effect/src/Effect.ts @@ -3546,17 +3546,17 @@ export const bind: { * results in a Do notation pipeline. * * @example - * import { Effect, pipe } from "effect" + * import { Effect, Either, pipe } from "effect" * * const result = pipe( * Effect.Do, * Effect.bind("x", () => Effect.succeed(2)), * Effect.bindAll(({ x }) => ({ * a: Effect.succeed(x), - * b: Effect.fail('ops'), - * }), { concurrency: 2, mode: 'either' }) + * b: Effect.fail("oops"), + * }), { concurrency: 2, mode: "either" }) * ) - * assert.deepStrictEqual(Effect.runSync(result), { x: 2, a: Either.right(2), b: Either.left('ops') }) + * assert.deepStrictEqual(Effect.runSync(result), { x: 2, a: Either.right(2), b: Either.left("oops") }) * * @category do notation * @since 3.7.0 @@ -3576,18 +3576,13 @@ export const bindAll: { options?: undefined | O ): ( self: Effect - ) => Effect< - { - [K in keyof X | keyof A]: K extends keyof A ? A[K] : - K extends keyof Effect.Success< - All.ReturnObject> - > ? Effect.Success>>[K] : - never - }, - | E1 - | Effect.Error>>, - R1 | Effect.Context - > + ) => [All.ReturnObject>] extends [Effect] + ? Effect< + { [K in keyof A | keyof Success]: K extends keyof A ? A[K] : K extends keyof Success ? Success[K] : never }, + E1 | Error, + R1 | Context + > + : never < A extends object, X extends Record>, @@ -3608,20 +3603,13 @@ export const bindAll: { readonly mode?: "default" | "validate" | "either" | undefined readonly concurrentFinalizers?: boolean | undefined } - ): Effect< - { - [K in keyof X | keyof A]: K extends keyof A ? A[K] : - K extends keyof Effect.Success< - All.ReturnObject> - > ? Effect.Success< - All.ReturnObject> - >[K] : - never - }, - | E1 - | Effect.Error>>, - R1 | Effect.Context - > + ): [All.ReturnObject>] extends [Effect] + ? Effect< + { [K in keyof A | keyof Success]: K extends keyof A ? A[K] : K extends keyof Success ? Success[K] : never }, + E1 | Error, + R1 | Context + > + : never } = circular.bindAll /** diff --git a/packages/effect/src/internal/effect/circular.ts b/packages/effect/src/internal/effect/circular.ts index 14159624c0..5a3fdbd3c1 100644 --- a/packages/effect/src/internal/effect/circular.ts +++ b/packages/effect/src/internal/effect/circular.ts @@ -720,22 +720,21 @@ export const bindAll: { >( f: (a: A) => [Extract] extends [never] ? X : `Duplicate keys`, options?: undefined | O - ): (self: Effect.Effect) => Effect.Effect< - { - [K in keyof X | keyof A]: K extends keyof A ? A[K] : - K extends keyof Effect.Effect.Success< - Effect.All.ReturnObject> - > ? Effect.Effect.Success< - Effect.All.ReturnObject> - >[K] : - never - }, - | E1 - | Effect.Effect.Error< - Effect.All.ReturnObject> - >, - R1 | Effect.Effect.Context - > + ): ( + self: Effect.Effect + ) => [Effect.All.ReturnObject>] extends + [Effect.Effect] ? Effect.Effect< + { + [K in keyof A | keyof Success]: K extends keyof A ? A[K] + : K extends keyof Success ? Success[K] + : never + }, + | E1 + | Error, + R1 | Context + > + : never + < A extends object, X extends Record>, @@ -756,22 +755,18 @@ export const bindAll: { readonly mode?: "default" | "validate" | "either" | undefined readonly concurrentFinalizers?: boolean | undefined } - ): Effect.Effect< - { - [K in keyof X | keyof A]: K extends keyof A ? A[K] : - K extends keyof Effect.Effect.Success< - Effect.All.ReturnObject> - > ? Effect.Effect.Success< - Effect.All.ReturnObject> - >[K] : - never - }, - | E1 - | Effect.Effect.Error< - Effect.All.ReturnObject> - >, - R1 | Effect.Effect.Context - > + ): [Effect.All.ReturnObject>] extends + [Effect.Effect] ? Effect.Effect< + { + [K in keyof A | keyof Success]: K extends keyof A ? A[K] + : K extends keyof Success ? Success[K] + : never + }, + | E1 + | Error, + R1 | Context + > + : never } = dual((args) => core.isEffect(args[0]), < A extends object, X extends Record>, diff --git a/packages/effect/test/Effect/do-notation.test.ts b/packages/effect/test/Effect/do-notation.test.ts index e085da290a..91c29ed1f5 100644 --- a/packages/effect/test/Effect/do-notation.test.ts +++ b/packages/effect/test/Effect/do-notation.test.ts @@ -87,7 +87,6 @@ describe("do notation", () => { ) expectLeft(getTest({ mode: "default" }), 2) - expectRight(getTest({ mode: "either" }), { a: Either.left(2), b: Either.right("ops"),