{
  "id": "@typed/fx/Fx#dropUntilEffect",
  "canonicalId": "@typed/fx/Fx#dropUntilEffect",
  "symbol": {
    "id": "@typed/fx/Fx#dropUntilEffect",
    "packageName": "@typed/fx",
    "moduleName": "Fx",
    "exportName": "dropUntilEffect",
    "kind": "constant",
    "signatures": [
      "export declare const dropUntilEffect: {\n    <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;\n    <A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;\n};"
    ],
    "summary": "Drops elements from an Fx until an effectful predicate returns true.\nEmits from the first element for which the predicate effect succeeds with true (including that element) and all following elements.",
    "sections": {
      "Why": "`dropUntilEffect` makes the gate decision Effectful. The first `true` opens the gate and is\nforwarded, but its `skipWhileEffect` implementation eagerly evaluates the predicate for every\nlater value as well; those later boolean results no longer affect forwarding.",
      "Ownership and lifetime": "The gate is per run. Predicate effects inherit producer ordering and concurrency, are interrupted\nwith their invoking delivery, and expose `E2`/`R2`. Failures remain observable after the gate opens."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Effect, Ref } from \"effect\"\nimport { Fx } from \"@typed/fx\"\n\nconst program = Effect.gen(function* () {\n  const checks = yield* Ref.make(0)\n  const values = yield* Fx.collectAll(\n    Fx.fromIterable([2, 3]).pipe(\n      Fx.dropUntilEffect((n) => Ref.update(checks, (count) => count + 1).pipe(Effect.as(n === 2)))\n    )\n  )\n  return { values, checks: yield* Ref.get(checks) } // { values: [2, 3], checks: 2 }\n})"
      }
    ],
    "relations": [],
    "source": {
      "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
      "line": 73
    },
    "since": "1.0.0",
    "category": "Selecting values"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/fx/Fx#dropUntilEffect",
    "packageName": "@typed/fx",
    "packageVersion": "2.0.0-beta.13",
    "moduleName": "Fx",
    "consumerSpecifier": "@typed/fx/Fx",
    "exportName": "dropUntilEffect",
    "qualifiedName": "dropUntilEffect",
    "declarationKey": "declaration:21ec50a65c7b518b407ceed4",
    "family": "variable",
    "signatures": [
      "export declare const dropUntilEffect: {\n    <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;\n    <A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;\n};"
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 73,
          "column": 14
        },
        "end": {
          "line": 87,
          "column": 2
        }
      },
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 74,
          "column": 3
        },
        "end": {
          "line": 76,
          "column": 55
        }
      },
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 77,
          "column": 3
        },
        "end": {
          "line": 80,
          "column": 28
        }
      }
    ],
    "aliases": [
      "@typed/fx#Fx.dropUntilEffect"
    ],
    "isAlias": false,
    "static": false
  },
  "declaration": {
    "declarationKey": "declaration:21ec50a65c7b518b407ceed4",
    "name": "dropUntilEffect",
    "family": "variable",
    "facets": [
      {
        "family": "variable",
        "syntaxKind": "VariableDeclaration",
        "signatures": [
          "export declare const dropUntilEffect: {\n    <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;\n    <A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;\n};"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
            "start": {
              "line": 73,
              "column": 14
            },
            "end": {
              "line": 87,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "call-signature",
        "syntaxKind": "CallSignature",
        "signatures": [
          "<A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;",
          "<A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;"
        ],
        "typeParameters": [
          "A",
          "E2",
          "R2",
          "E",
          "R"
        ],
        "sourceSpans": [
          {
            "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
            "start": {
              "line": 74,
              "column": 3
            },
            "end": {
              "line": 76,
              "column": 55
            }
          },
          {
            "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
            "start": {
              "line": 77,
              "column": 3
            },
            "end": {
              "line": 80,
              "column": 28
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      }
    ],
    "signatures": [
      "export declare const dropUntilEffect: {\n    <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;\n    <A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;\n};"
    ],
    "typeParameters": [
      "A",
      "E2",
      "R2",
      "E",
      "R"
    ],
    "summary": "Drops elements from an Fx until an effectful predicate returns true.\nEmits from the first element for which the predicate effect succeeds with true (including that element) and all following elements.",
    "sections": {
      "Why": "`dropUntilEffect` makes the gate decision Effectful. The first `true` opens the gate and is\nforwarded, but its `skipWhileEffect` implementation eagerly evaluates the predicate for every\nlater value as well; those later boolean results no longer affect forwarding.",
      "Ownership and lifetime": "The gate is per run. Predicate effects inherit producer ordering and concurrency, are interrupted\nwith their invoking delivery, and expose `E2`/`R2`. Failures remain observable after the gate opens."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import { Effect, Ref } from \"effect\"\nimport { Fx } from \"@typed/fx\"\n\nconst program = Effect.gen(function* () {\n  const checks = yield* Ref.make(0)\n  const values = yield* Fx.collectAll(\n    Fx.fromIterable([2, 3]).pipe(\n      Fx.dropUntilEffect((n) => Ref.update(checks, (count) => count + 1).pipe(Effect.as(n === 2)))\n    )\n  )\n  return { values, checks: yield* Ref.get(checks) } // { values: [2, 3], checks: 2 }\n})"
      }
    ],
    "sourceSpans": [
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 73,
          "column": 14
        },
        "end": {
          "line": 87,
          "column": 2
        }
      },
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 74,
          "column": 3
        },
        "end": {
          "line": 76,
          "column": 55
        }
      },
      {
        "file": "packages/fx/src/Fx/combinators/dropUntil.ts",
        "start": {
          "line": 77,
          "column": 3
        },
        "end": {
          "line": 80,
          "column": 28
        }
      }
    ],
    "since": "1.0.0",
    "category": "Selecting values"
  }
}
