{
  "id": "@typed/fx/Fx#mergeOrdered",
  "canonicalId": "@typed/fx/Fx#mergeOrdered",
  "symbol": {
    "id": "@typed/fx/Fx#mergeOrdered",
    "packageName": "@typed/fx",
    "moduleName": "Fx",
    "exportName": "mergeOrdered",
    "kind": "function",
    "signatures": [
      "export declare function mergeOrdered<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx: FX): Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;"
    ],
    "summary": "Runs multiple Fx streams concurrently while draining their values in argument order.",
    "sections": {
      "Why": "`mergeOrdered` overlaps production latency while preserving the same output\ngrouping as sequential concatenation. It is useful only when that ordering is\nworth retaining later results in memory.",
      "Concurrency, ordering, and buffering": "Every input starts immediately. Input zero forwards as it produces. Values\nfrom each later input are buffered until every earlier input ends, then drained\nin that input's emission order before the next buffer is released. Buffering\nis unbounded: a fast or infinite later input can retain arbitrary values while\nan earlier input remains open.",
      "Ownership and lifetime": "Non-interruption failures are forwarded. Interrupt-only causes mark that input\nended so they cannot deadlock later buffers. All input services remain typed.\nThe observing fiber owns all runs and buffers; completion waits for all inputs,\nwhile interruption discards buffers and interrupts remaining resource scopes."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Fx } from \"@typed/fx\"\nimport { Effect } from \"effect\"\n\nconst ordered = Fx.mergeOrdered(\n  Fx.at(\"slow first\", \"20 millis\"),\n  Fx.at(\"fast second\", \"1 millis\")\n)\nEffect.runPromise(Fx.collectAll(ordered)).then(console.log)\n// [\"slow first\", \"fast second\"]: the second value waits in its buffer"
      }
    ],
    "relations": [],
    "source": {
      "file": "packages/fx/src/Fx/combinators/mergeOrdered.ts",
      "line": 53
    },
    "since": "1.0.0",
    "category": "Combining sources"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/fx/Fx#mergeOrdered",
    "packageName": "@typed/fx",
    "packageVersion": "2.0.0-beta.13",
    "moduleName": "Fx",
    "consumerSpecifier": "@typed/fx/Fx",
    "exportName": "mergeOrdered",
    "qualifiedName": "mergeOrdered",
    "declarationKey": "declaration:7b5b1d36d063cef400829bb3",
    "family": "function",
    "signatures": [
      "export declare function mergeOrdered<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx: FX): Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;"
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/combinators/mergeOrdered.ts",
        "start": {
          "line": 53,
          "column": 1
        },
        "end": {
          "line": 75,
          "column": 2
        }
      }
    ],
    "aliases": [
      "@typed/fx#Fx.mergeOrdered"
    ],
    "isAlias": false,
    "static": false
  },
  "declaration": {
    "declarationKey": "declaration:7b5b1d36d063cef400829bb3",
    "name": "mergeOrdered",
    "family": "function",
    "facets": [
      {
        "family": "function",
        "syntaxKind": "FunctionDeclaration",
        "signatures": [
          "export declare function mergeOrdered<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx: FX): Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;"
        ],
        "typeParameters": [
          "FX extends ReadonlyArray<Fx<any, any, any>>"
        ],
        "sourceSpans": [
          {
            "file": "packages/fx/src/Fx/combinators/mergeOrdered.ts",
            "start": {
              "line": 53,
              "column": 1
            },
            "end": {
              "line": 75,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      }
    ],
    "signatures": [
      "export declare function mergeOrdered<FX extends ReadonlyArray<Fx<any, any, any>>>(...fx: FX): Fx<Fx.Success<FX[number]>, Fx.Error<FX[number]>, Fx.Services<FX[number]>>;"
    ],
    "typeParameters": [
      "FX extends ReadonlyArray<Fx<any, any, any>>"
    ],
    "summary": "Runs multiple Fx streams concurrently while draining their values in argument order.",
    "sections": {
      "Why": "`mergeOrdered` overlaps production latency while preserving the same output\ngrouping as sequential concatenation. It is useful only when that ordering is\nworth retaining later results in memory.",
      "Concurrency, ordering, and buffering": "Every input starts immediately. Input zero forwards as it produces. Values\nfrom each later input are buffered until every earlier input ends, then drained\nin that input's emission order before the next buffer is released. Buffering\nis unbounded: a fast or infinite later input can retain arbitrary values while\nan earlier input remains open.",
      "Ownership and lifetime": "Non-interruption failures are forwarded. Interrupt-only causes mark that input\nended so they cannot deadlock later buffers. All input services remain typed.\nThe observing fiber owns all runs and buffers; completion waits for all inputs,\nwhile interruption discards buffers and interrupts remaining resource scopes."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Fx } from \"@typed/fx\"\nimport { Effect } from \"effect\"\n\nconst ordered = Fx.mergeOrdered(\n  Fx.at(\"slow first\", \"20 millis\"),\n  Fx.at(\"fast second\", \"1 millis\")\n)\nEffect.runPromise(Fx.collectAll(ordered)).then(console.log)\n// [\"slow first\", \"fast second\"]: the second value waits in its buffer"
      }
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/combinators/mergeOrdered.ts",
        "start": {
          "line": 53,
          "column": 1
        },
        "end": {
          "line": 75,
          "column": 2
        }
      }
    ],
    "since": "1.0.0",
    "category": "Combining sources"
  }
}
