import { Context, Effect, Layer } from "effect";
export interface Transaction {
readonly id: string;
}
export class Transaction extends Context.Tag("Context/Transaction")<
Transaction,
Transaction
>() {}
export const useTx = <R, E, A>(
fn: (tx: Transaction) => Effect.Effect<R, E, A>,
): Effect.Effect<R, E, Transaction | A> => Transaction.pipe(Effect.flatMap(fn));
export const makeTx = Effect.gen(function* (_) {
return {
create: () => {
return Effect.succeed({
id: "id",
});
},
};
});
export interface TransactionFactory {
create: () => Effect.Effect<Transaction>;
}
export class TransactionFactory extends Context.Tag(
"Service/TransactionFactory",
)<TransactionFactory, TransactionFactory>() {}
export const { create } = Effect.serviceFunctions(TransactionFactory);
export const live = Layer.effect(TransactionFactory, makeTx);
// ^^^--- Property '[TagTypeId]' is missing in type '{ create: () => Effect.Effect<{ id: string; }, never, never>; }' but required in type 'TransactionFactory'
import { Context, Effect, Layer } from "effect";
export interface Transaction {
readonly id: string;
}
export class Transaction extends Context.Tag("Context/Transaction")<
Transaction,
Transaction
>() {}
export const useTx = <R, E, A>(
fn: (tx: Transaction) => Effect.Effect<R, E, A>,
): Effect.Effect<R, E, Transaction | A> => Transaction.pipe(Effect.flatMap(fn));
export const makeTx = Effect.gen(function* (_) {
return {
create: () => {
return Effect.succeed({
id: "id",
});
},
};
});
export interface TransactionFactory {
create: () => Effect.Effect<Transaction>;
}
export class TransactionFactory extends Context.Tag(
"Service/TransactionFactory",
)<TransactionFactory, TransactionFactory>() {}
export const { create } = Effect.serviceFunctions(TransactionFactory);
export const live = Layer.effect(TransactionFactory, makeTx);
// ^^^--- Property '[TagTypeId]' is missing in type '{ create: () => Effect.Effect<{ id: string; }, never, never>; }' but required in type 'TransactionFactory'