| 530 | }); |
| 531 | |
| 532 | const handleErrorAsResult = <R, E extends Effect, ErrorName extends string>( |
| 533 | self: Effected<Effect.Error<ErrorName> | E, R>, |
| 534 | ): Effected<E, Result<R, { error: ErrorName; message?: string }>> => { |
| 535 | const isErrorEffect = (name: string | symbol): name is `error:${ErrorName}` => { |
| 536 | if (typeof name === "symbol") return false; |
| 537 | return name.startsWith("error:"); |
| 538 | }; |
| 539 | |
| 540 | return self |
| 541 | .andThen((value) => ok(value)) |
| 542 | .handle(isErrorEffect, (({ effect, terminate }: any, message: any) => { |
| 543 | terminate(err({ error: effect.name.slice("error:".length), message })); |
| 544 | }) as never) as Effected<E, Result<R, { error: ErrorName; message?: string }>>; |
| 545 | }; |
| 546 | |
| 547 | const range2 = (start: number, stop: number) => handleErrorAsResult(range(start, stop)); |
| 548 | |