| 521 | const log: EffectFactory<Log> = effect("println"); |
| 522 | |
| 523 | const range = (start: number, stop: number): Effected<TypeError | RangeError | Log, number[]> => |
| 524 | effected(function* () { |
| 525 | if (start >= stop) return yield* rangeError("Start must be less than stop"); |
| 526 | if (!Number.isInteger(start) || !Number.isInteger(stop)) |
| 527 | return yield* typeError("Start and stop must be integers"); |
| 528 | yield* log(`Generating range from ${start} to ${stop}`); |
| 529 | return Array.from({ length: stop - start }, (_, i) => start + i); |
| 530 | }); |
| 531 | |
| 532 | const handleErrorAsResult = <R, E extends Effect, ErrorName extends string>( |
| 533 | self: Effected<Effect.Error<ErrorName> | E, R>, |