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));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));