class A extends Effect.Service<A>()("A", {
succeed: { doTheThing: () => Effect.succeed(true) }
}) {}
class B extends Effect.Service<B>()("B", {
effect: Effect.gen(function*() {
const a = yield* A
return {}
})
}) {}
class C extends Effect.Service<C>()("C", {
effect: Effect.gen(function*() {
const a = yield* A
return {}
})
}) {}
const MainLayerLive = Layer.mergeAll(
A.Default,
// Goal: Simplify this duplication.
B.Default.pipe(Layer.provide(A.Default)),
C.Default.pipe(Layer.provide(A.Default))
)
const ServerRuntime = ManagedRuntime.make(MainLayerLive)
class A extends Effect.Service<A>()("A", {
succeed: { doTheThing: () => Effect.succeed(true) }
}) {}
class B extends Effect.Service<B>()("B", {
effect: Effect.gen(function*() {
const a = yield* A
return {}
})
}) {}
class C extends Effect.Service<C>()("C", {
effect: Effect.gen(function*() {
const a = yield* A
return {}
})
}) {}
const MainLayerLive = Layer.mergeAll(
A.Default,
// Goal: Simplify this duplication.
B.Default.pipe(Layer.provide(A.Default)),
C.Default.pipe(Layer.provide(A.Default))
)
const ServerRuntime = ManagedRuntime.make(MainLayerLive)