1import * as Array from "effect/Array"
2import * as Effect from "effect/Effect"
3import * as Exit from "effect/Exit"
4import * as Request from "effect/Request"
5import * as Resolver from "effect/RequestResolver"
6
7class GetNameById extends Request.TaggedClass("GetNameById")<{
8 readonly id: number
9}, string> {}
10
11const UserResolver = Resolver.make<GetNameById>((entries) =>
12 Effect.sync(() => {
13 for (const entry of entries) {
14 entry.completeUnsafe(Exit.succeed(`User ${entry.request.id}`))
15 }
16 })
17)
18
19const effect = Effect.forEach(
20 Array.range(1, 100_000),
21 (id) => Effect.request(new GetNameById({ id }), UserResolver),
22 { concurrency: "unbounded" }
23)
24
25Effect.runFork(effect)