import { Effect, Context, Layer } from "effect";
export type User = {
readonly name: string;
readonly tel: number;
};
export type Shape = {
readonly id: RegExp;
readonly fn: () => Effect.Effect<User, Error, never>;
};
export class Module extends Context.Tag("Module")<Module, Shape>() {}
export default Layer.effect(
Module,
Effect.gen(function* () {
return {
id: /abc/,
fn: Effect.fn(() => {
return Effect.gen(function* () {
return {
name: "",
tel: 123,
// <- no type hint
};
});
}),
};
})
);
export const fn: () => Effect.Effect<User, Error, never> = () =>
Effect.gen(function* () {
return {
name: "",
tel: 123,
// <- has type hint
};
});
import { Effect, Context, Layer } from "effect";
export type User = {
readonly name: string;
readonly tel: number;
};
export type Shape = {
readonly id: RegExp;
readonly fn: () => Effect.Effect<User, Error, never>;
};
export class Module extends Context.Tag("Module")<Module, Shape>() {}
export default Layer.effect(
Module,
Effect.gen(function* () {
return {
id: /abc/,
fn: Effect.fn(() => {
return Effect.gen(function* () {
return {
name: "",
tel: 123,
// <- no type hint
};
});
}),
};
})
);
export const fn: () => Effect.Effect<User, Error, never> = () =>
Effect.gen(function* () {
return {
name: "",
tel: 123,
// <- has type hint
};
});