effect 3.16.2 → 3.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/Effect.ts CHANGED
@@ -7265,6 +7265,64 @@ export const catchSomeDefect: {
7265
7265
  * @category Error handling
7266
7266
  */
7267
7267
  export const catchTag: {
7268
+ /**
7269
+ * Catches and handles specific errors by their `_tag` field, which is used as a
7270
+ * discriminator.
7271
+ *
7272
+ * **When to Use**
7273
+ *
7274
+ * `catchTag` is useful when your errors are tagged with a readonly `_tag` field
7275
+ * that identifies the error type. You can use this function to handle specific
7276
+ * error types by matching the `_tag` value. This allows for precise error
7277
+ * handling, ensuring that only specific errors are caught and handled.
7278
+ *
7279
+ * The error type must have a readonly `_tag` field to use `catchTag`. This
7280
+ * field is used to identify and match errors.
7281
+ *
7282
+ * **Example** (Handling Errors by Tag)
7283
+ *
7284
+ * ```ts
7285
+ * import { Effect, Random } from "effect"
7286
+ *
7287
+ * class HttpError {
7288
+ * readonly _tag = "HttpError"
7289
+ * }
7290
+ *
7291
+ * class ValidationError {
7292
+ * readonly _tag = "ValidationError"
7293
+ * }
7294
+ *
7295
+ * // ┌─── Effect<string, HttpError | ValidationError, never>
7296
+ * // ▼
7297
+ * const program = Effect.gen(function* () {
7298
+ * const n1 = yield* Random.next
7299
+ * const n2 = yield* Random.next
7300
+ * if (n1 < 0.5) {
7301
+ * yield* Effect.fail(new HttpError())
7302
+ * }
7303
+ * if (n2 < 0.5) {
7304
+ * yield* Effect.fail(new ValidationError())
7305
+ * }
7306
+ * return "some result"
7307
+ * })
7308
+ *
7309
+ * // ┌─── Effect<string, ValidationError, never>
7310
+ * // ▼
7311
+ * const recovered = program.pipe(
7312
+ * // Only handle HttpError errors
7313
+ * Effect.catchTag("HttpError", (_HttpError) =>
7314
+ * Effect.succeed("Recovering from HttpError")
7315
+ * )
7316
+ * )
7317
+ * ```
7318
+ *
7319
+ * @see {@link catchTags} for a version that allows you to handle multiple error
7320
+ * types at once.
7321
+ *
7322
+ * @since 2.0.0
7323
+ * @category Error handling
7324
+ */
7325
+ <E, const K extends RA.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>>(...tags: K): <A, R>(self: Effect<A, E, R> & "missing error handler") => never
7268
7326
  /**
7269
7327
  * Catches and handles specific errors by their `_tag` field, which is used as a
7270
7328
  * discriminator.
@@ -7325,6 +7383,64 @@ export const catchTag: {
7325
7383
  <E, const K extends RA.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>, A1, E1, R1>(
7326
7384
  ...args: [...tags: K, f: (e: Extract<NoInfer<E>, { _tag: K[number] }>) => Effect<A1, E1, R1>]
7327
7385
  ): <A, R>(self: Effect<A, E, R>) => Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1>
7386
+ /**
7387
+ * Catches and handles specific errors by their `_tag` field, which is used as a
7388
+ * discriminator.
7389
+ *
7390
+ * **When to Use**
7391
+ *
7392
+ * `catchTag` is useful when your errors are tagged with a readonly `_tag` field
7393
+ * that identifies the error type. You can use this function to handle specific
7394
+ * error types by matching the `_tag` value. This allows for precise error
7395
+ * handling, ensuring that only specific errors are caught and handled.
7396
+ *
7397
+ * The error type must have a readonly `_tag` field to use `catchTag`. This
7398
+ * field is used to identify and match errors.
7399
+ *
7400
+ * **Example** (Handling Errors by Tag)
7401
+ *
7402
+ * ```ts
7403
+ * import { Effect, Random } from "effect"
7404
+ *
7405
+ * class HttpError {
7406
+ * readonly _tag = "HttpError"
7407
+ * }
7408
+ *
7409
+ * class ValidationError {
7410
+ * readonly _tag = "ValidationError"
7411
+ * }
7412
+ *
7413
+ * // ┌─── Effect<string, HttpError | ValidationError, never>
7414
+ * // ▼
7415
+ * const program = Effect.gen(function* () {
7416
+ * const n1 = yield* Random.next
7417
+ * const n2 = yield* Random.next
7418
+ * if (n1 < 0.5) {
7419
+ * yield* Effect.fail(new HttpError())
7420
+ * }
7421
+ * if (n2 < 0.5) {
7422
+ * yield* Effect.fail(new ValidationError())
7423
+ * }
7424
+ * return "some result"
7425
+ * })
7426
+ *
7427
+ * // ┌─── Effect<string, ValidationError, never>
7428
+ * // ▼
7429
+ * const recovered = program.pipe(
7430
+ * // Only handle HttpError errors
7431
+ * Effect.catchTag("HttpError", (_HttpError) =>
7432
+ * Effect.succeed("Recovering from HttpError")
7433
+ * )
7434
+ * )
7435
+ * ```
7436
+ *
7437
+ * @see {@link catchTags} for a version that allows you to handle multiple error
7438
+ * types at once.
7439
+ *
7440
+ * @since 2.0.0
7441
+ * @category Error handling
7442
+ */
7443
+ <A, E, R, const K extends RA.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>>(self: Effect<A, E, R> & "missing error handler", ...tags: K): never
7328
7444
  /**
7329
7445
  * Catches and handles specific errors by their `_tag` field, which is used as a
7330
7446
  * discriminator.
@@ -28166,21 +28282,20 @@ export namespace fn {
28166
28282
  * @category Models
28167
28283
  */
28168
28284
  export type Gen = {
28169
- <Self, Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>>(
28170
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>
28171
- ): (this: Self, ...args: Args) => Effect<
28285
+ <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>>(
28286
+ body: (...args: Args) => Generator<Eff, AEff, never>
28287
+ ): (...args: Args) => Effect<
28172
28288
  AEff,
28173
28289
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
28174
28290
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
28175
28291
  >
28176
28292
  <
28177
- Self,
28178
28293
  Eff extends YieldWrap<Effect<any, any, any>>,
28179
28294
  AEff,
28180
28295
  Args extends Array<any>,
28181
28296
  A extends Effect<any, any, any>
28182
28297
  >(
28183
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28298
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28184
28299
  a: (
28185
28300
  _: Effect<
28186
28301
  AEff,
@@ -28189,16 +28304,15 @@ export namespace fn {
28189
28304
  >,
28190
28305
  ...args: NoInfer<Args>
28191
28306
  ) => A
28192
- ): (this: Self, ...args: Args) => Effect.AsEffect<A>
28307
+ ): (...args: Args) => Effect.AsEffect<A>
28193
28308
  <
28194
- Self,
28195
28309
  Eff extends YieldWrap<Effect<any, any, any>>,
28196
28310
  AEff,
28197
28311
  Args extends Array<any>,
28198
28312
  A,
28199
28313
  B extends Effect<any, any, any>
28200
28314
  >(
28201
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28315
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28202
28316
  a: (
28203
28317
  _: Effect<
28204
28318
  AEff,
@@ -28208,9 +28322,8 @@ export namespace fn {
28208
28322
  ...args: NoInfer<Args>
28209
28323
  ) => A,
28210
28324
  b: (_: A, ...args: NoInfer<Args>) => B
28211
- ): (this: Self, ...args: Args) => Effect.AsEffect<B>
28325
+ ): (...args: Args) => Effect.AsEffect<B>
28212
28326
  <
28213
- Self,
28214
28327
  Eff extends YieldWrap<Effect<any, any, any>>,
28215
28328
  AEff,
28216
28329
  Args extends Array<any>,
@@ -28218,7 +28331,7 @@ export namespace fn {
28218
28331
  B,
28219
28332
  C extends Effect<any, any, any>
28220
28333
  >(
28221
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28334
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28222
28335
  a: (
28223
28336
  _: Effect<
28224
28337
  AEff,
@@ -28229,9 +28342,8 @@ export namespace fn {
28229
28342
  ) => A,
28230
28343
  b: (_: A, ...args: NoInfer<Args>) => B,
28231
28344
  c: (_: B, ...args: NoInfer<Args>) => C
28232
- ): (this: Self, ...args: Args) => Effect.AsEffect<C>
28345
+ ): (...args: Args) => Effect.AsEffect<C>
28233
28346
  <
28234
- Self,
28235
28347
  Eff extends YieldWrap<Effect<any, any, any>>,
28236
28348
  AEff,
28237
28349
  Args extends Array<any>,
@@ -28240,7 +28352,7 @@ export namespace fn {
28240
28352
  C,
28241
28353
  D extends Effect<any, any, any>
28242
28354
  >(
28243
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28355
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28244
28356
  a: (
28245
28357
  _: Effect<
28246
28358
  AEff,
@@ -28252,9 +28364,8 @@ export namespace fn {
28252
28364
  b: (_: A, ...args: NoInfer<Args>) => B,
28253
28365
  c: (_: B, ...args: NoInfer<Args>) => C,
28254
28366
  d: (_: C, ...args: NoInfer<Args>) => D
28255
- ): (this: Self, ...args: Args) => Effect.AsEffect<D>
28367
+ ): (...args: Args) => Effect.AsEffect<D>
28256
28368
  <
28257
- Self,
28258
28369
  Eff extends YieldWrap<Effect<any, any, any>>,
28259
28370
  AEff,
28260
28371
  Args extends Array<any>,
@@ -28264,7 +28375,7 @@ export namespace fn {
28264
28375
  D,
28265
28376
  E extends Effect<any, any, any>
28266
28377
  >(
28267
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28378
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28268
28379
  a: (
28269
28380
  _: Effect<
28270
28381
  AEff,
@@ -28277,9 +28388,8 @@ export namespace fn {
28277
28388
  c: (_: B, ...args: NoInfer<Args>) => C,
28278
28389
  d: (_: C, ...args: NoInfer<Args>) => D,
28279
28390
  e: (_: D, ...args: NoInfer<Args>) => E
28280
- ): (this: Self, ...args: Args) => Effect.AsEffect<E>
28391
+ ): (...args: Args) => Effect.AsEffect<E>
28281
28392
  <
28282
- Self,
28283
28393
  Eff extends YieldWrap<Effect<any, any, any>>,
28284
28394
  AEff,
28285
28395
  Args extends Array<any>,
@@ -28290,7 +28400,7 @@ export namespace fn {
28290
28400
  E,
28291
28401
  F extends Effect<any, any, any>
28292
28402
  >(
28293
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28403
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28294
28404
  a: (
28295
28405
  _: Effect<
28296
28406
  AEff,
@@ -28304,9 +28414,8 @@ export namespace fn {
28304
28414
  d: (_: C, ...args: NoInfer<Args>) => D,
28305
28415
  e: (_: D, ...args: NoInfer<Args>) => E,
28306
28416
  f: (_: E, ...args: NoInfer<Args>) => F
28307
- ): (this: Self, ...args: Args) => Effect.AsEffect<F>
28417
+ ): (...args: Args) => Effect.AsEffect<F>
28308
28418
  <
28309
- Self,
28310
28419
  Eff extends YieldWrap<Effect<any, any, any>>,
28311
28420
  AEff,
28312
28421
  Args extends Array<any>,
@@ -28318,7 +28427,7 @@ export namespace fn {
28318
28427
  F,
28319
28428
  G extends Effect<any, any, any>
28320
28429
  >(
28321
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28430
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28322
28431
  a: (
28323
28432
  _: Effect<
28324
28433
  AEff,
@@ -28333,9 +28442,8 @@ export namespace fn {
28333
28442
  e: (_: D, ...args: NoInfer<Args>) => E,
28334
28443
  f: (_: E, ...args: NoInfer<Args>) => F,
28335
28444
  g: (_: F, ...args: NoInfer<Args>) => G
28336
- ): (this: Self, ...args: Args) => Effect.AsEffect<G>
28445
+ ): (...args: Args) => Effect.AsEffect<G>
28337
28446
  <
28338
- Self,
28339
28447
  Eff extends YieldWrap<Effect<any, any, any>>,
28340
28448
  AEff,
28341
28449
  Args extends Array<any>,
@@ -28348,7 +28456,7 @@ export namespace fn {
28348
28456
  G,
28349
28457
  H extends Effect<any, any, any>
28350
28458
  >(
28351
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28459
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28352
28460
  a: (
28353
28461
  _: Effect<
28354
28462
  AEff,
@@ -28364,9 +28472,8 @@ export namespace fn {
28364
28472
  f: (_: E, ...args: NoInfer<Args>) => F,
28365
28473
  g: (_: F, ...args: NoInfer<Args>) => G,
28366
28474
  h: (_: G, ...args: NoInfer<Args>) => H
28367
- ): (this: Self, ...args: Args) => Effect.AsEffect<H>
28475
+ ): (...args: Args) => Effect.AsEffect<H>
28368
28476
  <
28369
- Self,
28370
28477
  Eff extends YieldWrap<Effect<any, any, any>>,
28371
28478
  AEff,
28372
28479
  Args extends Array<any>,
@@ -28380,7 +28487,7 @@ export namespace fn {
28380
28487
  H,
28381
28488
  I extends Effect<any, any, any>
28382
28489
  >(
28383
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28490
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28384
28491
  a: (
28385
28492
  _: Effect<
28386
28493
  AEff,
@@ -28397,7 +28504,7 @@ export namespace fn {
28397
28504
  g: (_: F, ...args: NoInfer<Args>) => G,
28398
28505
  h: (_: G, ...args: NoInfer<Args>) => H,
28399
28506
  i: (_: H, ...args: NoInfer<Args>) => I
28400
- ): (this: Self, ...args: Args) => Effect.AsEffect<I>
28507
+ ): (...args: Args) => Effect.AsEffect<I>
28401
28508
  }
28402
28509
 
28403
28510
  /**
@@ -28405,50 +28512,50 @@ export namespace fn {
28405
28512
  * @category Models
28406
28513
  */
28407
28514
  export type NonGen = {
28408
- <Self, Eff extends Effect<any, any, any>, Args extends Array<any>>(
28409
- body: (this: Self, ...args: Args) => Eff
28410
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28411
- <Self, Eff extends Effect<any, any, any>, A, Args extends Array<any>>(
28412
- body: (this: Self, ...args: Args) => A,
28515
+ <Eff extends Effect<any, any, any>, Args extends Array<any>>(
28516
+ body: (...args: Args) => Eff
28517
+ ): (...args: Args) => Effect.AsEffect<Eff>
28518
+ <Eff extends Effect<any, any, any>, A, Args extends Array<any>>(
28519
+ body: (...args: Args) => A,
28413
28520
  a: (_: A, ...args: NoInfer<Args>) => Eff
28414
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28415
- <Self, Eff extends Effect<any, any, any>, A, B, Args extends Array<any>>(
28416
- body: (this: Self, ...args: Args) => A,
28521
+ ): (...args: Args) => Effect.AsEffect<Eff>
28522
+ <Eff extends Effect<any, any, any>, A, B, Args extends Array<any>>(
28523
+ body: (...args: Args) => A,
28417
28524
  a: (_: A, ...args: NoInfer<Args>) => B,
28418
28525
  b: (_: B, ...args: NoInfer<Args>) => Eff
28419
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28420
- <Self, Eff extends Effect<any, any, any>, A, B, C, Args extends Array<any>>(
28421
- body: (this: Self, ...args: Args) => A,
28526
+ ): (...args: Args) => Effect.AsEffect<Eff>
28527
+ <Eff extends Effect<any, any, any>, A, B, C, Args extends Array<any>>(
28528
+ body: (...args: Args) => A,
28422
28529
  a: (_: A, ...args: NoInfer<Args>) => B,
28423
28530
  b: (_: B, ...args: NoInfer<Args>) => C,
28424
28531
  c: (_: C, ...args: NoInfer<Args>) => Eff
28425
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28426
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, Args extends Array<any>>(
28427
- body: (this: Self, ...args: Args) => A,
28532
+ ): (...args: Args) => Effect.AsEffect<Eff>
28533
+ <Eff extends Effect<any, any, any>, A, B, C, D, Args extends Array<any>>(
28534
+ body: (...args: Args) => A,
28428
28535
  a: (_: A, ...args: NoInfer<Args>) => B,
28429
28536
  b: (_: B, ...args: NoInfer<Args>) => C,
28430
28537
  c: (_: C, ...args: NoInfer<Args>) => D,
28431
28538
  d: (_: D, ...args: NoInfer<Args>) => Eff
28432
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28433
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, E, Args extends Array<any>>(
28434
- body: (this: Self, ...args: Args) => A,
28539
+ ): (...args: Args) => Effect.AsEffect<Eff>
28540
+ <Eff extends Effect<any, any, any>, A, B, C, D, E, Args extends Array<any>>(
28541
+ body: (...args: Args) => A,
28435
28542
  a: (_: A, ...args: NoInfer<Args>) => B,
28436
28543
  b: (_: B, ...args: NoInfer<Args>) => C,
28437
28544
  c: (_: C, ...args: NoInfer<Args>) => D,
28438
28545
  d: (_: D, ...args: NoInfer<Args>) => E,
28439
28546
  e: (_: E, ...args: NoInfer<Args>) => Eff
28440
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28441
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, E, F, Args extends Array<any>>(
28442
- body: (this: Self, ...args: Args) => A,
28547
+ ): (...args: Args) => Effect.AsEffect<Eff>
28548
+ <Eff extends Effect<any, any, any>, A, B, C, D, E, F, Args extends Array<any>>(
28549
+ body: (...args: Args) => A,
28443
28550
  a: (_: A, ...args: NoInfer<Args>) => B,
28444
28551
  b: (_: B, ...args: NoInfer<Args>) => C,
28445
28552
  c: (_: C, ...args: NoInfer<Args>) => D,
28446
28553
  d: (_: D, ...args: NoInfer<Args>) => E,
28447
28554
  e: (_: E, ...args: NoInfer<Args>) => F,
28448
28555
  f: (_: F, ...args: NoInfer<Args>) => Eff
28449
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28450
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, Args extends Array<any>>(
28451
- body: (this: Self, ...args: Args) => A,
28556
+ ): (...args: Args) => Effect.AsEffect<Eff>
28557
+ <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, Args extends Array<any>>(
28558
+ body: (...args: Args) => A,
28452
28559
  a: (_: A, ...args: NoInfer<Args>) => B,
28453
28560
  b: (_: B, ...args: NoInfer<Args>) => C,
28454
28561
  c: (_: C, ...args: NoInfer<Args>) => D,
@@ -28456,9 +28563,9 @@ export namespace fn {
28456
28563
  e: (_: E, ...args: NoInfer<Args>) => F,
28457
28564
  f: (_: F, ...args: NoInfer<Args>) => G,
28458
28565
  g: (_: G, ...args: NoInfer<Args>) => Eff
28459
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28460
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, Args extends Array<any>>(
28461
- body: (this: Self, ...args: Args) => A,
28566
+ ): (...args: Args) => Effect.AsEffect<Eff>
28567
+ <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, Args extends Array<any>>(
28568
+ body: (...args: Args) => A,
28462
28569
  a: (_: A, ...args: NoInfer<Args>) => B,
28463
28570
  b: (_: B, ...args: NoInfer<Args>) => C,
28464
28571
  c: (_: C, ...args: NoInfer<Args>) => D,
@@ -28467,9 +28574,9 @@ export namespace fn {
28467
28574
  f: (_: F, ...args: NoInfer<Args>) => G,
28468
28575
  g: (_: G, ...args: NoInfer<Args>) => H,
28469
28576
  h: (_: H, ...args: NoInfer<Args>) => Eff
28470
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28471
- <Self, Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, I, Args extends Array<any>>(
28472
- body: (this: Self, ...args: Args) => A,
28577
+ ): (...args: Args) => Effect.AsEffect<Eff>
28578
+ <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, I, Args extends Array<any>>(
28579
+ body: (...args: Args) => A,
28473
28580
  a: (_: A, ...args: NoInfer<Args>) => B,
28474
28581
  b: (_: B, ...args: NoInfer<Args>) => C,
28475
28582
  c: (_: C, ...args: NoInfer<Args>) => D,
@@ -28479,7 +28586,7 @@ export namespace fn {
28479
28586
  g: (_: G, ...args: NoInfer<Args>) => H,
28480
28587
  h: (_: H, ...args: NoInfer<Args>) => I,
28481
28588
  i: (_: H, ...args: NoInfer<Args>) => Eff
28482
- ): (this: Self, ...args: Args) => Effect.AsEffect<Eff>
28589
+ ): (...args: Args) => Effect.AsEffect<Eff>
28483
28590
  }
28484
28591
 
28485
28592
  /**
@@ -28487,15 +28594,15 @@ export namespace fn {
28487
28594
  * @category Models
28488
28595
  */
28489
28596
  export type Untraced = {
28490
- <Self, Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>>(
28491
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>
28492
- ): (this: Self, ...args: Args) => Effect<
28597
+ <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>>(
28598
+ body: (...args: Args) => Generator<Eff, AEff, never>
28599
+ ): (...args: Args) => Effect<
28493
28600
  AEff,
28494
28601
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
28495
28602
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
28496
28603
  >
28497
- <Self, Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A>(
28498
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28604
+ <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A>(
28605
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28499
28606
  a: (
28500
28607
  _: Effect<
28501
28608
  AEff,
@@ -28504,9 +28611,9 @@ export namespace fn {
28504
28611
  >,
28505
28612
  ...args: NoInfer<Args>
28506
28613
  ) => A
28507
- ): (this: Self, ...args: Args) => A
28508
- <Self, Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A, B>(
28509
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28614
+ ): (...args: Args) => A
28615
+ <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A, B>(
28616
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28510
28617
  a: (
28511
28618
  _: Effect<
28512
28619
  AEff,
@@ -28516,9 +28623,8 @@ export namespace fn {
28516
28623
  ...args: NoInfer<Args>
28517
28624
  ) => A,
28518
28625
  b: (_: A, ...args: NoInfer<Args>) => B
28519
- ): (this: Self, ...args: Args) => B
28626
+ ): (...args: Args) => B
28520
28627
  <
28521
- Self,
28522
28628
  Eff extends YieldWrap<Effect<any, any, any>>,
28523
28629
  AEff,
28524
28630
  Args extends Array<any>,
@@ -28526,7 +28632,7 @@ export namespace fn {
28526
28632
  B,
28527
28633
  C
28528
28634
  >(
28529
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28635
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28530
28636
  a: (
28531
28637
  _: Effect<
28532
28638
  AEff,
@@ -28537,9 +28643,8 @@ export namespace fn {
28537
28643
  ) => A,
28538
28644
  b: (_: A, ...args: NoInfer<Args>) => B,
28539
28645
  c: (_: B, ...args: NoInfer<Args>) => C
28540
- ): (this: Self, ...args: Args) => C
28646
+ ): (...args: Args) => C
28541
28647
  <
28542
- Self,
28543
28648
  Eff extends YieldWrap<Effect<any, any, any>>,
28544
28649
  AEff,
28545
28650
  Args extends Array<any>,
@@ -28548,7 +28653,7 @@ export namespace fn {
28548
28653
  C,
28549
28654
  D
28550
28655
  >(
28551
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28656
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28552
28657
  a: (
28553
28658
  _: Effect<
28554
28659
  AEff,
@@ -28560,9 +28665,8 @@ export namespace fn {
28560
28665
  b: (_: A, ...args: NoInfer<Args>) => B,
28561
28666
  c: (_: B, ...args: NoInfer<Args>) => C,
28562
28667
  d: (_: C, ...args: NoInfer<Args>) => D
28563
- ): (this: Self, ...args: Args) => D
28668
+ ): (...args: Args) => D
28564
28669
  <
28565
- Self,
28566
28670
  Eff extends YieldWrap<Effect<any, any, any>>,
28567
28671
  AEff,
28568
28672
  Args extends Array<any>,
@@ -28572,7 +28676,7 @@ export namespace fn {
28572
28676
  D,
28573
28677
  E
28574
28678
  >(
28575
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28679
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28576
28680
  a: (
28577
28681
  _: Effect<
28578
28682
  AEff,
@@ -28585,9 +28689,8 @@ export namespace fn {
28585
28689
  c: (_: B, ...args: NoInfer<Args>) => C,
28586
28690
  d: (_: C, ...args: NoInfer<Args>) => D,
28587
28691
  e: (_: D, ...args: NoInfer<Args>) => E
28588
- ): (this: Self, ...args: Args) => E
28692
+ ): (...args: Args) => E
28589
28693
  <
28590
- Self,
28591
28694
  Eff extends YieldWrap<Effect<any, any, any>>,
28592
28695
  AEff,
28593
28696
  Args extends Array<any>,
@@ -28598,7 +28701,7 @@ export namespace fn {
28598
28701
  E,
28599
28702
  F
28600
28703
  >(
28601
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28704
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28602
28705
  a: (
28603
28706
  _: Effect<
28604
28707
  AEff,
@@ -28612,9 +28715,8 @@ export namespace fn {
28612
28715
  d: (_: C, ...args: NoInfer<Args>) => D,
28613
28716
  e: (_: D, ...args: NoInfer<Args>) => E,
28614
28717
  f: (_: E, ...args: NoInfer<Args>) => F
28615
- ): (this: Self, ...args: Args) => F
28718
+ ): (...args: Args) => F
28616
28719
  <
28617
- Self,
28618
28720
  Eff extends YieldWrap<Effect<any, any, any>>,
28619
28721
  AEff,
28620
28722
  Args extends Array<any>,
@@ -28626,7 +28728,7 @@ export namespace fn {
28626
28728
  F,
28627
28729
  G
28628
28730
  >(
28629
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28731
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28630
28732
  a: (
28631
28733
  _: Effect<
28632
28734
  AEff,
@@ -28641,9 +28743,8 @@ export namespace fn {
28641
28743
  e: (_: D, ...args: NoInfer<Args>) => E,
28642
28744
  f: (_: E, ...args: NoInfer<Args>) => F,
28643
28745
  g: (_: F, ...args: NoInfer<Args>) => G
28644
- ): (this: Self, ...args: Args) => G
28746
+ ): (...args: Args) => G
28645
28747
  <
28646
- Self,
28647
28748
  Eff extends YieldWrap<Effect<any, any, any>>,
28648
28749
  AEff,
28649
28750
  Args extends Array<any>,
@@ -28656,7 +28757,7 @@ export namespace fn {
28656
28757
  G,
28657
28758
  H
28658
28759
  >(
28659
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28760
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28660
28761
  a: (
28661
28762
  _: Effect<
28662
28763
  AEff,
@@ -28672,9 +28773,8 @@ export namespace fn {
28672
28773
  f: (_: E, ...args: NoInfer<Args>) => F,
28673
28774
  g: (_: F, ...args: NoInfer<Args>) => G,
28674
28775
  h: (_: G, ...args: NoInfer<Args>) => H
28675
- ): (this: Self, ...args: Args) => H
28776
+ ): (...args: Args) => H
28676
28777
  <
28677
- Self,
28678
28778
  Eff extends YieldWrap<Effect<any, any, any>>,
28679
28779
  AEff,
28680
28780
  Args extends Array<any>,
@@ -28688,7 +28788,7 @@ export namespace fn {
28688
28788
  H,
28689
28789
  I
28690
28790
  >(
28691
- body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
28791
+ body: (...args: Args) => Generator<Eff, AEff, never>,
28692
28792
  a: (
28693
28793
  _: Effect<
28694
28794
  AEff,
@@ -28705,7 +28805,7 @@ export namespace fn {
28705
28805
  g: (_: F, ...args: NoInfer<Args>) => G,
28706
28806
  h: (_: G, ...args: NoInfer<Args>) => H,
28707
28807
  i: (_: H, ...args: NoInfer<Args>) => I
28708
- ): (this: Self, ...args: Args) => I
28808
+ ): (...args: Args) => I
28709
28809
  }
28710
28810
  }
28711
28811
 
@@ -236,19 +236,29 @@ export const catchSomeDefect = dual<
236
236
  )
237
237
 
238
238
  /* @internal */
239
- export const catchTag = dual<
239
+ export const catchTag: {
240
+ <E, const K extends Arr.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>>(
241
+ ...tags: K
242
+ ): <A, R>(self: Effect.Effect<A, E, R>) => never
240
243
  <E, const K extends Arr.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>, A1, E1, R1>(
241
- ...args: [...tags: K, f: (e: Extract<NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>]
242
- ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1>,
244
+ ...args: [...tags: K, f: (e: Extract<Types.NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>]
245
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1>
246
+ <A, E, R, const K extends Arr.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>>(
247
+ self: Effect.Effect<A, E, R>,
248
+ ...tags: K
249
+ ): never
243
250
  <A, E, R, const K extends Arr.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>, R1, E1, A1>(
244
251
  self: Effect.Effect<A, E, R>,
245
- ...args: [...tags: K, f: (e: Extract<NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>]
246
- ) => Effect.Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1>
247
- >(
252
+ ...args: [...tags: K, f: (e: Extract<Types.NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>]
253
+ ): Effect.Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1>
254
+ } = dual(
248
255
  (args: any) => core.isEffect(args[0]),
249
256
  <A, E, R, const K extends Arr.NonEmptyReadonlyArray<E extends { _tag: string } ? E["_tag"] : never>, R1, E1, A1>(
250
257
  self: Effect.Effect<A, E, R>,
251
- ...args: [...tags: K, f: (e: Extract<NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>]
258
+ ...args: [
259
+ ...tags: K & { [I in keyof K]: E extends { _tag: string } ? E["_tag"] : never },
260
+ f: (e: Extract<Types.NoInfer<E>, { _tag: K[number] }>) => Effect.Effect<A1, E1, R1>
261
+ ]
252
262
  ): Effect.Effect<A | A1, Exclude<E, { _tag: K[number] }> | E1, R | R1> => {
253
263
  const f = args[args.length - 1] as any
254
264
  let predicate: Predicate.Predicate<E>
@@ -266,7 +276,7 @@ export const catchTag = dual<
266
276
  }
267
277
  return core.catchIf(self, predicate as Predicate.Refinement<E, Extract<E, { _tag: K[number] }>>, f) as any
268
278
  }
269
- )
279
+ ) as any
270
280
 
271
281
  /** @internal */
272
282
  export const catchTags: {
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.16.2"
1
+ let moduleVersion = "3.16.3"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4