Layer.provide
Layer (Effect)同士を合成して、依存を解消した新たなLayerを生成する
Layer -> Layer -> Layer
例
2つのServiceを定義する
code:ts
import { Layer } from "effect";
import { Effect } from "effect";
class A extends Effect.Service<A>()("app/A", {
effect: Effect.gen(function* () {
const a = yield* Effect.succeed("a");
return { a };
}),
}) {}
class B extends Effect.Service<B>()("app/B", {
effect: Effect.gen(function* () {
const a = yield* A;
const b = yield* Effect.succeed("b");
return { b };
}),
dependencies: A.Default,
}) {}
このとき、2つのLayerを考える
code:ts
const b1 = B.Default; // Layer<B, never, never>
const b2 = B.DefaultWithoutDependencies; // Layer<B, never, A>
説明のために、同じBを使っているが、
b2は、dependenciesにAを指定してないようなServiceを別途定義したと想定すると良いmrsekut.icon
このとき、b2を用いて、依存を解決したb1と同じ型にしたい
Layer.provideを使って依存を解決したLayerを作れば良い
code:ts
const b = b2.pipe(Layer.provide(A.Default)); // Layer<B, never, never>