Hyperlinkv0.8.0-beta.28

Effect

Effect.fnnamespaceeffect/Effect.ts:9395
<Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
): (
  ...args: Args
) => Effect<
  AEff,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer E, infer _R>]
    ? E
    : never,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer _E, infer R>]
    ? R
    : never
>
<Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
): (
  this: Self,
  ...args: Args
) => Effect<
  AEff,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer E, infer _R>]
    ? E
    : never,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer _E, infer R>]
    ? R
    : never
>
<Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
): (
  ...args: Args
) => Effect<
  AEff,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer E, infer _R>]
    ? E
    : never,
  [Eff] extends [never]
    ? never
    : [Eff] extends [Effect<infer _A, infer _E, infer R>]
    ? R
    : never
>
<Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A
): (...args: Args) => A
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A
): (this: Self, ...args: Args) => A
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A
): (...args: Args) => A
<Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B
): (...args: Args) => B
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B
): (this: Self, ...args: Args) => B
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B
): (...args: Args) => B
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C
): (...args: Args) => C
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C
): (this: Self, ...args: Args) => C
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C
): (...args: Args) => C
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D
): (...args: Args) => D
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D
): (this: Self, ...args: Args) => D
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D
): (...args: Args) => D
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E
): (...args: Args) => E
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E
): (this: Self, ...args: Args) => E
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E
): (...args: Args) => E
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F
): (...args: Args) => F
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F
): (this: Self, ...args: Args) => F
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F
): (...args: Args) => F
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G
): (...args: Args) => G
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G
): (this: Self, ...args: Args) => G
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G
): (...args: Args) => G
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H
): (...args: Args) => H
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H
): (this: Self, ...args: Args) => H
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H
): (...args: Args) => H
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I
): (...args: Args) => I
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I
): (this: Self, ...args: Args) => I
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I
): (...args: Args) => I
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J
): (...args: Args) => J
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J
): (this: Self, ...args: Args) => J
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J
): (...args: Args) => J
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K
): (...args: Args) => K
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K
): (this: Self, ...args: Args) => K
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K
): (...args: Args) => K
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L
): (...args: Args) => L
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L
): (this: Self, ...args: Args) => L
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L
): (...args: Args) => L
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M
): (...args: Args) => M
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M
): (this: Self, ...args: Args) => M
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M
): (...args: Args) => M
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N
): (...args: Args) => N
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N
): (this: Self, ...args: Args) => N
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N
): (...args: Args) => N
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O
): (...args: Args) => O
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O
): (this: Self, ...args: Args) => O
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O
): (...args: Args) => O
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P
): (...args: Args) => P
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P
): (this: Self, ...args: Args) => P
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P
): (...args: Args) => P
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q
): (...args: Args) => Q
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q
): (this: Self, ...args: Args) => Q
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q
): (...args: Args) => Q
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R
): (...args: Args) => R
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R
): (this: Self, ...args: Args) => R
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R
): (...args: Args) => R
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S
): (...args: Args) => S
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S
): (this: Self, ...args: Args) => S
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S
): (...args: Args) => S
<
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S,
  T
>(
  body: (
    this: unassigned,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S,
  t: (_: S, ...args: Args) => T
): (...args: Args) => T
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S,
  T
>(
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S,
  t: (_: S, ...args: Args) => T
): (this: Self, ...args: Args) => T
<
  Self,
  Eff extends Effect<any, any, any>,
  AEff,
  Args extends Array<any>,
  A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  Q,
  R,
  S,
  T
>(
  options: { readonly self: Self },
  body: (
    this: Self,
    ...args: Args
  ) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
  a: (
    _: Effect<
      AEff,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>]
        ? E
        : never,
      [Eff] extends [never]
        ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>]
        ? R
        : never
    >,
    ...args: Args
  ) => A,
  b: (_: A, ...args: Args) => B,
  c: (_: B, ...args: Args) => C,
  d: (_: C, ...args: Args) => D,
  e: (_: D, ...args: Args) => E,
  f: (_: E, ...args: Args) => F,
  g: (_: F, ...args: Args) => G,
  h: (_: G, ...args: Args) => H,
  i: (_: H, ...args: Args) => I,
  j: (_: I, ...args: Args) => J,
  k: (_: J, ...args: Args) => K,
  l: (_: K, ...args: Args) => L,
  m: (_: L, ...args: Args) => M,
  n: (_: M, ...args: Args) => N,
  o: (_: N, ...args: Args) => O,
  p: (_: O, ...args: Args) => P,
  q: (_: P, ...args: Args) => Q,
  r: (_: Q, ...args: Args) => R,
  s: (_: R, ...args: Args) => S,
  t: (_: S, ...args: Args) => T
): (...args: Args) => T
(name: string, options?: SpanOptionsNoTrace): fn.Traced

Type helpers for functions built with Effect.fn and Effect.fnUntraced.

Details

Use these to describe generator-based signatures and traced or untraced variants.

functions
Source effect/Effect.ts:93954290 lines
export declare namespace fn {
  /**
   * Generator return type accepted by {@link fn} and {@link fnUntraced}.
   *
   * **When to use**
   *
   * Use when you need to annotate the return type of a generator body while
   * keeping the produced function's `Effect` return type inferred.
   *
   * **Example** (Annotating an Effect function)
   *
   * ```ts
   * import { Effect } from "effect"
   *
   * const f = Effect.fnUntraced(function*(
   *   value: string
   * ): Effect.fn.Return<number> {
   *   return yield* Effect.succeed(value.length)
   * })
   *
   * //      ┌─── Effect.Effect<number>
   * //      ▼
   * const program = f("hello")
   * ```
   *
   * **Example** (Annotating a parametric Effect function)
   *
   * ```ts
   * import { Effect } from "effect"
   *
   * const f = Effect.fnUntraced(function*<A>(
   *   value: A
   * ): Effect.fn.Return<A> {
   *   return yield* Effect.succeed(value)
   * })
   *
   * //      ┌─── Effect.Effect<string>
   * //      ▼
   * const program = f("hello")
   * ```
   *
   * @category utility types
   * @since 3.19.0
   */
  export type Return<A, E = never, R = never> = Generator<Effect<any, E, R>, A, any>

  /**
   * Type of the untraced function builder used by `Effect.fnUntraced`.
   *
   * @category utility types
   * @since 3.11.0
   */
  export type Untraced = {
    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>
    ): (...args: Args) => Effect<
      AEff,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
        : never,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
        : never
    >
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>
    ): (this: Self, ...args: Args) => Effect<
      AEff,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
        : never,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
        : never
    >

    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A
    ): (...args: Args) => A
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A
    ): (this: Self, ...args: Args) => A
    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B
    ): (...args: Args) => B
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B
    ): (this: Self, ...args: Args) => B
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C
    ): (...args: Args) => C
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C
    ): (this: Self, ...args: Args) => C
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D
    >(
      body: (...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D
    ): (...args: Args) => D
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D
    ): (this: Self, ...args: Args) => D
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E
    ): (...args: Args) => E
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E
    ): (this: Self, ...args: Args) => E
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F
    ): (...args: Args) => F
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F
    ): (this: Self, ...args: Args) => F
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G
    ): (...args: Args) => G
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G
    ): (this: Self, ...args: Args) => G
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H
    ): (...args: Args) => H
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H
    ): (this: Self, ...args: Args) => H
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I
    ): (...args: Args) => I
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I
    ): (this: Self, ...args: Args) => I
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J
    ): (...args: Args) => J
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J
    ): (this: Self, ...args: Args) => J
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K
    ): (...args: Args) => K
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K
    ): (this: Self, ...args: Args) => K
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L
    ): (...args: Args) => L
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L
    ): (this: Self, ...args: Args) => L
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M
    ): (...args: Args) => M
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M
    ): (this: Self, ...args: Args) => M
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N
    ): (...args: Args) => N
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N
    ): (this: Self, ...args: Args) => N
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O
    ): (...args: Args) => O
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O
    ): (this: Self, ...args: Args) => O
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P
    ): (...args: Args) => P
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P
    ): (this: Self, ...args: Args) => P
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q
    ): (...args: Args) => Q
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q
    ): (this: Self, ...args: Args) => Q
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R
    ): (...args: Args) => R
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R
    ): (this: Self, ...args: Args) => R
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S
    ): (...args: Args) => S
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S
    ): (this: Self, ...args: Args) => S
    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S,
      T
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S,
      t: (_: S, ...args: Args) => T
    ): (...args: Args) => T
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S,
      T
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never>,
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S,
      t: (_: S, ...args: Args) => T
    ): (this: Self, ...args: Args) => T
  }

  /**
   * Type of the traced function builder used by `Effect.fn`.
   *
   * @category utility types
   * @since 4.0.0
   */
  export type Traced = {
    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
    ): (...args: Args) => Effect<
      AEff,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
        : never,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
        : never
    >
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
    ): (this: Self, ...args: Args) => Effect<
      AEff,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
        : never,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
        : never
    >
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>>(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>)
    ): (...args: Args) => Effect<
      AEff,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
        : never,
      [Eff] extends [never] ? never
        : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
        : never
    >

    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A
    ): (...args: Args) => A
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A
    ): (this: Self, ...args: Args) => A
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A>(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A
    ): (...args: Args) => A

    <Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B
    ): (...args: Args) => B
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B
    ): (this: Self, ...args: Args) => B
    <Self, Eff extends Effect<any, any, any>, AEff, Args extends Array<any>, A, B>(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B
    ): (...args: Args) => B

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C
    ): (...args: Args) => C
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C
    ): (this: Self, ...args: Args) => C
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C
    ): (...args: Args) => C

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D
    ): (...args: Args) => D
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D
    ): (this: Self, ...args: Args) => D

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D
    ): (...args: Args) => D

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E
    ): (...args: Args) => E
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E
    ): (this: Self, ...args: Args) => E

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E
    ): (...args: Args) => E

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F
    ): (...args: Args) => F
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F
    ): (this: Self, ...args: Args) => F

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F
    ): (...args: Args) => F

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G
    ): (...args: Args) => G
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G
    ): (this: Self, ...args: Args) => G

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G
    ): (...args: Args) => G

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H
    ): (...args: Args) => H
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H
    ): (this: Self, ...args: Args) => H

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H
    ): (...args: Args) => H

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I
    ): (...args: Args) => I
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I
    ): (this: Self, ...args: Args) => I

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I
    ): (...args: Args) => I

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J
    ): (...args: Args) => J
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J
    ): (this: Self, ...args: Args) => J

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J
    ): (...args: Args) => J

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K
    ): (...args: Args) => K
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K
    ): (this: Self, ...args: Args) => K

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K
    ): (...args: Args) => K

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L
    ): (...args: Args) => L
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L
    ): (this: Self, ...args: Args) => L

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L
    ): (...args: Args) => L

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M
    ): (...args: Args) => M
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M
    ): (this: Self, ...args: Args) => M

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M
    ): (...args: Args) => M

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N
    ): (...args: Args) => N
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N
    ): (this: Self, ...args: Args) => N

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N
    ): (...args: Args) => N

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O
    ): (...args: Args) => O
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O
    ): (this: Self, ...args: Args) => O

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O
    ): (...args: Args) => O

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P
    ): (...args: Args) => P
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P
    ): (this: Self, ...args: Args) => P

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P
    ): (...args: Args) => P

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q
    ): (...args: Args) => Q
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q
    ): (this: Self, ...args: Args) => Q

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q
    ): (...args: Args) => Q

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R
    ): (...args: Args) => R
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R
    ): (this: Self, ...args: Args) => R

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R
    ): (...args: Args) => R

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S
    ): (...args: Args) => S
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S
    ): (this: Self, ...args: Args) => S

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S
    ): (...args: Args) => S

    <
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S,
      T
    >(
      body: (this: unassigned, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S,
      t: (_: S, ...args: Args) => T
    ): (...args: Args) => T
    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S,
      T
    >(
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S,
      t: (_: S, ...args: Args) => T
    ): (this: Self, ...args: Args) => T

    <
      Self,
      Eff extends Effect<any, any, any>,
      AEff,
      Args extends Array<any>,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L,
      M,
      N,
      O,
      P,
      Q,
      R,
      S,
      T
    >(
      options: { readonly self: Self },
      body: (this: Self, ...args: Args) => Generator<Eff, AEff, never> | (Eff & Effect<AEff, any, any>),
      a: (
        _: Effect<
          AEff,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer E, infer _R>] ? E
            : never,
          [Eff] extends [never] ? never
            : [Eff] extends [Effect<infer _A, infer _E, infer R>] ? R
            : never
        >,
        ...args: Args
      ) => A,
      b: (_: A, ...args: Args) => B,
      c: (_: B, ...args: Args) => C,
      d: (_: C, ...args: Args) => D,
      e: (_: D, ...args: Args) => E,
      f: (_: E, ...args: Args) => F,
      g: (_: F, ...args: Args) => G,
      h: (_: G, ...args: Args) => H,
      i: (_: H, ...args: Args) => I,
      j: (_: I, ...args: Args) => J,
      k: (_: J, ...args: Args) => K,
      l: (_: K, ...args: Args) => L,
      m: (_: L, ...args: Args) => M,
      n: (_: M, ...args: Args) => N,
      o: (_: N, ...args: Args) => O,
      p: (_: O, ...args: Args) => P,
      q: (_: P, ...args: Args) => Q,
      r: (_: Q, ...args: Args) => R,
      s: (_: R, ...args: Args) => S,
      t: (_: S, ...args: Args) => T
    ): (...args: Args) => T
  }
}

/**
 * Creates an Effect-returning function without tracing.
 *
 * **When to use**
 *
 * Use when you are defining a reusable Effect function whose implementation
 * would otherwise be a normal function returning {@link gen}, especially when
 * tracing spans or stack-frame capture are not needed.
 *
 * **Details**
 *
 * Compared to a plain function that returns {@link gen}, `Effect.fnUntraced`
 * reuses the generator body instead of allocating a fresh generator closure
 * around the arguments on every call. It does not record an Effect stack-frame
 * boundary and does not create tracing spans. Use {@link fn} when you need
 * those stack frames or spans. Additional arguments after the generator body
 * act like `pipe` transforms: each transform receives the previous result and
 * the original function arguments. Annotate the generator return type with
 * `Effect.fn.Return<A, E, R>` when the produced `Effect` type needs to be
 * stated explicitly.
 *
 * **Example** (Defining untraced effect functions)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fnUntraced(function*(
 *   value: string
 * ) {
 *   return yield* Effect.succeed(value.length)
 * })
 *
 * //      ┌─── Effect.Effect<number>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Transforming the returned Effect)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fnUntraced(
 *   function*(value: string) {
 *     return yield* Effect.succeed(value.length)
 *   },
 *   (effect, value) =>
 *     effect.pipe(Effect.map((length) => `${value}: ${length}`))
 * )
 *
 * //      ┌─── Effect.Effect<string>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Annotating an untraced non-parametric function)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fnUntraced(function*(
 *   value: string
 * ): Effect.fn.Return<number> {
 *   return yield* Effect.succeed(value.length)
 * })
 *
 * //      ┌─── Effect.Effect<number>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Annotating an untraced parametric function)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fnUntraced(function*<A>(
 *   value: A
 * ): Effect.fn.Return<A> {
 *   return yield* Effect.succeed(value)
 * })
 *
 * //      ┌─── Effect.Effect<string>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * @category functions
 * @since 3.12.0
 */
export const fnUntraced: fn.Untraced = internal.fnUntraced

/**
 * Creates a reusable traced function from an Effect body.
 *
 * **When to use**
 *
 * Use when you are defining a reusable Effect function whose implementation
 * would otherwise be a normal function returning {@link gen}, and you want
 * tracing spans or stack-frame capture.
 *
 * **Details**
 *
 * Compared to a plain function that returns {@link gen}, `Effect.fn` reuses the
 * generator body instead of allocating a fresh generator closure around the
 * arguments on every call. Call `Effect.fn(body, ...)` for a generic
 * stack-frame boundary without creating a span. Call
 * `Effect.fn("operationName", options?)(body, ...)` when that boundary should
 * have a readable operation name and the returned `Effect` should create a
 * tracing span when run. {@link SpanOptionsNoTrace} configures span metadata
 * such as attributes, links, parent or root selection, kind, sampling, and log
 * level. Additional arguments after the generator body act like `pipe`
 * transforms: each transform receives the previous result and the original
 * function arguments. When those transforms return an `Effect`, the returned
 * effect includes stack-frame metadata and, for the named form, a tracing span.
 * Generator bodies may declare a `this` parameter; pass `{ self }` before the
 * body to bind `this` when the function is created.
 *
 * **Example** (Defining traced effect functions)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fn("calculateLength")(function*(value: string) {
 *   return yield* Effect.succeed(value.length)
 * })
 *
 * //      ┌─── Effect.Effect<number>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Transforming the returned Effect)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fn("formatLength")(
 *   function*(value: string) {
 *     return yield* Effect.succeed(value.length)
 *   },
 *   (effect, value) =>
 *     effect.pipe(Effect.map((length) => `${value}: ${length}`))
 * )
 *
 * //      ┌─── Effect.Effect<string>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Binding this)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * class Counter {
 *   count = 0
 *
 *   increment = Effect.fn("Counter.increment")(
 *     { self: this },
 *     function*(this: Counter, by: number) {
 *       this.count += by
 *       return yield* Effect.succeed(this.count)
 *     }
 *   )
 * }
 *
 * const counter = new Counter()
 *
 * //      ┌─── Effect.Effect<number>
 * //      ▼
 * const program = counter.increment(1)
 * ```
 *
 * **Example** (Annotating a traced non-parametric function)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fn("calculateLength")(function*(
 *   value: string
 * ): Effect.fn.Return<number> {
 *   return yield* Effect.succeed(value.length)
 * })
 *
 * //      ┌─── Effect.Effect<number>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * **Example** (Annotating a traced parametric function)
 *
 * ```ts
 * import { Effect } from "effect"
 *
 * const f = Effect.fn("succeed")(function*<A>(
 *   value: A
 * ): Effect.fn.Return<A> {
 *   return yield* Effect.succeed(value)
 * })
 *
 * //      ┌─── Effect.Effect<string>
 * //      ▼
 * const program = f("hello")
 * ```
 *
 * @category functions
 * @since 3.11.0
 */
export const fn: fn.Traced & {
  (name: string, options?: SpanOptionsNoTrace): fn.Traced
} = internal.fn
Referenced by 5 symbols