import { Context, Effect, Layer, Clock, ManagedRuntime } from "effect"
class Greeter extends Context.Tag("Greeter")<
Greeter,
{
greet: Effect.Effect<string>
}
>() {}
const GreeterLive = (msg: string) => Layer.effect(
Greeter,
Effect.gen(function* () {
const now = yield* Clock.currentTimeMillis
return {
greet: Effect.succeed(`${msg}: ${now}`)
}
})
)
const runtime = ManagedRuntime.make(GreeterLive("Managed Runtime"))
const program = Effect.gen(function* () {
const greeter = yield* Greeter
return yield* greeter.greet
})
export default {
async fetch(request, env, ctx): Promise<Response> {
const result = program.pipe(runtime.runSync)
const result2 = Effect.runSync(program.pipe(Effect.provide(GreeterLive("Effect.provide"))))
return new Response(`${result}\n${result2}`);
},
} satisfies ExportedHandler<Env>;
import { Context, Effect, Layer, Clock, ManagedRuntime } from "effect"
class Greeter extends Context.Tag("Greeter")<
Greeter,
{
greet: Effect.Effect<string>
}
>() {}
const GreeterLive = (msg: string) => Layer.effect(
Greeter,
Effect.gen(function* () {
const now = yield* Clock.currentTimeMillis
return {
greet: Effect.succeed(`${msg}: ${now}`)
}
})
)
const runtime = ManagedRuntime.make(GreeterLive("Managed Runtime"))
const program = Effect.gen(function* () {
const greeter = yield* Greeter
return yield* greeter.greet
})
export default {
async fetch(request, env, ctx): Promise<Response> {
const result = program.pipe(runtime.runSync)
const result2 = Effect.runSync(program.pipe(Effect.provide(GreeterLive("Effect.provide"))))
return new Response(`${result}\n${result2}`);
},
} satisfies ExportedHandler<Env>;