@@ -237,21 +237,36 @@ export const catchSomeDefect = dual<
237
237
238
238
/* @internal */
239
239
export const catchTag = dual <
240
- < K extends ( E extends { _tag : string } ? E [ "_tag" ] : never ) , E , A1 , E1 , R1 > (
241
- k : K ,
242
- f : ( e : Extract < E , { _tag : K } > ) => Effect . Effect < A1 , E1 , R1 >
243
- ) => < A , R > ( self : Effect . Effect < A , E , R > ) => Effect . Effect < A | A1 , Exclude < E , { _tag : K } > | E1 , R | R1 > ,
244
- < A , E , R , K extends ( E extends { _tag : string } ? E [ "_tag" ] : never ) , R1 , E1 , A1 > (
240
+ < 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 > ,
243
+ < A , E , R , const K extends Arr . NonEmptyReadonlyArray < E extends { _tag : string } ? E [ "_tag" ] : never > , R1 , E1 , A1 > (
245
244
self : Effect . Effect < A , E , R > ,
246
- k : K ,
247
- f : ( e : Extract < E , { _tag : K } > ) => Effect . Effect < A1 , E1 , R1 >
248
- ) => Effect . Effect < A | A1 , Exclude < E , { _tag : K } > | E1 , R | R1 >
249
- > ( 3 , < A , E , R , K extends ( E extends { _tag : string } ? E [ "_tag" ] : never ) , R1 , E1 , A1 > (
250
- self : Effect . Effect < A , E , R > ,
251
- k : K ,
252
- f : ( e : Extract < E , { _tag : K } > ) => Effect . Effect < A1 , E1 , R1 >
253
- ) : Effect . Effect < A | A1 , Exclude < E , { _tag : K } > | E1 , R | R1 > =>
254
- core . catchIf ( self , Predicate . isTagged ( k ) as Predicate . Refinement < E , Extract < E , { _tag : K } > > , f ) as any )
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
+ > (
248
+ ( args : any ) => core . isEffect ( args [ 0 ] ) ,
249
+ < A , E , R , const K extends Arr . NonEmptyReadonlyArray < E extends { _tag : string } ? E [ "_tag" ] : never > , R1 , E1 , A1 > (
250
+ self : Effect . Effect < A , E , R > ,
251
+ ...args : [ ...tags : K , f : ( e : Extract < NoInfer < E > , { _tag : K [ number ] } > ) => Effect . Effect < A1 , E1 , R1 > ]
252
+ ) : Effect . Effect < A | A1 , Exclude < E , { _tag : K [ number ] } > | E1 , R | R1 > => {
253
+ const f = args [ args . length - 1 ] as any
254
+ let predicate : Predicate . Predicate < E >
255
+ if ( args . length === 2 ) {
256
+ predicate = Predicate . isTagged ( args [ 0 ] as string )
257
+ } else {
258
+ predicate = ( e ) => {
259
+ const tag = Predicate . hasProperty ( e , "_tag" ) ? e [ "_tag" ] : undefined
260
+ if ( ! tag ) return false
261
+ for ( let i = 0 ; i < args . length - 1 ; i ++ ) {
262
+ if ( args [ i ] === tag ) return true
263
+ }
264
+ return false
265
+ }
266
+ }
267
+ return core . catchIf ( self , predicate as Predicate . Refinement < E , Extract < E , { _tag : K [ number ] } > > , f ) as any
268
+ }
269
+ )
255
270
256
271
/** @internal */
257
272
export const catchTags : {
0 commit comments