@clayroach/effect 3.19.14-source-capture.7 → 3.19.14-source-trace.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Config.ts +2 -2
  91. package/src/Effect.ts +8 -30
  92. package/src/FiberRef.ts +13 -0
  93. package/src/Layer.ts +0 -23
  94. package/src/RuntimeFlags.ts +0 -32
  95. package/src/SourceLocation.ts +108 -0
  96. package/src/Tracer.ts +0 -16
  97. package/src/index.ts +7 -0
  98. package/src/internal/config.ts +2 -2
  99. package/src/internal/core.ts +22 -106
  100. package/src/internal/effect/circular.ts +6 -16
  101. package/src/internal/fiberRuntime.ts +15 -88
  102. package/src/internal/layer/circular.ts +0 -14
  103. package/src/internal/layer.ts +0 -4
  104. package/src/internal/logger.ts +41 -4
  105. package/src/internal/runtimeFlags.ts +1 -11
  106. package/src/internal/tracer.ts +0 -143
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.zipLeftOptions = exports.withTracerScoped = exports.withSpanScoped = exports.withRuntimeFlagsScoped = exports.withRandomScoped = exports.withEarlyRelease = exports.withConfigProviderScoped = exports.withClockScoped = exports.whenLogLevel = exports.validateWith = exports.validateFirst = exports.validateAllParDiscard = exports.validateAllPar = exports.validateAll = exports.validate = exports.using = exports.unsafeMakeChildFiberWithLocation = exports.unsafeMakeChildFiber = exports.unsafeForkWithLocation = exports.unsafeForkUnstarted = exports.unsafeFork = exports.tracerLogger = exports.tagMetricsScoped = exports.structuredLogger = exports.sequentialFinalizers = exports.scopedWith = exports.scopedEffect = exports.scopeWith = exports.scopeUse = exports.scopeTag = exports.scopeMake = exports.scopeExtend = exports.scope = exports.replicateEffect = exports.replicate = exports.reduceEffect = exports.raceWith = exports.raceFibersWith = exports.raceAll = exports.race = exports.prettyLogger = exports.partition = exports.parallelNFinalizers = exports.parallelFinalizers = exports.mergeAll = exports.makeSpanScoped = exports.loggerWithSpanAnnotations = exports.loggerWithLeveledLog = exports.loggerWithConsoleLog = exports.loggerWithConsoleError = exports.logFmtLogger = exports.labelMetricsScoped = exports.jsonLogger = exports.invokeWithInterrupt = exports.interruptWhenPossible = exports.forkWithErrorHandler = exports.forkDaemon = exports.fork = exports.forEachParUnbounded = exports.forEachParN = exports.forEachConcurrentDiscard = exports.forEach = exports.finalizersMaskInternal = exports.finalizersMask = exports.filter = exports.fiberSuccesses = exports.fiberStarted = exports.fiberScoped = exports.fiberRefUnsafeMakeSupervisor = exports.fiberRefMakeWith = exports.fiberRefMakeRuntimeFlags = exports.fiberRefMakeContext = exports.fiberRefMake = exports.fiberRefLocallyScopedWith = exports.fiberRefLocallyScoped = exports.fiberLifetimes = exports.fiberJoinAll = exports.fiberInterruptFork = exports.fiberFailures = exports.fiberAwaitAll = exports.fiberAll = exports.fiberActive = exports.exists = exports.ensuring = exports.disconnect = exports.defaultLogger = exports.daemonChildren = exports.currentSupervisor = exports.currentRuntimeFlags = exports.currentMinimumLogLevel = exports.currentLoggers = exports.batchedLogger = exports.annotateLogsScoped = exports.allWith = exports.allSuccesses = exports.all = exports.addFinalizer = exports.acquireReleaseInterruptible = exports.acquireRelease = exports.FiberRuntime = void 0;
7
- exports.zipWithOptions = exports.zipRightOptions = exports.zipOptions = void 0;
6
+ exports.zipRightOptions = exports.zipOptions = exports.zipLeftOptions = exports.withTracerScoped = exports.withSpanScoped = exports.withRuntimeFlagsScoped = exports.withRandomScoped = exports.withEarlyRelease = exports.withConfigProviderScoped = exports.withClockScoped = exports.whenLogLevel = exports.validateWith = exports.validateFirst = exports.validateAllParDiscard = exports.validateAllPar = exports.validateAll = exports.validate = exports.using = exports.unsafeMakeChildFiber = exports.unsafeForkUnstarted = exports.unsafeFork = exports.tracerLogger = exports.tagMetricsScoped = exports.structuredLogger = exports.sequentialFinalizers = exports.scopedWith = exports.scopedEffect = exports.scopeWith = exports.scopeUse = exports.scopeTag = exports.scopeMake = exports.scopeExtend = exports.scope = exports.replicateEffect = exports.replicate = exports.reduceEffect = exports.raceWith = exports.raceFibersWith = exports.raceAll = exports.race = exports.prettyLogger = exports.partition = exports.parallelNFinalizers = exports.parallelFinalizers = exports.mergeAll = exports.makeSpanScoped = exports.loggerWithSpanAnnotations = exports.loggerWithLeveledLog = exports.loggerWithConsoleLog = exports.loggerWithConsoleError = exports.logFmtLogger = exports.labelMetricsScoped = exports.jsonLogger = exports.invokeWithInterrupt = exports.interruptWhenPossible = exports.forkWithErrorHandler = exports.forkDaemon = exports.fork = exports.forEachParUnbounded = exports.forEachParN = exports.forEachConcurrentDiscard = exports.forEach = exports.finalizersMaskInternal = exports.finalizersMask = exports.filter = exports.fiberSuccesses = exports.fiberStarted = exports.fiberScoped = exports.fiberRefUnsafeMakeSupervisor = exports.fiberRefMakeWith = exports.fiberRefMakeRuntimeFlags = exports.fiberRefMakeContext = exports.fiberRefMake = exports.fiberRefLocallyScopedWith = exports.fiberRefLocallyScoped = exports.fiberLifetimes = exports.fiberJoinAll = exports.fiberInterruptFork = exports.fiberFailures = exports.fiberAwaitAll = exports.fiberAll = exports.fiberActive = exports.exists = exports.ensuring = exports.disconnect = exports.defaultLogger = exports.daemonChildren = exports.currentSupervisor = exports.currentRuntimeFlags = exports.currentMinimumLogLevel = exports.currentLoggers = exports.batchedLogger = exports.annotateLogsScoped = exports.allWith = exports.allSuccesses = exports.all = exports.addFinalizer = exports.acquireReleaseInterruptible = exports.acquireRelease = exports.FiberRuntime = void 0;
7
+ exports.zipWithOptions = void 0;
8
8
  var RA = _interopRequireWildcard(require("../Array.js"));
9
9
  var Boolean = _interopRequireWildcard(require("../Boolean.js"));
10
10
  var Chunk = _interopRequireWildcard(require("../Chunk.js"));
@@ -1426,22 +1426,13 @@ const allEither = (effects, reconcile, options) => {
1426
1426
  };
1427
1427
  /* @internal */
1428
1428
  const all = (arg, options) => {
1429
- // Capture stack trace early (while user code is on stack)
1430
- const rawStack = new Error().stack ?? "";
1431
1429
  const [effects, reconcile] = allResolveInput(arg);
1432
- const count = Array.isArray(effects) ? effects.length : undefined;
1433
- let result;
1434
1430
  if (options?.mode === "validate") {
1435
- result = allValidate(effects, reconcile, options);
1431
+ return allValidate(effects, reconcile, options);
1436
1432
  } else if (options?.mode === "either") {
1437
- result = allEither(effects, reconcile, options);
1438
- } else {
1439
- result = options?.discard !== true && reconcile._tag === "Some" ? core.map(forEach(effects, _Function.identity, options), reconcile.value) : forEach(effects, _Function.identity, options);
1440
- }
1441
- // Set operation metadata in trace field for OpSupervision
1442
- ;
1443
- result.trace = core.makeOperationMeta("all", rawStack, count);
1444
- return result;
1433
+ return allEither(effects, reconcile, options);
1434
+ }
1435
+ return options?.discard !== true && reconcile._tag === "Some" ? core.map(forEach(effects, _Function.identity, options), reconcile.value) : forEach(effects, _Function.identity, options);
1445
1436
  };
1446
1437
  /* @internal */
1447
1438
  exports.all = all;
@@ -1457,20 +1448,13 @@ const replicate = exports.replicate = /*#__PURE__*/(0, _Function.dual)(2, (self,
1457
1448
  /* @internal */
1458
1449
  const replicateEffect = exports.replicateEffect = /*#__PURE__*/(0, _Function.dual)(args => core.isEffect(args[0]), (self, n, options) => all(replicate(self, n), options));
1459
1450
  /* @internal */
1460
- const forEach = exports.forEach = /*#__PURE__*/(0, _Function.dual)(args => Predicate.isIterable(args[0]), (self, f, options) => {
1461
- // Capture stack trace early (while user code is on stack)
1462
- const rawStack = new Error().stack ?? "";
1463
- const count = Array.isArray(self) ? self.length : undefined;
1464
- const result = core.withFiberRuntime(r => {
1465
- const isRequestBatchingEnabled = options?.batching === true || options?.batching === "inherit" && r.getFiberRef(core.currentRequestBatching);
1466
- if (options?.discard) {
1467
- return concurrency.match(options.concurrency, () => finalizersMaskInternal(ExecutionStrategy.sequential, options?.concurrentFinalizers)(restore => isRequestBatchingEnabled ? forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), true, false, 1) : core.forEachSequentialDiscard(self, (a, i) => restore(f(a, i)))), () => finalizersMaskInternal(ExecutionStrategy.parallel, options?.concurrentFinalizers)(restore => forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled, false)), n => finalizersMaskInternal(ExecutionStrategy.parallelN(n), options?.concurrentFinalizers)(restore => forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled, false, n)));
1468
- }
1469
- return concurrency.match(options?.concurrency, () => finalizersMaskInternal(ExecutionStrategy.sequential, options?.concurrentFinalizers)(restore => isRequestBatchingEnabled ? forEachParN(self, 1, (a, i) => restore(f(a, i)), true) : core.forEachSequential(self, (a, i) => restore(f(a, i)))), () => finalizersMaskInternal(ExecutionStrategy.parallel, options?.concurrentFinalizers)(restore => forEachParUnbounded(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled)), n => finalizersMaskInternal(ExecutionStrategy.parallelN(n), options?.concurrentFinalizers)(restore => forEachParN(self, n, (a, i) => restore(f(a, i)), isRequestBatchingEnabled)));
1470
- });
1471
- result.trace = core.makeOperationMeta("forEach", rawStack, count);
1472
- return result;
1473
- });
1451
+ const forEach = exports.forEach = /*#__PURE__*/(0, _Function.dual)(args => Predicate.isIterable(args[0]), (self, f, options) => core.withFiberRuntime(r => {
1452
+ const isRequestBatchingEnabled = options?.batching === true || options?.batching === "inherit" && r.getFiberRef(core.currentRequestBatching);
1453
+ if (options?.discard) {
1454
+ return concurrency.match(options.concurrency, () => finalizersMaskInternal(ExecutionStrategy.sequential, options?.concurrentFinalizers)(restore => isRequestBatchingEnabled ? forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), true, false, 1) : core.forEachSequentialDiscard(self, (a, i) => restore(f(a, i)))), () => finalizersMaskInternal(ExecutionStrategy.parallel, options?.concurrentFinalizers)(restore => forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled, false)), n => finalizersMaskInternal(ExecutionStrategy.parallelN(n), options?.concurrentFinalizers)(restore => forEachConcurrentDiscard(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled, false, n)));
1455
+ }
1456
+ return concurrency.match(options?.concurrency, () => finalizersMaskInternal(ExecutionStrategy.sequential, options?.concurrentFinalizers)(restore => isRequestBatchingEnabled ? forEachParN(self, 1, (a, i) => restore(f(a, i)), true) : core.forEachSequential(self, (a, i) => restore(f(a, i)))), () => finalizersMaskInternal(ExecutionStrategy.parallel, options?.concurrentFinalizers)(restore => forEachParUnbounded(self, (a, i) => restore(f(a, i)), isRequestBatchingEnabled)), n => finalizersMaskInternal(ExecutionStrategy.parallelN(n), options?.concurrentFinalizers)(restore => forEachParN(self, n, (a, i) => restore(f(a, i)), isRequestBatchingEnabled)));
1457
+ }));
1474
1458
  /* @internal */
1475
1459
  const forEachParUnbounded = (self, f, batching) => core.suspend(() => {
1476
1460
  const as = RA.fromIterable(self);
@@ -1645,27 +1629,10 @@ const forEachParN = (self, n, f, batching) => core.suspend(() => {
1645
1629
  });
1646
1630
  /* @internal */
1647
1631
  exports.forEachParN = forEachParN;
1648
- const fork = self => {
1649
- // Capture stack trace immediately while user code is on stack
1650
- // Creating Error object is cheap; parsing is delayed until we know capture is enabled
1651
- const rawStack = new Error().stack ?? "";
1652
- const result = core.withFiberRuntime((state, status) => {
1653
- // Check if capture is enabled, then parse the pre-captured stack if needed
1654
- const capturedLocation = state.getFiberRef(core.currentCaptureStackTraces) && rawStack ? tracer.parseSourceLocationFromStack(rawStack) : undefined;
1655
- const fiber = unsafeForkWithLocation(self, state, status.runtimeFlags, null, capturedLocation);
1656
- return core.succeed(fiber);
1657
- });
1658
- result.trace = core.makeOperationMeta("fork", rawStack, 1);
1659
- return result;
1660
- };
1632
+ const fork = self => core.withFiberRuntime((state, status) => core.succeed(unsafeFork(self, state, status.runtimeFlags)));
1661
1633
  /* @internal */
1662
1634
  exports.fork = fork;
1663
- const forkDaemon = self => {
1664
- const rawStack = new Error().stack ?? "";
1665
- const result = forkWithScopeOverride(self, fiberScope.globalScope);
1666
- result.trace = core.makeOperationMeta("forkDaemon", rawStack, 1);
1667
- return result;
1668
- };
1635
+ const forkDaemon = self => forkWithScopeOverride(self, fiberScope.globalScope);
1669
1636
  /* @internal */
1670
1637
  exports.forkDaemon = forkDaemon;
1671
1638
  const forkWithErrorHandler = exports.forkWithErrorHandler = /*#__PURE__*/(0, _Function.dual)(2, (self, handler) => fork(core.onError(self, cause => {
@@ -1685,13 +1652,6 @@ const unsafeFork = (effect, parentFiber, parentRuntimeFlags, overrideScope = nul
1685
1652
  };
1686
1653
  /** @internal */
1687
1654
  exports.unsafeFork = unsafeFork;
1688
- const unsafeForkWithLocation = (effect, parentFiber, parentRuntimeFlags, overrideScope = null, capturedLocation = undefined) => {
1689
- const childFiber = unsafeMakeChildFiberWithLocation(effect, parentFiber, parentRuntimeFlags, overrideScope, capturedLocation);
1690
- childFiber.resume(effect);
1691
- return childFiber;
1692
- };
1693
- /** @internal */
1694
- exports.unsafeForkWithLocation = unsafeForkWithLocation;
1695
1655
  const unsafeForkUnstarted = (effect, parentFiber, parentRuntimeFlags, overrideScope = null) => {
1696
1656
  const childFiber = unsafeMakeChildFiber(effect, parentFiber, parentRuntimeFlags, overrideScope);
1697
1657
  return childFiber;
@@ -1699,19 +1659,10 @@ const unsafeForkUnstarted = (effect, parentFiber, parentRuntimeFlags, overrideSc
1699
1659
  /** @internal */
1700
1660
  exports.unsafeForkUnstarted = unsafeForkUnstarted;
1701
1661
  const unsafeMakeChildFiber = (effect, parentFiber, parentRuntimeFlags, overrideScope = null) => {
1702
- return unsafeMakeChildFiberWithLocation(effect, parentFiber, parentRuntimeFlags, overrideScope, undefined);
1703
- };
1704
- /** @internal */
1705
- exports.unsafeMakeChildFiber = unsafeMakeChildFiber;
1706
- const unsafeMakeChildFiberWithLocation = (effect, parentFiber, parentRuntimeFlags, overrideScope = null, capturedLocation = undefined) => {
1707
1662
  const childId = FiberId.unsafeMake();
1708
1663
  const parentFiberRefs = parentFiber.getFiberRefs();
1709
1664
  const childFiberRefs = fiberRefs.forkAs(parentFiberRefs, childId);
1710
1665
  const childFiber = new FiberRuntime(childId, childFiberRefs, parentRuntimeFlags);
1711
- // Set pre-captured source location if enabled
1712
- if (capturedLocation && parentFiber.getFiberRef(core.currentCaptureStackTraces)) {
1713
- childFiber.setFiberRef(core.currentSourceLocation, capturedLocation);
1714
- }
1715
1666
  const childContext = fiberRefs.getOrDefault(childFiberRefs, core.currentContext);
1716
1667
  const supervisor = childFiber.currentSupervisor;
1717
1668
  supervisor.onStart(childContext, effect, Option.some(parentFiber), childFiber);
@@ -1721,7 +1672,7 @@ const unsafeMakeChildFiberWithLocation = (effect, parentFiber, parentRuntimeFlag
1721
1672
  return childFiber;
1722
1673
  };
1723
1674
  /* @internal */
1724
- exports.unsafeMakeChildFiberWithLocation = unsafeMakeChildFiberWithLocation;
1675
+ exports.unsafeMakeChildFiber = unsafeMakeChildFiber;
1725
1676
  const forkWithScopeOverride = (self, scopeOverride) => core.withFiberRuntime((parentFiber, parentStatus) => core.succeed(unsafeFork(self, parentFiber, parentStatus.runtimeFlags, scopeOverride)));
1726
1677
  /* @internal */
1727
1678
  const mergeAll = exports.mergeAll = /*#__PURE__*/(0, _Function.dual)(args => Predicate.isFunction(args[2]), (elements, zero, f, options) => concurrency.matchSimple(options?.concurrency, () => RA.fromIterable(elements).reduce((acc, a, i) => core.zipWith(acc, a, (acc, a) => f(acc, a, i)), core.succeed(zero)), () => core.flatMap(Ref.make(zero), acc => core.flatMap(forEach(elements, (effect, i) => core.flatMap(effect, a => Ref.update(acc, b => f(b, a, i))), options), () => Ref.get(acc)))));