Effect<A, E, R> with (r: R) => Promise<Either<E, A>>, where R should be Record type instead of union type. provide function forDI purposes.Effect.gen won't work so nice (there would be a need in wrapping values before yield*), but I don't find it's critical.Effect represents effectful computation, but I believe in most cases async function itself represent effectful computation.() => Promise<Either> allow to add less boilerplate to existing code in order to use Effect api, which is a huge pros.