Extending or reusing code for effect services in the Effect Typescript library involves creating ...

how to do extends (or reuse code) for effect service ?

interface IRes1 {
  fn1: Effect.Effect<number>;
}
export class Res1 extends Effect.Tag("Res1")<Res1, IRes1>() {
  accessor = true;
}
interface IRes2 extends IRes1 {
  fn2: Effect.Effect<string>;
}
export class Res2 extends Effect.Tag("Res2")<Res2, IRes2>() {
  accessor = true;
}
const LiveRes1 = Layer.succeed(Res1, {
  fn1: Effect.succeed(10),
});
const LiveRes2 = Layer.succeed(Res2, {
  fn1: Effect.succeed(10),
  fn2: Effect.succeed("20"),
});

const task = Effect.gen(function* () { //TODO fix: this still need Res1
  const result = yield* Res1.fn1;
  console.log("res1 fn1:", result);
}).pipe(Effect.provide(LiveRes2));
Was this page helpful?