export interface CustomRandom {
readonly next: () => Effect.Effect<never, never, number>
readonly other: () => Effect.Effect<never, never, string> // won't be used
}
export const CustomRandom = Context.Tag<CustomRandom>()
export const foo: Effect.Effect<
Pick<CustomRandom, "next">,
never,
number
> = pipe(Effect.flatMap(CustomRandom, (r) => r.next()))
export const runFoo = Effect.runSync(
// @ts-expect-error - doesn't compile
pipe(
foo,
Effect.provideService(CustomRandom, {
next: () => Effect.succeed(Math.random()),
other: () => Effect.succeed(`${Math.random()}`),
})
)
)
export interface CustomRandom {
readonly next: () => Effect.Effect<never, never, number>
readonly other: () => Effect.Effect<never, never, string> // won't be used
}
export const CustomRandom = Context.Tag<CustomRandom>()
export const foo: Effect.Effect<
Pick<CustomRandom, "next">,
never,
number
> = pipe(Effect.flatMap(CustomRandom, (r) => r.next()))
export const runFoo = Effect.runSync(
// @ts-expect-error - doesn't compile
pipe(
foo,
Effect.provideService(CustomRandom, {
next: () => Effect.succeed(Math.random()),
other: () => Effect.succeed(`${Math.random()}`),
})
)
)