import { Context, Effect } from "effect";
interface IBaseService {
name: string;
age: number;
}
export class BaseService extends Context.Tag("BaseService")<
BaseService,
IBaseService
>() {}
const sayHi = Effect.gen(function* () {
const user = yield* BaseService;
yield* Effect.log(`Hello ${user.name}`);
});
const printAge = Effect.gen(function* () {
const user = yield* BaseService;
yield* Effect.log(`Age: ${user.age}`);
});
export class MyClient extends Effect.Service<MyClient>()("MyClient", {
effect: Effect.gen(function* () {
yield* Effect.log("Setting up MyClient, logging in, etc.");
return {
sayHi,
printAge,
};
}),
}) {}
const program = Effect.gen(function* () {
const client = yield* MyClient;
yield* client.sayHi;
yield* client.printAge;
});
import { Context, Effect } from "effect";
interface IBaseService {
name: string;
age: number;
}
export class BaseService extends Context.Tag("BaseService")<
BaseService,
IBaseService
>() {}
const sayHi = Effect.gen(function* () {
const user = yield* BaseService;
yield* Effect.log(`Hello ${user.name}`);
});
const printAge = Effect.gen(function* () {
const user = yield* BaseService;
yield* Effect.log(`Age: ${user.age}`);
});
export class MyClient extends Effect.Service<MyClient>()("MyClient", {
effect: Effect.gen(function* () {
yield* Effect.log("Setting up MyClient, logging in, etc.");
return {
sayHi,
printAge,
};
}),
}) {}
const program = Effect.gen(function* () {
const client = yield* MyClient;
yield* client.sayHi;
yield* client.printAge;
});