effect 3.7.3 → 3.8.0

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 (209) hide show
  1. package/Mailbox/package.json +6 -0
  2. package/dist/cjs/Deferred.js.map +1 -1
  3. package/dist/cjs/Duration.js +99 -35
  4. package/dist/cjs/Duration.js.map +1 -1
  5. package/dist/cjs/Effect.js +30 -3
  6. package/dist/cjs/Effect.js.map +1 -1
  7. package/dist/cjs/Fiber.js.map +1 -1
  8. package/dist/cjs/FiberRef.js.map +1 -1
  9. package/dist/cjs/Logger.js +29 -1
  10. package/dist/cjs/Logger.js.map +1 -1
  11. package/dist/cjs/Mailbox.js +95 -0
  12. package/dist/cjs/Mailbox.js.map +1 -0
  13. package/dist/cjs/MutableHashMap.js +13 -1
  14. package/dist/cjs/MutableHashMap.js.map +1 -1
  15. package/dist/cjs/Number.js +20 -1
  16. package/dist/cjs/Number.js.map +1 -1
  17. package/dist/cjs/Queue.js.map +1 -1
  18. package/dist/cjs/RcMap.js +6 -1
  19. package/dist/cjs/RcMap.js.map +1 -1
  20. package/dist/cjs/RcRef.js.map +1 -1
  21. package/dist/cjs/Ref.js.map +1 -1
  22. package/dist/cjs/Stream.js +11 -2
  23. package/dist/cjs/Stream.js.map +1 -1
  24. package/dist/cjs/SubscriptionRef.js.map +1 -1
  25. package/dist/cjs/SynchronizedRef.js.map +1 -1
  26. package/dist/cjs/index.js +4 -2
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/internal/core.js +32 -25
  29. package/dist/cjs/internal/core.js.map +1 -1
  30. package/dist/cjs/internal/defaultServices.js +8 -5
  31. package/dist/cjs/internal/defaultServices.js.map +1 -1
  32. package/dist/cjs/internal/effect/circular.js +81 -8
  33. package/dist/cjs/internal/effect/circular.js.map +1 -1
  34. package/dist/cjs/internal/fiber.js +51 -26
  35. package/dist/cjs/internal/fiber.js.map +1 -1
  36. package/dist/cjs/internal/fiberRefs.js.map +1 -1
  37. package/dist/cjs/internal/fiberRuntime.js +126 -96
  38. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  39. package/dist/cjs/internal/groupBy.js +6 -1
  40. package/dist/cjs/internal/groupBy.js.map +1 -1
  41. package/dist/cjs/internal/layer.js +3 -3
  42. package/dist/cjs/internal/layer.js.map +1 -1
  43. package/dist/cjs/internal/logger.js +4 -1
  44. package/dist/cjs/internal/logger.js.map +1 -1
  45. package/dist/cjs/internal/mailbox.js +408 -0
  46. package/dist/cjs/internal/mailbox.js.map +1 -0
  47. package/dist/cjs/internal/managedRuntime.js +1 -1
  48. package/dist/cjs/internal/managedRuntime.js.map +1 -1
  49. package/dist/cjs/internal/pubsub.js +6 -1
  50. package/dist/cjs/internal/pubsub.js.map +1 -1
  51. package/dist/cjs/internal/queue.js +6 -1
  52. package/dist/cjs/internal/queue.js.map +1 -1
  53. package/dist/cjs/internal/rcMap.js +7 -1
  54. package/dist/cjs/internal/rcMap.js.map +1 -1
  55. package/dist/cjs/internal/rcRef.js +10 -6
  56. package/dist/cjs/internal/rcRef.js.map +1 -1
  57. package/dist/cjs/internal/ref.js +7 -7
  58. package/dist/cjs/internal/ref.js.map +1 -1
  59. package/dist/cjs/internal/runtime.js +1 -1
  60. package/dist/cjs/internal/runtime.js.map +1 -1
  61. package/dist/cjs/internal/stream.js +7 -2
  62. package/dist/cjs/internal/stream.js.map +1 -1
  63. package/dist/cjs/internal/subscriptionRef.js +7 -8
  64. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  65. package/dist/cjs/internal/version.js +1 -1
  66. package/dist/dts/Deferred.d.ts +21 -2
  67. package/dist/dts/Deferred.d.ts.map +1 -1
  68. package/dist/dts/Duration.d.ts +38 -1
  69. package/dist/dts/Duration.d.ts.map +1 -1
  70. package/dist/dts/Effect.d.ts +45 -0
  71. package/dist/dts/Effect.d.ts.map +1 -1
  72. package/dist/dts/Fiber.d.ts +69 -2
  73. package/dist/dts/Fiber.d.ts.map +1 -1
  74. package/dist/dts/FiberRef.d.ts +21 -2
  75. package/dist/dts/FiberRef.d.ts.map +1 -1
  76. package/dist/dts/Logger.d.ts +28 -0
  77. package/dist/dts/Logger.d.ts.map +1 -1
  78. package/dist/dts/Mailbox.d.ts +220 -0
  79. package/dist/dts/Mailbox.d.ts.map +1 -0
  80. package/dist/dts/MutableHashMap.d.ts +5 -0
  81. package/dist/dts/MutableHashMap.d.ts.map +1 -1
  82. package/dist/dts/Number.d.ts +19 -0
  83. package/dist/dts/Number.d.ts.map +1 -1
  84. package/dist/dts/Queue.d.ts +40 -1
  85. package/dist/dts/Queue.d.ts.map +1 -1
  86. package/dist/dts/RcMap.d.ts +5 -0
  87. package/dist/dts/RcMap.d.ts.map +1 -1
  88. package/dist/dts/RcRef.d.ts +22 -2
  89. package/dist/dts/RcRef.d.ts.map +1 -1
  90. package/dist/dts/Ref.d.ts +22 -2
  91. package/dist/dts/Ref.d.ts.map +1 -1
  92. package/dist/dts/Stream.d.ts +30 -0
  93. package/dist/dts/Stream.d.ts.map +1 -1
  94. package/dist/dts/SubscriptionRef.d.ts +20 -0
  95. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  96. package/dist/dts/SynchronizedRef.d.ts +20 -0
  97. package/dist/dts/SynchronizedRef.d.ts.map +1 -1
  98. package/dist/dts/index.d.ts +5 -0
  99. package/dist/dts/index.d.ts.map +1 -1
  100. package/dist/dts/internal/core.d.ts.map +1 -1
  101. package/dist/dts/internal/fiber.d.ts.map +1 -1
  102. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  103. package/dist/dts/internal/logger.d.ts.map +1 -1
  104. package/dist/dts/internal/mailbox.d.ts +2 -0
  105. package/dist/dts/internal/mailbox.d.ts.map +1 -0
  106. package/dist/dts/internal/stream.d.ts +22 -0
  107. package/dist/dts/internal/stream.d.ts.map +1 -1
  108. package/dist/esm/Deferred.js.map +1 -1
  109. package/dist/esm/Duration.js +92 -33
  110. package/dist/esm/Duration.js.map +1 -1
  111. package/dist/esm/Effect.js +27 -0
  112. package/dist/esm/Effect.js.map +1 -1
  113. package/dist/esm/Fiber.js.map +1 -1
  114. package/dist/esm/FiberRef.js.map +1 -1
  115. package/dist/esm/Logger.js +28 -0
  116. package/dist/esm/Logger.js.map +1 -1
  117. package/dist/esm/Mailbox.js +85 -0
  118. package/dist/esm/Mailbox.js.map +1 -0
  119. package/dist/esm/MutableHashMap.js +11 -0
  120. package/dist/esm/MutableHashMap.js.map +1 -1
  121. package/dist/esm/Number.js +19 -0
  122. package/dist/esm/Number.js.map +1 -1
  123. package/dist/esm/Queue.js.map +1 -1
  124. package/dist/esm/RcMap.js +5 -0
  125. package/dist/esm/RcMap.js.map +1 -1
  126. package/dist/esm/RcRef.js.map +1 -1
  127. package/dist/esm/Ref.js.map +1 -1
  128. package/dist/esm/Stream.js +9 -0
  129. package/dist/esm/Stream.js.map +1 -1
  130. package/dist/esm/SubscriptionRef.js.map +1 -1
  131. package/dist/esm/SynchronizedRef.js.map +1 -1
  132. package/dist/esm/index.js +5 -0
  133. package/dist/esm/index.js.map +1 -1
  134. package/dist/esm/internal/core.js +33 -26
  135. package/dist/esm/internal/core.js.map +1 -1
  136. package/dist/esm/internal/defaultServices.js +6 -4
  137. package/dist/esm/internal/defaultServices.js.map +1 -1
  138. package/dist/esm/internal/effect/circular.js +77 -6
  139. package/dist/esm/internal/effect/circular.js.map +1 -1
  140. package/dist/esm/internal/fiber.js +51 -26
  141. package/dist/esm/internal/fiber.js.map +1 -1
  142. package/dist/esm/internal/fiberRefs.js.map +1 -1
  143. package/dist/esm/internal/fiberRuntime.js +124 -95
  144. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  145. package/dist/esm/internal/groupBy.js +6 -1
  146. package/dist/esm/internal/groupBy.js.map +1 -1
  147. package/dist/esm/internal/layer.js +3 -3
  148. package/dist/esm/internal/layer.js.map +1 -1
  149. package/dist/esm/internal/logger.js +3 -0
  150. package/dist/esm/internal/logger.js.map +1 -1
  151. package/dist/esm/internal/mailbox.js +395 -0
  152. package/dist/esm/internal/mailbox.js.map +1 -0
  153. package/dist/esm/internal/managedRuntime.js +1 -1
  154. package/dist/esm/internal/managedRuntime.js.map +1 -1
  155. package/dist/esm/internal/pubsub.js +6 -1
  156. package/dist/esm/internal/pubsub.js.map +1 -1
  157. package/dist/esm/internal/queue.js +6 -1
  158. package/dist/esm/internal/queue.js.map +1 -1
  159. package/dist/esm/internal/rcMap.js +5 -0
  160. package/dist/esm/internal/rcMap.js.map +1 -1
  161. package/dist/esm/internal/rcRef.js +10 -6
  162. package/dist/esm/internal/rcRef.js.map +1 -1
  163. package/dist/esm/internal/ref.js +7 -7
  164. package/dist/esm/internal/ref.js.map +1 -1
  165. package/dist/esm/internal/runtime.js +1 -1
  166. package/dist/esm/internal/runtime.js.map +1 -1
  167. package/dist/esm/internal/stream.js +5 -0
  168. package/dist/esm/internal/stream.js.map +1 -1
  169. package/dist/esm/internal/subscriptionRef.js +7 -8
  170. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  171. package/dist/esm/internal/version.js +1 -1
  172. package/package.json +9 -1
  173. package/src/Deferred.ts +21 -2
  174. package/src/Duration.ts +112 -35
  175. package/src/Effect.ts +52 -0
  176. package/src/Fiber.ts +78 -2
  177. package/src/FiberRef.ts +21 -2
  178. package/src/Logger.ts +30 -0
  179. package/src/Mailbox.ts +236 -0
  180. package/src/MutableHashMap.ts +12 -0
  181. package/src/Number.ts +23 -0
  182. package/src/Queue.ts +42 -1
  183. package/src/RcMap.ts +6 -0
  184. package/src/RcRef.ts +24 -2
  185. package/src/Ref.ts +22 -2
  186. package/src/Stream.ts +36 -0
  187. package/src/SubscriptionRef.ts +22 -0
  188. package/src/SynchronizedRef.ts +20 -0
  189. package/src/index.ts +6 -0
  190. package/src/internal/core.ts +31 -28
  191. package/src/internal/defaultServices.ts +9 -10
  192. package/src/internal/effect/circular.ts +83 -6
  193. package/src/internal/fiber.ts +56 -29
  194. package/src/internal/fiberRefs.ts +1 -2
  195. package/src/internal/fiberRuntime.ts +133 -102
  196. package/src/internal/groupBy.ts +7 -1
  197. package/src/internal/layer.ts +3 -3
  198. package/src/internal/logger.ts +4 -0
  199. package/src/internal/mailbox.ts +461 -0
  200. package/src/internal/managedRuntime.ts +1 -1
  201. package/src/internal/pubsub.ts +9 -2
  202. package/src/internal/queue.ts +7 -1
  203. package/src/internal/rcMap.ts +8 -0
  204. package/src/internal/rcRef.ts +10 -6
  205. package/src/internal/ref.ts +7 -7
  206. package/src/internal/runtime.ts +1 -1
  207. package/src/internal/stream.ts +53 -0
  208. package/src/internal/subscriptionRef.ts +7 -8
  209. package/src/internal/version.ts +1 -1
@@ -47,9 +47,14 @@ export const sleep = (duration: Duration.DurationInput): Effect.Effect<void> =>
47
47
  return clockWith((clock) => clock.sleep(decodedDuration))
48
48
  }
49
49
 
50
+ /** @internal */
51
+ export const defaultServicesWith = <A, E, R>(
52
+ f: (services: Context.Context<DefaultServices.DefaultServices>) => Effect.Effect<A, E, R>
53
+ ) => core.withFiberRuntime<A, E, R>((fiber) => f(fiber.currentDefaultServices))
54
+
50
55
  /** @internal */
51
56
  export const clockWith = <A, E, R>(f: (clock: Clock.Clock) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
52
- core.fiberRefGetWith(currentServices, (services) => f(Context.get(services, clock.clockTag)))
57
+ defaultServicesWith((services) => f(services.unsafeMap.get(clock.clockTag.key)))
53
58
 
54
59
  /** @internal */
55
60
  export const currentTimeMillis: Effect.Effect<number> = clockWith((clock) => clock.currentTimeMillis)
@@ -83,10 +88,7 @@ export const withConfigProvider = dual<
83
88
  export const configProviderWith = <A, E, R>(
84
89
  f: (configProvider: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
85
90
  ): Effect.Effect<A, E, R> =>
86
- core.fiberRefGetWith(
87
- currentServices,
88
- (services) => f(Context.get(services, configProvider.configProviderTag))
89
- )
91
+ defaultServicesWith((services) => f(services.unsafeMap.get(configProvider.configProviderTag.key)))
90
92
 
91
93
  /** @internal */
92
94
  export const config = <A>(config: Config.Config<A>) => configProviderWith((_) => _.load(config))
@@ -98,10 +100,7 @@ export const configOrDie = <A>(config: Config.Config<A>) => core.orDie(configPro
98
100
 
99
101
  /** @internal */
100
102
  export const randomWith = <A, E, R>(f: (random: Random.Random) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
101
- core.fiberRefGetWith(
102
- currentServices,
103
- (services) => f(Context.get(services, random.randomTag))
104
- )
103
+ defaultServicesWith((services) => f(services.unsafeMap.get(random.randomTag.key)))
105
104
 
106
105
  /** @internal */
107
106
  export const withRandom = dual<
@@ -151,7 +150,7 @@ export const choice = <Self extends Iterable<unknown>>(
151
150
 
152
151
  /** @internal */
153
152
  export const tracerWith = <A, E, R>(f: (tracer: Tracer.Tracer) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
154
- core.fiberRefGetWith(currentServices, (services) => f(Context.get(services, tracer.tracerTag)))
153
+ defaultServicesWith((services) => f(services.unsafeMap.get(tracer.tracerTag.key)))
155
154
 
156
155
  /** @internal */
157
156
  export const withTracer = dual<
@@ -2,6 +2,7 @@ import type * as Cause from "../../Cause.js"
2
2
  import type * as Deferred from "../../Deferred.js"
3
3
  import * as Duration from "../../Duration.js"
4
4
  import type * as Effect from "../../Effect.js"
5
+ import * as Effectable from "../../Effectable.js"
5
6
  import * as Equal from "../../Equal.js"
6
7
  import type { Equivalence } from "../../Equivalence.js"
7
8
  import * as Exit from "../../Exit.js"
@@ -92,6 +93,17 @@ class Semaphore {
92
93
  (permits) => fiberRuntime.ensuring(restore(self), this.release(permits))
93
94
  )
94
95
  )
96
+
97
+ readonly withPermitsIfAvailable = (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
98
+ core.uninterruptibleMask((restore) =>
99
+ core.suspend(() => {
100
+ if (this.free < n) {
101
+ return effect.succeedNone
102
+ }
103
+ this.taken += n
104
+ return fiberRuntime.ensuring(restore(effect.asSome(self)), this.release(n))
105
+ })
106
+ )
95
107
  }
96
108
 
97
109
  /** @internal */
@@ -100,6 +112,67 @@ export const unsafeMakeSemaphore = (permits: number): Semaphore => new Semaphore
100
112
  /** @internal */
101
113
  export const makeSemaphore = (permits: number) => core.sync(() => unsafeMakeSemaphore(permits))
102
114
 
115
+ class Latch implements Effect.Latch {
116
+ waiters: Array<(_: Effect.Effect<void>) => void> = []
117
+ scheduled = false
118
+ constructor(private isOpen: boolean) {}
119
+
120
+ private unsafeSchedule(fiber: Fiber.RuntimeFiber<void>) {
121
+ if (this.scheduled || this.waiters.length === 0) {
122
+ return core.void
123
+ }
124
+ this.scheduled = true
125
+ fiber.currentScheduler.scheduleTask(this.flushWaiters, fiber.getFiberRef(core.currentSchedulingPriority))
126
+ return core.void
127
+ }
128
+ private flushWaiters = () => {
129
+ this.scheduled = false
130
+ const waiters = this.waiters
131
+ this.waiters = []
132
+ for (let i = 0; i < waiters.length; i++) {
133
+ waiters[i](core.exitVoid)
134
+ }
135
+ }
136
+
137
+ open = core.withFiberRuntime<void>((fiber) => {
138
+ if (this.isOpen) {
139
+ return core.void
140
+ }
141
+ this.isOpen = true
142
+ return this.unsafeSchedule(fiber)
143
+ })
144
+ release = core.withFiberRuntime<void>((fiber) => {
145
+ if (this.isOpen) {
146
+ return core.void
147
+ }
148
+ return this.unsafeSchedule(fiber)
149
+ })
150
+ await = core.unsafeAsync<void>((resume) => {
151
+ if (this.isOpen) {
152
+ return resume(core.void)
153
+ }
154
+ this.waiters.push(resume)
155
+ return core.sync(() => {
156
+ const index = this.waiters.indexOf(resume)
157
+ if (index !== -1) {
158
+ this.waiters.splice(index, 1)
159
+ }
160
+ })
161
+ })
162
+ close = core.sync(() => {
163
+ this.isOpen = false
164
+ })
165
+ whenOpen = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
166
+ return core.zipRight(this.await, self)
167
+ }
168
+ }
169
+
170
+ /** @internal */
171
+ export const unsafeMakeLatch = (open?: boolean | undefined): Effect.Latch => new Latch(open ?? false)
172
+
173
+ /** @internal */
174
+ export const makeLatch = (open?: boolean | undefined) => core.sync(() => unsafeMakeLatch(open))
175
+
103
176
  /** @internal */
104
177
  export const awaitAllChildren = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
105
178
  ensuringChildren(self, fiberRuntime.fiberAwaitAll)
@@ -571,18 +644,21 @@ export const synchronizedVariance = {
571
644
  }
572
645
 
573
646
  /** @internal */
574
- class SynchronizedImpl<in out A> implements Synchronized.SynchronizedRef<A> {
647
+ class SynchronizedImpl<in out A> extends Effectable.Class<A> implements Synchronized.SynchronizedRef<A> {
575
648
  readonly [SynchronizedTypeId] = synchronizedVariance
576
649
  readonly [internalRef.RefTypeId] = internalRef.refVariance
577
- readonly [Readable.TypeId]: Readable.TypeId
650
+ readonly [Readable.TypeId]: Readable.TypeId = Readable.TypeId
578
651
  constructor(
579
652
  readonly ref: Ref.Ref<A>,
580
653
  readonly withLock: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
581
654
  ) {
582
- this[Readable.TypeId] = Readable.TypeId
655
+ super()
583
656
  this.get = internalRef.get(this.ref)
584
657
  }
585
658
  readonly get: Effect.Effect<A>
659
+ commit() {
660
+ return this.get
661
+ }
586
662
  modify<B>(f: (a: A) => readonly [B, A]): Effect.Effect<B> {
587
663
  return this.modifyEffect((a) => core.succeed(f(a)))
588
664
  }
@@ -594,9 +670,6 @@ class SynchronizedImpl<in out A> implements Synchronized.SynchronizedRef<A> {
594
670
  )
595
671
  )
596
672
  }
597
- pipe() {
598
- return pipeArguments(this, arguments)
599
- }
600
673
  }
601
674
 
602
675
  /** @internal */
@@ -664,6 +737,10 @@ export const zipWithFiber = dual<
664
737
  f: (a: A, b: B) => C
665
738
  ) => Fiber.Fiber<C, E | E2>
666
739
  >(3, (self, that, f) => ({
740
+ ...Effectable.CommitPrototype,
741
+ commit() {
742
+ return internalFiber.join(this)
743
+ },
667
744
  [internalFiber.FiberTypeId]: internalFiber.fiberVariance,
668
745
  id: () => pipe(self.id(), FiberId.getOrElse(that.id())),
669
746
  await: pipe(
@@ -14,6 +14,7 @@ import * as order from "../Order.js"
14
14
  import { pipeArguments } from "../Pipeable.js"
15
15
  import { hasProperty } from "../Predicate.js"
16
16
  import * as core from "./core.js"
17
+ import * as effectable from "./effectable.js"
17
18
  import * as fiberScope from "./fiberScope.js"
18
19
  import * as runtimeFlags from "./runtimeFlags.js"
19
20
 
@@ -76,15 +77,23 @@ export const children = <A, E>(
76
77
  ): Effect.Effect<Array<Fiber.RuntimeFiber<any, any>>> => self.children
77
78
 
78
79
  /** @internal */
79
- export const done = <A, E>(exit: Exit.Exit<A, E>): Fiber.Fiber<A, E> => ({
80
- ...fiberProto,
81
- id: () => FiberId.none,
82
- await: core.succeed(exit),
83
- children: core.succeed([]),
84
- inheritAll: core.void,
85
- poll: core.succeed(Option.some(exit)),
86
- interruptAsFork: () => core.void
87
- })
80
+ export const done = <A, E>(exit: Exit.Exit<A, E>): Fiber.Fiber<A, E> => {
81
+ const _fiber = {
82
+ ...effectable.CommitPrototype,
83
+ commit() {
84
+ return join(this)
85
+ },
86
+ ...fiberProto,
87
+ id: () => FiberId.none,
88
+ await: core.succeed(exit),
89
+ children: core.succeed([]),
90
+ inheritAll: core.void,
91
+ poll: core.succeed(Option.some(exit)),
92
+ interruptAsFork: () => core.void
93
+ }
94
+
95
+ return _fiber
96
+ }
88
97
 
89
98
  /** @internal */
90
99
  export const dump = <A, E>(self: Fiber.RuntimeFiber<A, E>): Effect.Effect<Fiber.Fiber.Dump> =>
@@ -148,25 +157,32 @@ export const map = dual<
148
157
  export const mapEffect = dual<
149
158
  <A, A2, E2>(f: (a: A) => Effect.Effect<A2, E2>) => <E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A2, E | E2>,
150
159
  <A, E, A2, E2>(self: Fiber.Fiber<A, E>, f: (a: A) => Effect.Effect<A2, E2>) => Fiber.Fiber<A2, E | E2>
151
- >(2, (self, f) => ({
152
- ...fiberProto,
153
- id: () => self.id(),
154
- await: core.flatMap(self.await, Exit.forEachEffect(f)),
155
- children: self.children,
156
- inheritAll: self.inheritAll,
157
- poll: core.flatMap(self.poll, (result) => {
158
- switch (result._tag) {
159
- case "None":
160
- return core.succeed(Option.none())
161
- case "Some":
162
- return pipe(
163
- Exit.forEachEffect(result.value, f),
164
- core.map(Option.some)
165
- )
166
- }
167
- }),
168
- interruptAsFork: (id) => self.interruptAsFork(id)
169
- }))
160
+ >(2, (self, f) => {
161
+ const _fiber = {
162
+ ...effectable.CommitPrototype,
163
+ commit() {
164
+ return join(this)
165
+ },
166
+ ...fiberProto,
167
+ id: () => self.id(),
168
+ await: core.flatMap(self.await, Exit.forEachEffect(f)),
169
+ children: self.children,
170
+ inheritAll: self.inheritAll,
171
+ poll: core.flatMap(self.poll, (result) => {
172
+ switch (result._tag) {
173
+ case "None":
174
+ return core.succeed(Option.none())
175
+ case "Some":
176
+ return pipe(
177
+ Exit.forEachEffect(result.value, f),
178
+ core.map(Option.some)
179
+ )
180
+ }
181
+ }),
182
+ interruptAsFork: (id: FiberId.FiberId) => self.interruptAsFork(id)
183
+ }
184
+ return _fiber
185
+ })
170
186
 
171
187
  /** @internal */
172
188
  export const mapFiber = dual<
@@ -212,7 +228,11 @@ export const match = dual<
212
228
  })
213
229
 
214
230
  /** @internal */
215
- export const never: Fiber.Fiber<never> = {
231
+ const _never = {
232
+ ...effectable.CommitPrototype,
233
+ commit() {
234
+ return join(this)
235
+ },
216
236
  ...fiberProto,
217
237
  id: () => FiberId.none,
218
238
  await: core.never,
@@ -222,11 +242,18 @@ export const never: Fiber.Fiber<never> = {
222
242
  interruptAsFork: () => core.never
223
243
  }
224
244
 
245
+ /** @internal */
246
+ export const never: Fiber.Fiber<never> = _never
247
+
225
248
  /** @internal */
226
249
  export const orElse = dual<
227
250
  <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A | A2, E | E2>,
228
251
  <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<A | A2, E | E2>
229
252
  >(2, (self, that) => ({
253
+ ...effectable.CommitPrototype,
254
+ commit() {
255
+ return join(this)
256
+ },
230
257
  ...fiberProto,
231
258
  id: () => FiberId.getOrElse(self.id(), that.id()),
232
259
  await: core.zipWith(
@@ -33,8 +33,7 @@ export class FiberRefsImpl implements FiberRefs.FiberRefs {
33
33
  FiberRef.FiberRef<any>,
34
34
  Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>
35
35
  >
36
- ) {
37
- }
36
+ ) {}
38
37
  pipe() {
39
38
  return pipeArguments(this, arguments)
40
39
  }