import { type Effect } from "effect/Effect" export namespace EffectGenUtils { export type Success = EG extends Effect ? A // there could be a case where the generator function does not yield anything, so we need to handle that : EG extends (..._: infer _3) => Generator ? A // generators yield Effect values : EG extends (..._: infer _3) => Generator, infer A, infer _2> ? A : never export type Error = EG extends Effect ? E // there could be a case where the generator function does not yield anything, so we need to handle that : EG extends (..._: infer _3) => Generator ? never // generators yield Effect values : EG extends (..._: infer _3) => Generator, infer _A, infer _2> ? E : never export type Context = EG extends Effect ? R // there could be a case where the generator function does not yield anything, so we need to handle that : EG extends (..._: infer _3) => Generator ? never // generators yield Effect values : EG extends (..._: infer _3) => Generator, infer _A, infer _2> ? R : never }