class Cache extends Effect.Service<Cache>()("app/Cache", {
dependencies: [],
effect: Effect.gen(function* () {
yield* Effect.log("Hello, world!")
const randomNumber = Effect.fn(function* () {
return yield* Random.nextInt
})
const cachedRandomNumber = yield* Effect.cachedFunction(randomNumber)
return {
randomNumber: cachedRandomNumber,
}
}),
}) {}
const Runtime = ManagedRuntime.make(Layer.mergeAll(Cache.Default))
async function main() {
await pipe(
Effect.gen(function* () {
const cache = yield* Cache
const result1 = yield* cache.randomNumber(null)
const result2 = yield* cache.randomNumber(null)
const result3 = yield* cache.randomNumber(null)
const result4 = yield* cache.randomNumber(null)
console.log({ result1, result2, result3, result4 })
}),
Runtime.runPromise
)
await pipe(
Effect.gen(function* () {
const cache = yield* Cache
const result1 = yield* cache.randomNumber(null)
const result2 = yield* cache.randomNumber(null)
const result3 = yield* cache.randomNumber(null)
const result4 = yield* cache.randomNumber(null)
console.log({ result1, result2, result3, result4 })
}),
Runtime.runPromise
)
}
class Cache extends Effect.Service<Cache>()("app/Cache", {
dependencies: [],
effect: Effect.gen(function* () {
yield* Effect.log("Hello, world!")
const randomNumber = Effect.fn(function* () {
return yield* Random.nextInt
})
const cachedRandomNumber = yield* Effect.cachedFunction(randomNumber)
return {
randomNumber: cachedRandomNumber,
}
}),
}) {}
const Runtime = ManagedRuntime.make(Layer.mergeAll(Cache.Default))
async function main() {
await pipe(
Effect.gen(function* () {
const cache = yield* Cache
const result1 = yield* cache.randomNumber(null)
const result2 = yield* cache.randomNumber(null)
const result3 = yield* cache.randomNumber(null)
const result4 = yield* cache.randomNumber(null)
console.log({ result1, result2, result3, result4 })
}),
Runtime.runPromise
)
await pipe(
Effect.gen(function* () {
const cache = yield* Cache
const result1 = yield* cache.randomNumber(null)
const result2 = yield* cache.randomNumber(null)
const result3 = yield* cache.randomNumber(null)
const result4 = yield* cache.randomNumber(null)
console.log({ result1, result2, result3, result4 })
}),
Runtime.runPromise
)
}