| 1220 | * @category constructors |
| 1221 | */ |
| 1222 | export const gen = <Self, Eff extends YieldWrap<Micro<any, any, any>>, AEff>( |
| 1223 | ...args: |
| 1224 | | [self: Self, body: (this: Self) => Generator<Eff, AEff, never>] |
| 1225 | | [body: () => Generator<Eff, AEff, never>] |
| 1226 | ): Micro< |
| 1227 | AEff, |
| 1228 | [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Micro<infer _A, infer E, infer _R>>] ? E : never, |
| 1229 | [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Micro<infer _A, infer _E, infer R>>] ? R : never |
| 1230 | > => suspend(() => fromIterator(args.length === 1 ? args[0]() : args[1].call(args[0]) as any)) |
| 1231 | |
| 1232 | const fromIterator: ( |
| 1233 | iterator: Iterator<any, YieldWrap<Micro<any, any, any>>> |