Simple wrapper around Effect.gen
that allows writing generator functions in a cleaner way.
With plain effect
:
import { Effect } from "effect";
export const getTodoById = (id: string) =>
Effect.gen(function* () {
const todo = yield* TodoService.getTodoById("some-id");
if (todo.description.length < 2) {
return yield* new ValidationError("Too small description");
}
return todo;
});
Using simply-effect
:
import { effect } from "simply-effect";
export const getTodoById = effect(function* (id: string) {
const todo = yield* TodoService.getTodoById("some-id");
if (todo.description.length < 2) {
return yield* new ValidationError("Too small description");
}
return todo;
});
If the generator function has no arguments, then effect
will work exactly the same as Effect.gen
.
const value: Effect.Effect<void> = effect(function* () {
yield* Console.log(1);
});
It can work together with classes as well, but an extra type annotations for this
is needed:
class MyService {
readonly local = 1;
compute = effect(this, function* (this: MyService, add: number) {
yield* Console.log(this.local + add);
});
}