| // @flow | 
|   | 
| opaque type Next = Function | void; | 
| opaque type Yield = mixed; | 
|   | 
| export type Gensync<Args, Return> = { | 
|   (...args: Args): Handler<Return>, | 
|   sync(...args: Args): Return, | 
|   async(...args: Args): Promise<Return>, | 
|   // ...args: [...Args, Callback] | 
|   errback(...args: any[]): void, | 
| }; | 
|   | 
| export type Handler<Return> = Generator<Yield, Return, Next>; | 
| export type Options<Args, Return> = { | 
|   sync(...args: Args): Return, | 
|   arity?: number, | 
|   name?: string, | 
| } & ( | 
|   | { async?: (...args: Args) => Promise<Return> } | 
|   // ...args: [...Args, Callback] | 
|   | { errback(...args: any[]): void } | 
| ); | 
|   | 
| declare module.exports: { | 
|   <Args, Return>( | 
|     Options<Args, Return> | ((...args: Args) => Handler<Return>) | 
|   ): Gensync<Args, Return>, | 
|   | 
|   all<Return>(Array<Handler<Return>>): Handler<Return[]>, | 
|   race<Return>(Array<Handler<Return>>): Handler<Return>, | 
| }; |