import { Console, Context, Effect } from "effect"
interface Random {
readonly next: Effect.Effect<number>
}
const Random = Context.GenericTag<Random>("Random")
const createRandomLive = (): Random => ({
next: Effect.sync(() => Math.random())
})
const createRandomMocked = (): Random => ({
next: Effect.succeed(1)
})
const program = Random.pipe(
Effect.andThen((random) => random.next),
Effect.andThen((randomNumber) =>
Console.log(`random number: ${randomNumber}`)
)
)
const runnable = Effect.provideService(program, Random, createRandomMocked())
Effect.runPromise(runnable)
import { Console, Context, Effect } from "effect"
interface Random {
readonly next: Effect.Effect<number>
}
const Random = Context.GenericTag<Random>("Random")
const createRandomLive = (): Random => ({
next: Effect.sync(() => Math.random())
})
const createRandomMocked = (): Random => ({
next: Effect.succeed(1)
})
const program = Random.pipe(
Effect.andThen((random) => random.next),
Effect.andThen((randomNumber) =>
Console.log(`random number: ${randomNumber}`)
)
)
const runnable = Effect.provideService(program, Random, createRandomMocked())
Effect.runPromise(runnable)