effect 3.1.0 → 3.1.2

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 (278) hide show
  1. package/dist/cjs/Array.js +10 -13
  2. package/dist/cjs/Array.js.map +1 -1
  3. package/dist/cjs/BigDecimal.js +14 -17
  4. package/dist/cjs/BigDecimal.js.map +1 -1
  5. package/dist/cjs/BigInt.js +41 -46
  6. package/dist/cjs/BigInt.js.map +1 -1
  7. package/dist/cjs/Boolean.js +13 -13
  8. package/dist/cjs/Brand.js +2 -2
  9. package/dist/cjs/Chunk.js +3 -3
  10. package/dist/cjs/Context.js +15 -20
  11. package/dist/cjs/Context.js.map +1 -1
  12. package/dist/cjs/Cron.js +3 -6
  13. package/dist/cjs/Cron.js.map +1 -1
  14. package/dist/cjs/Data.js +8 -13
  15. package/dist/cjs/Data.js.map +1 -1
  16. package/dist/cjs/Duration.js +1 -1
  17. package/dist/cjs/Effect.js +77 -9
  18. package/dist/cjs/Effect.js.map +1 -1
  19. package/dist/cjs/Either.js +117 -59
  20. package/dist/cjs/Either.js.map +1 -1
  21. package/dist/cjs/Equal.js +26 -4
  22. package/dist/cjs/Equal.js.map +1 -1
  23. package/dist/cjs/FiberHandle.js.map +1 -1
  24. package/dist/cjs/FiberMap.js.map +1 -1
  25. package/dist/cjs/FiberSet.js.map +1 -1
  26. package/dist/cjs/Function.js +2 -2
  27. package/dist/cjs/Function.js.map +1 -1
  28. package/dist/cjs/Hash.js +29 -12
  29. package/dist/cjs/Hash.js.map +1 -1
  30. package/dist/cjs/Iterable.js +10 -13
  31. package/dist/cjs/Iterable.js.map +1 -1
  32. package/dist/cjs/List.js +2 -2
  33. package/dist/cjs/Metric.js +5 -7
  34. package/dist/cjs/Metric.js.map +1 -1
  35. package/dist/cjs/Number.js +20 -21
  36. package/dist/cjs/Number.js.map +1 -1
  37. package/dist/cjs/Option.js +223 -164
  38. package/dist/cjs/Option.js.map +1 -1
  39. package/dist/cjs/Order.js +1 -2
  40. package/dist/cjs/Order.js.map +1 -1
  41. package/dist/cjs/Ordering.js +2 -2
  42. package/dist/cjs/Predicate.js +9 -12
  43. package/dist/cjs/Predicate.js.map +1 -1
  44. package/dist/cjs/Readable.js.map +1 -1
  45. package/dist/cjs/Record.js +35 -47
  46. package/dist/cjs/Record.js.map +1 -1
  47. package/dist/cjs/RegExp.js +1 -1
  48. package/dist/cjs/Request.js +2 -2
  49. package/dist/cjs/Request.js.map +1 -1
  50. package/dist/cjs/Stream.js +82 -4
  51. package/dist/cjs/Stream.js.map +1 -1
  52. package/dist/cjs/String.js +81 -111
  53. package/dist/cjs/String.js.map +1 -1
  54. package/dist/cjs/Struct.js +13 -19
  55. package/dist/cjs/Struct.js.map +1 -1
  56. package/dist/cjs/Subscribable.js.map +1 -1
  57. package/dist/cjs/Symbol.js +3 -3
  58. package/dist/cjs/TestAnnotation.js.map +1 -1
  59. package/dist/cjs/TestAnnotationMap.js.map +1 -1
  60. package/dist/cjs/TestAnnotations.js.map +1 -1
  61. package/dist/cjs/TestClock.js.map +1 -1
  62. package/dist/cjs/TestLive.js.map +1 -1
  63. package/dist/cjs/TestSized.js.map +1 -1
  64. package/dist/cjs/Trie.js +28 -44
  65. package/dist/cjs/Trie.js.map +1 -1
  66. package/dist/cjs/Utils.js +35 -1
  67. package/dist/cjs/Utils.js.map +1 -1
  68. package/dist/cjs/internal/core-effect.js +4 -11
  69. package/dist/cjs/internal/core-effect.js.map +1 -1
  70. package/dist/cjs/internal/core.js +16 -4
  71. package/dist/cjs/internal/core.js.map +1 -1
  72. package/dist/cjs/internal/doNotation.js +23 -0
  73. package/dist/cjs/internal/doNotation.js.map +1 -0
  74. package/dist/cjs/internal/groupBy.js.map +1 -1
  75. package/dist/cjs/internal/stream.js +3 -7
  76. package/dist/cjs/internal/stream.js.map +1 -1
  77. package/dist/cjs/internal/version.js +1 -1
  78. package/dist/dts/Array.d.ts +10 -13
  79. package/dist/dts/Array.d.ts.map +1 -1
  80. package/dist/dts/BigDecimal.d.ts +14 -17
  81. package/dist/dts/BigDecimal.d.ts.map +1 -1
  82. package/dist/dts/BigInt.d.ts +41 -46
  83. package/dist/dts/BigInt.d.ts.map +1 -1
  84. package/dist/dts/Boolean.d.ts +13 -13
  85. package/dist/dts/Brand.d.ts +3 -3
  86. package/dist/dts/Chunk.d.ts +3 -3
  87. package/dist/dts/Context.d.ts +15 -20
  88. package/dist/dts/Context.d.ts.map +1 -1
  89. package/dist/dts/Cron.d.ts +3 -6
  90. package/dist/dts/Cron.d.ts.map +1 -1
  91. package/dist/dts/Data.d.ts +10 -16
  92. package/dist/dts/Data.d.ts.map +1 -1
  93. package/dist/dts/Duration.d.ts +1 -1
  94. package/dist/dts/Effect.d.ts +120 -26
  95. package/dist/dts/Effect.d.ts.map +1 -1
  96. package/dist/dts/Either.d.ts +155 -64
  97. package/dist/dts/Either.d.ts.map +1 -1
  98. package/dist/dts/Equal.d.ts.map +1 -1
  99. package/dist/dts/FiberHandle.d.ts.map +1 -1
  100. package/dist/dts/FiberMap.d.ts.map +1 -1
  101. package/dist/dts/FiberSet.d.ts.map +1 -1
  102. package/dist/dts/Function.d.ts +4 -2
  103. package/dist/dts/Function.d.ts.map +1 -1
  104. package/dist/dts/Hash.d.ts.map +1 -1
  105. package/dist/dts/HashMap.d.ts +2 -2
  106. package/dist/dts/Iterable.d.ts +10 -13
  107. package/dist/dts/Iterable.d.ts.map +1 -1
  108. package/dist/dts/List.d.ts +2 -2
  109. package/dist/dts/Metric.d.ts +5 -7
  110. package/dist/dts/Metric.d.ts.map +1 -1
  111. package/dist/dts/Number.d.ts +20 -21
  112. package/dist/dts/Number.d.ts.map +1 -1
  113. package/dist/dts/Option.d.ts +245 -155
  114. package/dist/dts/Option.d.ts.map +1 -1
  115. package/dist/dts/Order.d.ts +1 -2
  116. package/dist/dts/Order.d.ts.map +1 -1
  117. package/dist/dts/Ordering.d.ts +2 -2
  118. package/dist/dts/Predicate.d.ts +9 -12
  119. package/dist/dts/Predicate.d.ts.map +1 -1
  120. package/dist/dts/Readable.d.ts.map +1 -1
  121. package/dist/dts/Record.d.ts +35 -47
  122. package/dist/dts/Record.d.ts.map +1 -1
  123. package/dist/dts/RegExp.d.ts +1 -1
  124. package/dist/dts/Request.d.ts +2 -2
  125. package/dist/dts/Request.d.ts.map +1 -1
  126. package/dist/dts/Stream.d.ts +136 -31
  127. package/dist/dts/Stream.d.ts.map +1 -1
  128. package/dist/dts/String.d.ts +81 -111
  129. package/dist/dts/String.d.ts.map +1 -1
  130. package/dist/dts/Struct.d.ts +13 -19
  131. package/dist/dts/Struct.d.ts.map +1 -1
  132. package/dist/dts/Subscribable.d.ts.map +1 -1
  133. package/dist/dts/Symbol.d.ts +3 -3
  134. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  135. package/dist/dts/TestAnnotationMap.d.ts.map +1 -1
  136. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  137. package/dist/dts/TestClock.d.ts +1 -5
  138. package/dist/dts/TestClock.d.ts.map +1 -1
  139. package/dist/dts/TestLive.d.ts.map +1 -1
  140. package/dist/dts/TestSized.d.ts.map +1 -1
  141. package/dist/dts/Trie.d.ts +28 -44
  142. package/dist/dts/Trie.d.ts.map +1 -1
  143. package/dist/dts/Types.d.ts +10 -10
  144. package/dist/dts/Utils.d.ts +19 -0
  145. package/dist/dts/Utils.d.ts.map +1 -1
  146. package/dist/dts/internal/core.d.ts.map +1 -1
  147. package/dist/dts/internal/doNotation.d.ts +2 -0
  148. package/dist/dts/internal/doNotation.d.ts.map +1 -0
  149. package/dist/dts/internal/stream.d.ts.map +1 -1
  150. package/dist/esm/Array.js +10 -13
  151. package/dist/esm/Array.js.map +1 -1
  152. package/dist/esm/BigDecimal.js +14 -17
  153. package/dist/esm/BigDecimal.js.map +1 -1
  154. package/dist/esm/BigInt.js +41 -46
  155. package/dist/esm/BigInt.js.map +1 -1
  156. package/dist/esm/Boolean.js +13 -13
  157. package/dist/esm/Brand.js +2 -2
  158. package/dist/esm/Chunk.js +3 -3
  159. package/dist/esm/Context.js +15 -20
  160. package/dist/esm/Context.js.map +1 -1
  161. package/dist/esm/Cron.js +3 -6
  162. package/dist/esm/Cron.js.map +1 -1
  163. package/dist/esm/Data.js +9 -15
  164. package/dist/esm/Data.js.map +1 -1
  165. package/dist/esm/Duration.js +1 -1
  166. package/dist/esm/Effect.js +101 -11
  167. package/dist/esm/Effect.js.map +1 -1
  168. package/dist/esm/Either.js +141 -61
  169. package/dist/esm/Either.js.map +1 -1
  170. package/dist/esm/Equal.js +26 -4
  171. package/dist/esm/Equal.js.map +1 -1
  172. package/dist/esm/FiberHandle.js.map +1 -1
  173. package/dist/esm/FiberMap.js.map +1 -1
  174. package/dist/esm/FiberSet.js.map +1 -1
  175. package/dist/esm/Function.js +2 -2
  176. package/dist/esm/Function.js.map +1 -1
  177. package/dist/esm/Hash.js +30 -13
  178. package/dist/esm/Hash.js.map +1 -1
  179. package/dist/esm/Iterable.js +10 -13
  180. package/dist/esm/Iterable.js.map +1 -1
  181. package/dist/esm/List.js +2 -2
  182. package/dist/esm/Metric.js +5 -7
  183. package/dist/esm/Metric.js.map +1 -1
  184. package/dist/esm/Number.js +20 -21
  185. package/dist/esm/Number.js.map +1 -1
  186. package/dist/esm/Option.js +249 -164
  187. package/dist/esm/Option.js.map +1 -1
  188. package/dist/esm/Order.js +1 -2
  189. package/dist/esm/Order.js.map +1 -1
  190. package/dist/esm/Ordering.js +2 -2
  191. package/dist/esm/Predicate.js +9 -12
  192. package/dist/esm/Predicate.js.map +1 -1
  193. package/dist/esm/Readable.js.map +1 -1
  194. package/dist/esm/Record.js +35 -47
  195. package/dist/esm/Record.js.map +1 -1
  196. package/dist/esm/RegExp.js +1 -1
  197. package/dist/esm/Request.js +2 -2
  198. package/dist/esm/Request.js.map +1 -1
  199. package/dist/esm/Stream.js +107 -6
  200. package/dist/esm/Stream.js.map +1 -1
  201. package/dist/esm/String.js +81 -111
  202. package/dist/esm/String.js.map +1 -1
  203. package/dist/esm/Struct.js +13 -19
  204. package/dist/esm/Struct.js.map +1 -1
  205. package/dist/esm/Subscribable.js.map +1 -1
  206. package/dist/esm/Symbol.js +3 -3
  207. package/dist/esm/TestAnnotation.js.map +1 -1
  208. package/dist/esm/TestAnnotationMap.js.map +1 -1
  209. package/dist/esm/TestAnnotations.js.map +1 -1
  210. package/dist/esm/TestClock.js.map +1 -1
  211. package/dist/esm/TestLive.js.map +1 -1
  212. package/dist/esm/TestSized.js.map +1 -1
  213. package/dist/esm/Trie.js +28 -44
  214. package/dist/esm/Trie.js.map +1 -1
  215. package/dist/esm/Utils.js +33 -0
  216. package/dist/esm/Utils.js.map +1 -1
  217. package/dist/esm/internal/core-effect.js +4 -11
  218. package/dist/esm/internal/core-effect.js.map +1 -1
  219. package/dist/esm/internal/core.js +16 -4
  220. package/dist/esm/internal/core.js.map +1 -1
  221. package/dist/esm/internal/doNotation.js +14 -0
  222. package/dist/esm/internal/doNotation.js.map +1 -0
  223. package/dist/esm/internal/groupBy.js.map +1 -1
  224. package/dist/esm/internal/stream.js +3 -7
  225. package/dist/esm/internal/stream.js.map +1 -1
  226. package/dist/esm/internal/version.js +1 -1
  227. package/package.json +1 -1
  228. package/src/Array.ts +10 -13
  229. package/src/BigDecimal.ts +14 -17
  230. package/src/BigInt.ts +41 -46
  231. package/src/Boolean.ts +13 -13
  232. package/src/Brand.ts +3 -3
  233. package/src/Chunk.ts +3 -3
  234. package/src/Context.ts +15 -20
  235. package/src/Cron.ts +3 -6
  236. package/src/Data.ts +10 -16
  237. package/src/Duration.ts +1 -1
  238. package/src/Effect.ts +122 -32
  239. package/src/Either.ts +161 -94
  240. package/src/Equal.ts +30 -9
  241. package/src/FiberHandle.ts +1 -1
  242. package/src/FiberMap.ts +1 -1
  243. package/src/FiberSet.ts +1 -1
  244. package/src/Function.ts +4 -2
  245. package/src/Hash.ts +30 -13
  246. package/src/HashMap.ts +2 -2
  247. package/src/Iterable.ts +10 -13
  248. package/src/List.ts +2 -2
  249. package/src/Metric.ts +5 -7
  250. package/src/Number.ts +20 -21
  251. package/src/Option.ts +250 -172
  252. package/src/Order.ts +1 -2
  253. package/src/Ordering.ts +2 -2
  254. package/src/Predicate.ts +9 -12
  255. package/src/Readable.ts +1 -1
  256. package/src/Record.ts +35 -47
  257. package/src/RegExp.ts +1 -1
  258. package/src/Request.ts +3 -3
  259. package/src/Stream.ts +137 -36
  260. package/src/String.ts +81 -111
  261. package/src/Struct.ts +13 -19
  262. package/src/Subscribable.ts +1 -1
  263. package/src/Symbol.ts +3 -3
  264. package/src/TestAnnotation.ts +1 -1
  265. package/src/TestAnnotationMap.ts +1 -1
  266. package/src/TestAnnotations.ts +1 -1
  267. package/src/TestClock.ts +1 -5
  268. package/src/TestLive.ts +1 -1
  269. package/src/TestSized.ts +1 -1
  270. package/src/Trie.ts +28 -44
  271. package/src/Types.ts +10 -10
  272. package/src/Utils.ts +40 -2
  273. package/src/internal/core-effect.ts +29 -45
  274. package/src/internal/core.ts +20 -4
  275. package/src/internal/doNotation.ts +77 -0
  276. package/src/internal/groupBy.ts +16 -16
  277. package/src/internal/stream.ts +34 -58
  278. package/src/internal/version.ts +1 -1
@@ -27,7 +27,7 @@ import type * as Emit from "./StreamEmit.js";
27
27
  import type * as HaltStrategy from "./StreamHaltStrategy.js";
28
28
  import type * as Take from "./Take.js";
29
29
  import type * as Tracer from "./Tracer.js";
30
- import type { Covariant, MergeRecord, NoInfer } from "./Types.js";
30
+ import type { Covariant, NoInfer } from "./Types.js";
31
31
  import type * as Unify from "./Unify.js";
32
32
  /**
33
33
  * @since 2.0.0
@@ -3495,72 +3495,177 @@ export declare const zipWithPreviousAndNext: <A, E, R>(self: Stream<A, E, R>) =>
3495
3495
  */
3496
3496
  export declare const zipWithIndex: <A, E, R>(self: Stream<A, E, R>) => Stream<[A, number], E, R>;
3497
3497
  /**
3498
- * @since 2.0.0
3498
+ * The "do simulation" in allows you to write code in a more declarative style, similar to the "do notation" in other programming languages. It provides a way to define variables and perform operations on them using functions like `bind` and `let`.
3499
+ *
3500
+ * Here's how the do simulation works:
3501
+ *
3502
+ * 1. Start the do simulation using the `Do` value
3503
+ * 2. Within the do simulation scope, you can use the `bind` function to define variables and bind them to `Stream` values
3504
+ * 3. You can accumulate multiple `bind` statements to define multiple variables within the scope
3505
+ * 4. Inside the do simulation scope, you can also use the `let` function to define variables and bind them to simple values
3506
+ *
3507
+ * @see {@link bindTo}
3508
+ * @see {@link bind}
3509
+ * @see {@link bindEffect}
3510
+ * @see {@link let_ let}
3511
+ *
3512
+ * @example
3513
+ * import { Chunk, Effect, pipe, Stream } from "effect"
3514
+ *
3515
+ * const result = pipe(
3516
+ * Stream.Do,
3517
+ * Stream.bind("x", () => Stream.succeed(2)),
3518
+ * Stream.bind("y", () => Stream.succeed(3)),
3519
+ * Stream.let("sum", ({ x, y }) => x + y)
3520
+ * )
3521
+ * assert.deepStrictEqual(Effect.runSync(Stream.runCollect(result)), Chunk.of({ x: 2, y: 3, sum: 5 }))
3522
+ *
3499
3523
  * @category do notation
3524
+ * @since 2.0.0
3500
3525
  */
3501
3526
  export declare const Do: Stream<{}>;
3502
3527
  /**
3503
- * Binds a value from a stream in a `do` scope
3528
+ * The "do simulation" in allows you to write code in a more declarative style, similar to the "do notation" in other programming languages. It provides a way to define variables and perform operations on them using functions like `bind` and `let`.
3529
+ *
3530
+ * Here's how the do simulation works:
3531
+ *
3532
+ * 1. Start the do simulation using the `Do` value
3533
+ * 2. Within the do simulation scope, you can use the `bind` function to define variables and bind them to `Stream` values
3534
+ * 3. You can accumulate multiple `bind` statements to define multiple variables within the scope
3535
+ * 4. Inside the do simulation scope, you can also use the `let` function to define variables and bind them to simple values
3536
+ *
3537
+ * @see {@link Do}
3538
+ * @see {@link bindTo}
3539
+ * @see {@link bindEffect}
3540
+ * @see {@link let_ let}
3541
+ *
3542
+ * @example
3543
+ * import { Chunk, Effect, pipe, Stream } from "effect"
3544
+ *
3545
+ * const result = pipe(
3546
+ * Stream.Do,
3547
+ * Stream.bind("x", () => Stream.succeed(2)),
3548
+ * Stream.bind("y", () => Stream.succeed(3)),
3549
+ * Stream.let("sum", ({ x, y }) => x + y)
3550
+ * )
3551
+ * assert.deepStrictEqual(Effect.runSync(Stream.runCollect(result)), Chunk.of({ x: 2, y: 3, sum: 5 }))
3504
3552
  *
3505
- * @since 2.0.0
3506
3553
  * @category do notation
3554
+ * @since 2.0.0
3507
3555
  */
3508
3556
  export declare const bind: {
3509
- <N extends string, K, A, E2, R2>(tag: Exclude<N, keyof K>, f: (_: K) => Stream<A, E2, R2>, options?: {
3557
+ <N extends string, A, B, E2, R2>(tag: Exclude<N, keyof A>, f: (_: A) => Stream<B, E2, R2>, options?: {
3510
3558
  readonly concurrency?: number | "unbounded" | undefined;
3511
3559
  readonly bufferSize?: number | undefined;
3512
- } | undefined): <E, R>(self: Stream<K, E, R>) => Stream<MergeRecord<K, {
3513
- [k in N]: A;
3514
- }>, E2 | E, R2 | R>;
3515
- <K, E, R, N extends string, A, E2, R2>(self: Stream<K, E, R>, tag: Exclude<N, keyof K>, f: (_: K) => Stream<A, E2, R2>, options?: {
3560
+ } | undefined): <E, R>(self: Stream<A, E, R>) => Stream<{
3561
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3562
+ }, E2 | E, R2 | R>;
3563
+ <A, E, R, N extends string, B, E2, R2>(self: Stream<A, E, R>, tag: Exclude<N, keyof A>, f: (_: A) => Stream<B, E2, R2>, options?: {
3516
3564
  readonly concurrency?: number | "unbounded" | undefined;
3517
3565
  readonly bufferSize?: number | undefined;
3518
- } | undefined): Stream<MergeRecord<K, {
3519
- [k in N]: A;
3520
- }>, E | E2, R | R2>;
3566
+ } | undefined): Stream<{
3567
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3568
+ }, E | E2, R | R2>;
3521
3569
  };
3522
3570
  /**
3523
3571
  * Binds an effectful value in a `do` scope
3524
3572
  *
3573
+ * @see {@link Do}
3574
+ * @see {@link bindTo}
3575
+ * @see {@link bind}
3576
+ * @see {@link let_ let}
3577
+ *
3525
3578
  * @since 2.0.0
3526
3579
  * @category do notation
3527
3580
  */
3528
3581
  export declare const bindEffect: {
3529
- <N extends string, K, A, E2, R2>(tag: Exclude<N, keyof K>, f: (_: K) => Effect.Effect<A, E2, R2>, options?: {
3582
+ <N extends string, A, B, E2, R2>(tag: Exclude<N, keyof A>, f: (_: A) => Effect.Effect<B, E2, R2>, options?: {
3530
3583
  readonly concurrency?: number | "unbounded" | undefined;
3531
3584
  readonly bufferSize?: number | undefined;
3532
- } | undefined): <E, R>(self: Stream<K, E, R>) => Stream<MergeRecord<K, {
3533
- [k in N]: A;
3534
- }>, E2 | E, R2 | R>;
3535
- <K, E, R, N extends string, A, E2, R2>(self: Stream<K, E, R>, tag: Exclude<N, keyof K>, f: (_: K) => Effect.Effect<A, E2, R2>, options?: {
3585
+ } | undefined): <E, R>(self: Stream<A, E, R>) => Stream<{
3586
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3587
+ }, E2 | E, R2 | R>;
3588
+ <A, E, R, N extends string, B, E2, R2>(self: Stream<A, E, R>, tag: Exclude<N, keyof A>, f: (_: A) => Effect.Effect<B, E2, R2>, options?: {
3536
3589
  readonly concurrency?: number | "unbounded" | undefined;
3537
3590
  readonly unordered?: boolean | undefined;
3538
- } | undefined): Stream<MergeRecord<K, {
3539
- [k in N]: A;
3540
- }>, E | E2, R | R2>;
3591
+ } | undefined): Stream<{
3592
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3593
+ }, E | E2, R | R2>;
3541
3594
  };
3542
3595
  /**
3543
- * @since 2.0.0
3596
+ * The "do simulation" in allows you to write code in a more declarative style, similar to the "do notation" in other programming languages. It provides a way to define variables and perform operations on them using functions like `bind` and `let`.
3597
+ *
3598
+ * Here's how the do simulation works:
3599
+ *
3600
+ * 1. Start the do simulation using the `Do` value
3601
+ * 2. Within the do simulation scope, you can use the `bind` function to define variables and bind them to `Stream` values
3602
+ * 3. You can accumulate multiple `bind` statements to define multiple variables within the scope
3603
+ * 4. Inside the do simulation scope, you can also use the `let` function to define variables and bind them to simple values
3604
+ *
3605
+ * @see {@link Do}
3606
+ * @see {@link bind}
3607
+ * @see {@link bindEffect}
3608
+ * @see {@link let_ let}
3609
+ *
3610
+ * @example
3611
+ * import { Chunk, Effect, pipe, Stream } from "effect"
3612
+ *
3613
+ * const result = pipe(
3614
+ * Stream.Do,
3615
+ * Stream.bind("x", () => Stream.succeed(2)),
3616
+ * Stream.bind("y", () => Stream.succeed(3)),
3617
+ * Stream.let("sum", ({ x, y }) => x + y)
3618
+ * )
3619
+ * assert.deepStrictEqual(Effect.runSync(Stream.runCollect(result)), Chunk.of({ x: 2, y: 3, sum: 5 }))
3620
+ *
3544
3621
  * @category do notation
3622
+ * @since 2.0.0
3545
3623
  */
3546
3624
  export declare const bindTo: {
3547
- <N extends string>(tag: N): <A, E, R>(self: Stream<A, E, R>) => Stream<Record<N, A>, E, R>;
3548
- <A, E, R, N extends string>(self: Stream<A, E, R>, tag: N): Stream<Record<N, A>, E, R>;
3625
+ <N extends string>(name: N): <A, E, R>(self: Stream<A, E, R>) => Stream<{
3626
+ [K in N]: A;
3627
+ }, E, R>;
3628
+ <A, E, R, N extends string>(self: Stream<A, E, R>, name: N): Stream<{
3629
+ [K in N]: A;
3630
+ }, E, R>;
3549
3631
  };
3550
3632
  declare const let_: {
3551
- <N extends string, K, A>(tag: Exclude<N, keyof K>, f: (_: K) => A): <E, R>(self: Stream<K, E, R>) => Stream<MergeRecord<K, {
3552
- [k in N]: A;
3553
- }>, E, R>;
3554
- <K, E, R, N extends string, A>(self: Stream<K, E, R>, tag: Exclude<N, keyof K>, f: (_: K) => A): Stream<MergeRecord<K, {
3555
- [k in N]: A;
3556
- }>, E, R>;
3633
+ <N extends string, A extends object, B>(name: Exclude<N, keyof A>, f: (a: A) => B): <E, R>(self: Stream<A, E, R>) => Stream<{
3634
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3635
+ }, E, R>;
3636
+ <A extends object, E, R, N extends string, B>(self: Stream<A, E, R>, name: Exclude<N, keyof A>, f: (a: A) => B): Stream<{
3637
+ [K in N | keyof A]: K extends keyof A ? A[K] : B;
3638
+ }, E, R>;
3557
3639
  };
3558
3640
  export {
3559
3641
  /**
3560
- * Bind a value in a `do` scope
3642
+ * The "do simulation" in allows you to write code in a more declarative style, similar to the "do notation" in other programming languages. It provides a way to define variables and perform operations on them using functions like `bind` and `let`.
3643
+ *
3644
+ * Here's how the do simulation works:
3645
+ *
3646
+ * 1. Start the do simulation using the `Do` value
3647
+ * 2. Within the do simulation scope, you can use the `bind` function to define variables and bind them to `Stream` values
3648
+ * 3. You can accumulate multiple `bind` statements to define multiple variables within the scope
3649
+ * 4. Inside the do simulation scope, you can also use the `let` function to define variables and bind them to simple values
3650
+ *
3651
+ * @see {@link Do}
3652
+ * @see {@link bindTo}
3653
+ * @see {@link bind}
3654
+ * @see {@link bindEffect}
3655
+ *
3656
+ * @example
3657
+ * import { Chunk, Effect, pipe, Stream } from "effect"
3658
+ *
3659
+ * const result = pipe(
3660
+ * Stream.Do,
3661
+ * Stream.bind("x", () => Stream.succeed(2)),
3662
+ * Stream.bind("y", () => Stream.succeed(3)),
3663
+ * Stream.let("sum", ({ x, y }) => x + y)
3664
+ * )
3665
+ * assert.deepStrictEqual(Effect.runSync(Stream.runCollect(result)), Chunk.of({ x: 2, y: 3, sum: 5 }))
3561
3666
  *
3562
- * @since 2.0.0
3563
3667
  * @category do notation
3668
+ * @since 2.0.0
3564
3669
  */
3565
3670
  let_ as let };
3566
3671
  /**