{
  "id": "@typed/fx/Fx#fn.NonGen",
  "canonicalId": "@typed/fx/Fx#fn.NonGen",
  "symbol": {
    "id": "@typed/fx/Fx#fn.NonGen",
    "packageName": "@typed/fx",
    "moduleName": "Fx",
    "exportName": "fn.NonGen",
    "kind": "type",
    "signatures": [
      "type NonGen = {\n    <Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: unassigned, ...args: Args) => ReturnFx): (...args: Args) => ReturnFx;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: Self, ...args: Args) => ReturnFx): (this: Self, ...args: Args) => ReturnFx;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (...args: Args) => A;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (this: Self, ...args: Args) => A;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (...args: Args) => B;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (this: Self, ...args: Args) => B;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (...args: Args) => C;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (this: Self, ...args: Args) => C;\n};"
    ],
    "summary": "Contract for functions whose body returns an `Fx` directly.",
    "sections": {
      "Why": "`NonGen` adds Effect-style tracing and a typed pipeline to ordinary `Fx` factories\nwithout forcing a generator when no Effect acquisition is needed.",
      "Ownership and lifetime": "Defining and invoking the function are both inert. Invocation returns an `Fx`\nwithout evaluating `body`; `Effect.fn` suspends it. Each run evaluates the body\nonce, then runs its returned producer in that same ownership and interruption\nlifetime."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Fx } from \"@typed/fx\"\n\nlet bodyCalls = 0\nconst greeting = Fx.fn(\n  (name: string) => {\n    bodyCalls += 1\n    return Fx.succeed(name)\n  },\n  (source) => Fx.map(source, (name) => `hello ${name}`)\n)\nconst source = greeting(\"Ada\") // bodyCalls is still 0\nconst program = Fx.collectAll(source) // running program increments bodyCalls"
      }
    ],
    "relations": [],
    "source": {
      "file": "packages/fx/src/Fx/constructors/fn.ts",
      "line": 226
    },
    "since": "1.0.0",
    "category": "Type contracts"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/fx/Fx#fn.NonGen",
    "packageName": "@typed/fx",
    "packageVersion": "2.0.0-beta.7",
    "moduleName": "Fx",
    "consumerSpecifier": "@typed/fx/Fx",
    "exportName": "fn",
    "qualifiedName": "fn.NonGen",
    "declarationKey": "declaration:fc978f17ec83ca7425982153",
    "family": "type-alias",
    "signatures": [
      "type NonGen = {\n    <Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: unassigned, ...args: Args) => ReturnFx): (...args: Args) => ReturnFx;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: Self, ...args: Args) => ReturnFx): (this: Self, ...args: Args) => ReturnFx;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (...args: Args) => A;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (this: Self, ...args: Args) => A;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (...args: Args) => B;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (this: Self, ...args: Args) => B;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (...args: Args) => C;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (this: Self, ...args: Args) => C;\n};"
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 226,
          "column": 3
        },
        "end": {
          "line": 266,
          "column": 5
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 227,
          "column": 5
        },
        "end": {
          "line": 229,
          "column": 36
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 230,
          "column": 5
        },
        "end": {
          "line": 232,
          "column": 48
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 234,
          "column": 5
        },
        "end": {
          "line": 237,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 238,
          "column": 5
        },
        "end": {
          "line": 241,
          "column": 41
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 243,
          "column": 5
        },
        "end": {
          "line": 247,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 248,
          "column": 5
        },
        "end": {
          "line": 252,
          "column": 41
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 254,
          "column": 5
        },
        "end": {
          "line": 259,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 260,
          "column": 5
        },
        "end": {
          "line": 265,
          "column": 41
        }
      }
    ],
    "aliases": [
      "@typed/fx#Fx.fn.NonGen"
    ],
    "isAlias": false,
    "parentId": "@typed/fx/Fx#fn",
    "static": false
  },
  "declaration": {
    "declarationKey": "declaration:fc978f17ec83ca7425982153",
    "name": "NonGen",
    "family": "type-alias",
    "facets": [
      {
        "family": "type-alias",
        "syntaxKind": "TypeAliasDeclaration",
        "signatures": [
          "type NonGen = {\n    <Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: unassigned, ...args: Args) => ReturnFx): (...args: Args) => ReturnFx;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: Self, ...args: Args) => ReturnFx): (this: Self, ...args: Args) => ReturnFx;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (...args: Args) => A;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (this: Self, ...args: Args) => A;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (...args: Args) => B;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (this: Self, ...args: Args) => B;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (...args: Args) => C;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (this: Self, ...args: Args) => C;\n};"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 226,
              "column": 3
            },
            "end": {
              "line": 266,
              "column": 5
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "call-signature",
        "syntaxKind": "CallSignature",
        "signatures": [
          "<Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: unassigned, ...args: Args) => ReturnFx): (...args: Args) => ReturnFx;",
          "<Self, Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: Self, ...args: Args) => ReturnFx): (this: Self, ...args: Args) => ReturnFx;",
          "<Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (...args: Args) => A;",
          "<Self, Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (this: Self, ...args: Args) => A;",
          "<Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (...args: Args) => B;",
          "<Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (this: Self, ...args: Args) => B;",
          "<Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (...args: Args) => C;",
          "<Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (this: Self, ...args: Args) => C;"
        ],
        "typeParameters": [
          "Args extends Array<any>",
          "ReturnFx extends Fx.Any",
          "Self",
          "A",
          "B",
          "C"
        ],
        "sourceSpans": [
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 227,
              "column": 5
            },
            "end": {
              "line": 229,
              "column": 36
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 230,
              "column": 5
            },
            "end": {
              "line": 232,
              "column": 48
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 234,
              "column": 5
            },
            "end": {
              "line": 237,
              "column": 29
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 238,
              "column": 5
            },
            "end": {
              "line": 241,
              "column": 41
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 243,
              "column": 5
            },
            "end": {
              "line": 247,
              "column": 29
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 248,
              "column": 5
            },
            "end": {
              "line": 252,
              "column": 41
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 254,
              "column": 5
            },
            "end": {
              "line": 259,
              "column": 29
            }
          },
          {
            "file": "packages/fx/src/Fx/constructors/fn.ts",
            "start": {
              "line": 260,
              "column": 5
            },
            "end": {
              "line": 265,
              "column": 41
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      }
    ],
    "signatures": [
      "type NonGen = {\n    <Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: unassigned, ...args: Args) => ReturnFx): (...args: Args) => ReturnFx;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any>(body: (this: Self, ...args: Args) => ReturnFx): (this: Self, ...args: Args) => ReturnFx;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (...args: Args) => A;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A): (this: Self, ...args: Args) => A;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (...args: Args) => B;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B): (this: Self, ...args: Args) => B;\n    <Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: unassigned, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (...args: Args) => C;\n    <Self, Args extends Array<any>, ReturnFx extends Fx.Any, A, B, C>(body: (this: Self, ...args: Args) => ReturnFx, a: (_: ReturnFx, ...args: Args) => A, b: (_: A, ...args: Args) => B, c: (_: B, ...args: Args) => C): (this: Self, ...args: Args) => C;\n};"
    ],
    "typeParameters": [
      "Args extends Array<any>",
      "ReturnFx extends Fx.Any",
      "Self",
      "A",
      "B",
      "C"
    ],
    "summary": "Contract for functions whose body returns an `Fx` directly.",
    "sections": {
      "Why": "`NonGen` adds Effect-style tracing and a typed pipeline to ordinary `Fx` factories\nwithout forcing a generator when no Effect acquisition is needed.",
      "Ownership and lifetime": "Defining and invoking the function are both inert. Invocation returns an `Fx`\nwithout evaluating `body`; `Effect.fn` suspends it. Each run evaluates the body\nonce, then runs its returned producer in that same ownership and interruption\nlifetime."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Fx } from \"@typed/fx\"\n\nlet bodyCalls = 0\nconst greeting = Fx.fn(\n  (name: string) => {\n    bodyCalls += 1\n    return Fx.succeed(name)\n  },\n  (source) => Fx.map(source, (name) => `hello ${name}`)\n)\nconst source = greeting(\"Ada\") // bodyCalls is still 0\nconst program = Fx.collectAll(source) // running program increments bodyCalls"
      }
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 226,
          "column": 3
        },
        "end": {
          "line": 266,
          "column": 5
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 227,
          "column": 5
        },
        "end": {
          "line": 229,
          "column": 36
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 230,
          "column": 5
        },
        "end": {
          "line": 232,
          "column": 48
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 234,
          "column": 5
        },
        "end": {
          "line": 237,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 238,
          "column": 5
        },
        "end": {
          "line": 241,
          "column": 41
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 243,
          "column": 5
        },
        "end": {
          "line": 247,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 248,
          "column": 5
        },
        "end": {
          "line": 252,
          "column": 41
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 254,
          "column": 5
        },
        "end": {
          "line": 259,
          "column": 29
        }
      },
      {
        "file": "packages/fx/src/Fx/constructors/fn.ts",
        "start": {
          "line": 260,
          "column": 5
        },
        "end": {
          "line": 265,
          "column": 41
        }
      }
    ],
    "since": "1.0.0",
    "category": "Type contracts"
  }
}
