effect 3.0.3 → 3.0.4

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 (94) hide show
  1. package/dist/cjs/Cause.js.map +1 -1
  2. package/dist/cjs/Chunk.js +1 -1
  3. package/dist/cjs/Chunk.js.map +1 -1
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Either.js +4 -6
  6. package/dist/cjs/Either.js.map +1 -1
  7. package/dist/cjs/Option.js +3 -5
  8. package/dist/cjs/Option.js.map +1 -1
  9. package/dist/cjs/Order.js +15 -0
  10. package/dist/cjs/Order.js.map +1 -1
  11. package/dist/cjs/STM.js.map +1 -1
  12. package/dist/cjs/Utils.js +2 -4
  13. package/dist/cjs/Utils.js.map +1 -1
  14. package/dist/cjs/internal/core-effect.js +3 -21
  15. package/dist/cjs/internal/core-effect.js.map +1 -1
  16. package/dist/cjs/internal/core.js +10 -0
  17. package/dist/cjs/internal/core.js.map +1 -1
  18. package/dist/cjs/internal/effectable.js +4 -0
  19. package/dist/cjs/internal/effectable.js.map +1 -1
  20. package/dist/cjs/internal/fiberRuntime.js +3 -3
  21. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  22. package/dist/cjs/internal/rateLimiter.js +1 -1
  23. package/dist/cjs/internal/rateLimiter.js.map +1 -1
  24. package/dist/cjs/internal/stm/core.js +4 -0
  25. package/dist/cjs/internal/stm/core.js.map +1 -1
  26. package/dist/cjs/internal/stm/stm.js +3 -21
  27. package/dist/cjs/internal/stm/stm.js.map +1 -1
  28. package/dist/cjs/internal/version.js +1 -1
  29. package/dist/dts/Cause.d.ts +1 -0
  30. package/dist/dts/Cause.d.ts.map +1 -1
  31. package/dist/dts/Chunk.d.ts.map +1 -1
  32. package/dist/dts/Effect.d.ts +43 -38
  33. package/dist/dts/Effect.d.ts.map +1 -1
  34. package/dist/dts/Either.d.ts +1 -1
  35. package/dist/dts/Either.d.ts.map +1 -1
  36. package/dist/dts/Option.d.ts +1 -1
  37. package/dist/dts/Option.d.ts.map +1 -1
  38. package/dist/dts/Order.d.ts.map +1 -1
  39. package/dist/dts/STM.d.ts +25 -35
  40. package/dist/dts/STM.d.ts.map +1 -1
  41. package/dist/dts/Utils.d.ts +29 -25
  42. package/dist/dts/Utils.d.ts.map +1 -1
  43. package/dist/dts/index.d.ts +15 -0
  44. package/dist/dts/index.d.ts.map +1 -1
  45. package/dist/dts/internal/core.d.ts.map +1 -1
  46. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  47. package/dist/esm/Cause.js.map +1 -1
  48. package/dist/esm/Chunk.js +1 -1
  49. package/dist/esm/Chunk.js.map +1 -1
  50. package/dist/esm/Effect.js.map +1 -1
  51. package/dist/esm/Either.js +4 -6
  52. package/dist/esm/Either.js.map +1 -1
  53. package/dist/esm/Option.js +4 -6
  54. package/dist/esm/Option.js.map +1 -1
  55. package/dist/esm/Order.js +15 -0
  56. package/dist/esm/Order.js.map +1 -1
  57. package/dist/esm/STM.js.map +1 -1
  58. package/dist/esm/Utils.js +2 -4
  59. package/dist/esm/Utils.js.map +1 -1
  60. package/dist/esm/index.js +15 -0
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/internal/core-effect.js +2 -20
  63. package/dist/esm/internal/core-effect.js.map +1 -1
  64. package/dist/esm/internal/core.js +10 -0
  65. package/dist/esm/internal/core.js.map +1 -1
  66. package/dist/esm/internal/effectable.js +4 -0
  67. package/dist/esm/internal/effectable.js.map +1 -1
  68. package/dist/esm/internal/fiberRuntime.js +3 -3
  69. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  70. package/dist/esm/internal/rateLimiter.js +1 -1
  71. package/dist/esm/internal/rateLimiter.js.map +1 -1
  72. package/dist/esm/internal/stm/core.js +4 -0
  73. package/dist/esm/internal/stm/core.js.map +1 -1
  74. package/dist/esm/internal/stm/stm.js +2 -20
  75. package/dist/esm/internal/stm/stm.js.map +1 -1
  76. package/dist/esm/internal/version.js +1 -1
  77. package/package.json +1 -1
  78. package/src/Cause.ts +1 -0
  79. package/src/Chunk.ts +1 -2
  80. package/src/Effect.ts +46 -41
  81. package/src/Either.ts +5 -7
  82. package/src/Option.ts +5 -7
  83. package/src/Order.ts +15 -0
  84. package/src/STM.ts +25 -36
  85. package/src/Utils.ts +31 -28
  86. package/src/index.ts +15 -0
  87. package/src/internal/core-effect.ts +2 -23
  88. package/src/internal/core.ts +10 -0
  89. package/src/internal/effectable.ts +4 -0
  90. package/src/internal/fiberRuntime.ts +3 -3
  91. package/src/internal/rateLimiter.ts +1 -1
  92. package/src/internal/stm/core.ts +4 -0
  93. package/src/internal/stm/stm.ts +2 -22
  94. package/src/internal/version.ts +1 -1
package/src/Option.ts CHANGED
@@ -5,7 +5,7 @@ import type { Either } from "./Either.js"
5
5
  import * as Equal from "./Equal.js"
6
6
  import * as Equivalence from "./Equivalence.js"
7
7
  import type { LazyArg } from "./Function.js"
8
- import { constNull, constUndefined, dual, identity, isFunction } from "./Function.js"
8
+ import { constNull, constUndefined, dual, identity, isFunction, pipe } from "./Function.js"
9
9
  import type { TypeLambda } from "./HKT.js"
10
10
  import type { Inspectable } from "./Inspectable.js"
11
11
  import * as either from "./internal/either.js"
@@ -16,7 +16,7 @@ import type { Pipeable } from "./Pipeable.js"
16
16
  import type { Predicate, Refinement } from "./Predicate.js"
17
17
  import type { Covariant, NotFunction } from "./Types.js"
18
18
  import type * as Unify from "./Unify.js"
19
- import * as Gen from "./Utils.js"
19
+ import type * as Gen from "./Utils.js"
20
20
 
21
21
  /**
22
22
  * @category models
@@ -1261,26 +1261,24 @@ export const bind: {
1261
1261
  */
1262
1262
  export const Do: Option<{}> = some({})
1263
1263
 
1264
- const adapter = Gen.adapter<OptionTypeLambda>()
1265
-
1266
1264
  /**
1267
1265
  * @category generators
1268
1266
  * @since 2.0.0
1269
1267
  */
1270
1268
  export const gen: Gen.Gen<OptionTypeLambda, Gen.Adapter<OptionTypeLambda>> = (f) => {
1271
- const iterator = f(adapter)
1269
+ const iterator = f(pipe)
1272
1270
  let state: IteratorYieldResult<any> | IteratorReturnResult<any> = iterator.next()
1273
1271
  if (state.done) {
1274
1272
  return some(state.value)
1275
1273
  } else {
1276
- let current = state.value.value
1274
+ let current = state.value
1277
1275
  if (isNone(current)) {
1278
1276
  return current
1279
1277
  }
1280
1278
  while (!state.done) {
1281
1279
  state = iterator.next(current.value)
1282
1280
  if (!state.done) {
1283
- current = state.value.value
1281
+ current = state.value
1284
1282
  if (isNone(current)) {
1285
1283
  return current
1286
1284
  }
package/src/Order.ts CHANGED
@@ -1,4 +1,19 @@
1
1
  /**
2
+ * This module provides an implementation of the `Order` type class which is used to define a total ordering on some type `A`.
3
+ * An order is defined by a relation `<=`, which obeys the following laws:
4
+ *
5
+ * - either `x <= y` or `y <= x` (totality)
6
+ * - if `x <= y` and `y <= x`, then `x == y` (antisymmetry)
7
+ * - if `x <= y` and `y <= z`, then `x <= z` (transitivity)
8
+ *
9
+ * The truth table for compare is defined as follows:
10
+ *
11
+ * | `x <= y` | `x >= y` | Ordering | |
12
+ * | -------- | -------- | -------- | --------------------- |
13
+ * | `true` | `true` | `0` | corresponds to x == y |
14
+ * | `true` | `false` | `< 0` | corresponds to x < y |
15
+ * | `false` | `true` | `> 0` | corresponds to x > y |
16
+ *
2
17
  * @since 2.0.0
3
18
  */
4
19
  import { dual } from "./Function.js"
package/src/STM.ts CHANGED
@@ -72,6 +72,7 @@ export interface STM<out A, out E = never, out R = never>
72
72
  [Unify.typeSymbol]?: unknown
73
73
  [Unify.unifySymbol]?: STMUnify<this>
74
74
  [Unify.ignoreSymbol]?: STMUnifyIgnore
75
+ [Symbol.iterator](): Effect.EffectGenerator<STM<A, E, R>>
75
76
  }
76
77
 
77
78
  /**
@@ -149,18 +150,6 @@ export declare namespace STM {
149
150
  }
150
151
  }
151
152
 
152
- /**
153
- * @category models
154
- * @since 2.0.0
155
- */
156
- export interface STMGen<out A, out E, out R> {
157
- readonly _A: () => A
158
- readonly _E: () => E
159
- readonly _R: () => R
160
- readonly value: STM<A, E, R>
161
- [Symbol.iterator](): Generator<STMGen<A, E, R>, A>
162
- }
163
-
164
153
  /**
165
154
  * Returns `true` if the provided value is an `STM`, `false` otherwise.
166
155
  *
@@ -810,17 +799,17 @@ export const fromOption: <A>(option: Option.Option<A>) => STM<A, Option.Option<n
810
799
  * @category models
811
800
  */
812
801
  export interface Adapter {
813
- <A, E, R>(self: STM<A, E, R>): STMGen<A, E, R>
814
- <A, _R, _E, _A>(a: A, ab: (a: A) => STM<_A, _E, _R>): STMGen<_A, _E, _R>
815
- <A, B, _R, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => STM<_A, _E, _R>): STMGen<_A, _E, _R>
816
- <A, B, C, _R, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => STM<_A, _E, _R>): STMGen<_A, _E, _R>
802
+ <A, E, R>(self: STM<A, E, R>): STM<A, E, R>
803
+ <A, _R, _E, _A>(a: A, ab: (a: A) => STM<_A, _E, _R>): STM<_A, _E, _R>
804
+ <A, B, _R, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => STM<_A, _E, _R>): STM<_A, _E, _R>
805
+ <A, B, C, _R, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => STM<_A, _E, _R>): STM<_A, _E, _R>
817
806
  <A, B, C, D, _R, _E, _A>(
818
807
  a: A,
819
808
  ab: (a: A) => B,
820
809
  bc: (b: B) => C,
821
810
  cd: (c: C) => D,
822
811
  de: (d: D) => STM<_A, _E, _R>
823
- ): STMGen<_A, _E, _R>
812
+ ): STM<_A, _E, _R>
824
813
  <A, B, C, D, E, _R, _E, _A>(
825
814
  a: A,
826
815
  ab: (a: A) => B,
@@ -828,7 +817,7 @@ export interface Adapter {
828
817
  cd: (c: C) => D,
829
818
  de: (d: D) => E,
830
819
  ef: (e: E) => STM<_A, _E, _R>
831
- ): STMGen<_A, _E, _R>
820
+ ): STM<_A, _E, _R>
832
821
  <A, B, C, D, E, F, _R, _E, _A>(
833
822
  a: A,
834
823
  ab: (a: A) => B,
@@ -837,7 +826,7 @@ export interface Adapter {
837
826
  de: (d: D) => E,
838
827
  ef: (e: E) => F,
839
828
  fg: (f: F) => STM<_A, _E, _R>
840
- ): STMGen<_A, _E, _R>
829
+ ): STM<_A, _E, _R>
841
830
  <A, B, C, D, E, F, G, _R, _E, _A>(
842
831
  a: A,
843
832
  ab: (a: A) => B,
@@ -847,7 +836,7 @@ export interface Adapter {
847
836
  ef: (e: E) => F,
848
837
  fg: (f: F) => G,
849
838
  gh: (g: F) => STM<_A, _E, _R>
850
- ): STMGen<_A, _E, _R>
839
+ ): STM<_A, _E, _R>
851
840
  <A, B, C, D, E, F, G, H, _R, _E, _A>(
852
841
  a: A,
853
842
  ab: (a: A) => B,
@@ -858,7 +847,7 @@ export interface Adapter {
858
847
  fg: (f: F) => G,
859
848
  gh: (g: G) => H,
860
849
  hi: (g: H) => STM<_A, _E, _R>
861
- ): STMGen<_A, _E, _R>
850
+ ): STM<_A, _E, _R>
862
851
  <A, B, C, D, E, F, G, H, I, _R, _E, _A>(
863
852
  a: A,
864
853
  ab: (a: A) => B,
@@ -870,7 +859,7 @@ export interface Adapter {
870
859
  gh: (g: G) => H,
871
860
  hi: (h: H) => I,
872
861
  ij: (i: I) => STM<_A, _E, _R>
873
- ): STMGen<_A, _E, _R>
862
+ ): STM<_A, _E, _R>
874
863
  <A, B, C, D, E, F, G, H, I, J, _R, _E, _A>(
875
864
  a: A,
876
865
  ab: (a: A) => B,
@@ -883,7 +872,7 @@ export interface Adapter {
883
872
  hi: (h: H) => I,
884
873
  ij: (i: I) => J,
885
874
  jk: (j: J) => STM<_A, _E, _R>
886
- ): STMGen<_A, _E, _R>
875
+ ): STM<_A, _E, _R>
887
876
  <A, B, C, D, E, F, G, H, I, J, K, _R, _E, _A>(
888
877
  a: A,
889
878
  ab: (a: A) => B,
@@ -897,7 +886,7 @@ export interface Adapter {
897
886
  ij: (i: I) => J,
898
887
  jk: (j: J) => K,
899
888
  kl: (k: K) => STM<_A, _E, _R>
900
- ): STMGen<_A, _E, _R>
889
+ ): STM<_A, _E, _R>
901
890
  <A, B, C, D, E, F, G, H, I, J, K, L, _R, _E, _A>(
902
891
  a: A,
903
892
  ab: (a: A) => B,
@@ -912,7 +901,7 @@ export interface Adapter {
912
901
  jk: (j: J) => K,
913
902
  kl: (k: K) => L,
914
903
  lm: (l: L) => STM<_A, _E, _R>
915
- ): STMGen<_A, _E, _R>
904
+ ): STM<_A, _E, _R>
916
905
  <A, B, C, D, E, F, G, H, I, J, K, L, M, _R, _E, _A>(
917
906
  a: A,
918
907
  ab: (a: A) => B,
@@ -928,7 +917,7 @@ export interface Adapter {
928
917
  kl: (k: K) => L,
929
918
  lm: (l: L) => M,
930
919
  mn: (m: M) => STM<_A, _E, _R>
931
- ): STMGen<_A, _E, _R>
920
+ ): STM<_A, _E, _R>
932
921
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, _R, _E, _A>(
933
922
  a: A,
934
923
  ab: (a: A) => B,
@@ -945,7 +934,7 @@ export interface Adapter {
945
934
  lm: (l: L) => M,
946
935
  mn: (m: M) => N,
947
936
  no: (n: N) => STM<_A, _E, _R>
948
- ): STMGen<_A, _E, _R>
937
+ ): STM<_A, _E, _R>
949
938
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, _R, _E, _A>(
950
939
  a: A,
951
940
  ab: (a: A) => B,
@@ -963,7 +952,7 @@ export interface Adapter {
963
952
  mn: (m: M) => N,
964
953
  no: (n: N) => O,
965
954
  op: (o: O) => STM<_A, _E, _R>
966
- ): STMGen<_A, _E, _R>
955
+ ): STM<_A, _E, _R>
967
956
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, _R, _E, _A>(
968
957
  a: A,
969
958
  ab: (a: A) => B,
@@ -982,7 +971,7 @@ export interface Adapter {
982
971
  no: (n: N) => O,
983
972
  op: (o: O) => P,
984
973
  pq: (p: P) => STM<_A, _E, _R>
985
- ): STMGen<_A, _E, _R>
974
+ ): STM<_A, _E, _R>
986
975
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, _R, _E, _A>(
987
976
  a: A,
988
977
  ab: (a: A) => B,
@@ -1002,7 +991,7 @@ export interface Adapter {
1002
991
  op: (o: O) => P,
1003
992
  pq: (p: P) => Q,
1004
993
  qr: (q: Q) => STM<_A, _E, _R>
1005
- ): STMGen<_A, _E, _R>
994
+ ): STM<_A, _E, _R>
1006
995
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, _R, _E, _A>(
1007
996
  a: A,
1008
997
  ab: (a: A) => B,
@@ -1023,7 +1012,7 @@ export interface Adapter {
1023
1012
  pq: (p: P) => Q,
1024
1013
  qr: (q: Q) => R,
1025
1014
  rs: (r: R) => STM<_A, _E, _R>
1026
- ): STMGen<_A, _E, _R>
1015
+ ): STM<_A, _E, _R>
1027
1016
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, _R, _E, _A>(
1028
1017
  a: A,
1029
1018
  ab: (a: A) => B,
@@ -1045,7 +1034,7 @@ export interface Adapter {
1045
1034
  qr: (q: Q) => R,
1046
1035
  rs: (r: R) => S,
1047
1036
  st: (s: S) => STM<_A, _E, _R>
1048
- ): STMGen<_A, _E, _R>
1037
+ ): STM<_A, _E, _R>
1049
1038
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, _R, _E, _A>(
1050
1039
  a: A,
1051
1040
  ab: (a: A) => B,
@@ -1068,19 +1057,19 @@ export interface Adapter {
1068
1057
  rs: (r: R) => S,
1069
1058
  st: (s: S) => T,
1070
1059
  tu: (s: T) => STM<_A, _E, _R>
1071
- ): STMGen<_A, _E, _R>
1060
+ ): STM<_A, _E, _R>
1072
1061
  }
1073
1062
 
1074
1063
  /**
1075
1064
  * @since 2.0.0
1076
1065
  * @category constructors
1077
1066
  */
1078
- export const gen: <Eff extends STMGen<any, any, any>, AEff>(
1067
+ export const gen: <Eff extends STM<any, any, any>, AEff>(
1079
1068
  f: (resume: Adapter) => Generator<Eff, AEff, any>
1080
1069
  ) => STM<
1081
1070
  AEff,
1082
- [Eff] extends [never] ? never : [Eff] extends [STMGen<any, infer E, any>] ? E : never,
1083
- [Eff] extends [never] ? never : [Eff] extends [STMGen<any, any, infer R>] ? R : never
1071
+ [Eff] extends [never] ? never : [Eff] extends [STM<infer _A, infer E, infer _R>] ? E : never,
1072
+ [Eff] extends [never] ? never : [Eff] extends [STM<infer _A, infer _E, infer R>] ? R : never
1084
1073
  > = stm.gen
1085
1074
 
1086
1075
  /**
package/src/Utils.ts CHANGED
@@ -164,18 +164,22 @@ export interface Variance<in out F extends TypeLambda, in R, out O, out E> {
164
164
  readonly _E: Types.Covariant<E>
165
165
  }
166
166
 
167
+ /**
168
+ * @category models
169
+ * @since 2.0.0
170
+ */
167
171
  /**
168
172
  * @category models
169
173
  * @since 2.0.0
170
174
  */
171
175
  export interface Gen<F extends TypeLambda, Z> {
172
- <K extends Variance<F, any, any, any>, A>(
176
+ <K extends Variance<F, any, any, any> | Kind<F, any, any, any, any>, A>(
173
177
  body: (resume: Z) => Generator<K, A>
174
178
  ): Kind<
175
179
  F,
176
- [K] extends [Variance<F, infer R, any, any>] ? R : never,
177
- [K] extends [Variance<F, any, infer O, any>] ? O : never,
178
- [K] extends [Variance<F, any, any, infer E>] ? E : never,
180
+ [K] extends [Variance<F, infer R, any, any>] ? R : [K] extends [Kind<F, infer R, any, any, any>] ? R : never,
181
+ [K] extends [Variance<F, any, infer O, any>] ? O : [K] extends [Kind<F, any, infer O, any, any>] ? O : never,
182
+ [K] extends [Variance<F, any, any, infer E>] ? E : [K] extends [Kind<F, any, any, infer E, any>] ? E : never,
179
183
  A
180
184
  >
181
185
  }
@@ -187,22 +191,22 @@ export interface Gen<F extends TypeLambda, Z> {
187
191
  export interface Adapter<Z extends TypeLambda> {
188
192
  <_R, _O, _E, _A>(
189
193
  self: Kind<Z, _R, _O, _E, _A>
190
- ): GenKind<Z, _R, _O, _E, _A>
191
- <A, _R, _O, _E, _A>(a: A, ab: (a: A) => Kind<Z, _R, _O, _E, _A>): GenKind<Z, _R, _O, _E, _A>
192
- <A, B, _R, _O, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => Kind<Z, _R, _O, _E, _A>): GenKind<Z, _R, _O, _E, _A>
194
+ ): Kind<Z, _R, _O, _E, _A>
195
+ <A, _R, _O, _E, _A>(a: A, ab: (a: A) => Kind<Z, _R, _O, _E, _A>): Kind<Z, _R, _O, _E, _A>
196
+ <A, B, _R, _O, _E, _A>(a: A, ab: (a: A) => B, bc: (b: B) => Kind<Z, _R, _O, _E, _A>): Kind<Z, _R, _O, _E, _A>
193
197
  <A, B, C, _R, _O, _E, _A>(
194
198
  a: A,
195
199
  ab: (a: A) => B,
196
200
  bc: (b: B) => C,
197
201
  cd: (c: C) => Kind<Z, _R, _O, _E, _A>
198
- ): GenKind<Z, _R, _O, _E, _A>
202
+ ): Kind<Z, _R, _O, _E, _A>
199
203
  <A, B, C, D, _R, _O, _E, _A>(
200
204
  a: A,
201
205
  ab: (a: A) => B,
202
206
  bc: (b: B) => C,
203
207
  cd: (c: C) => D,
204
208
  de: (d: D) => Kind<Z, _R, _O, _E, _A>
205
- ): GenKind<Z, _R, _O, _E, _A>
209
+ ): Kind<Z, _R, _O, _E, _A>
206
210
  <A, B, C, D, E, _R, _O, _E, _A>(
207
211
  a: A,
208
212
  ab: (a: A) => B,
@@ -210,7 +214,7 @@ export interface Adapter<Z extends TypeLambda> {
210
214
  cd: (c: C) => D,
211
215
  de: (d: D) => E,
212
216
  ef: (e: E) => Kind<Z, _R, _O, _E, _A>
213
- ): GenKind<Z, _R, _O, _E, _A>
217
+ ): Kind<Z, _R, _O, _E, _A>
214
218
  <A, B, C, D, E, F, _R, _O, _E, _A>(
215
219
  a: A,
216
220
  ab: (a: A) => B,
@@ -219,7 +223,7 @@ export interface Adapter<Z extends TypeLambda> {
219
223
  de: (d: D) => E,
220
224
  ef: (e: E) => F,
221
225
  fg: (f: F) => Kind<Z, _R, _O, _E, _A>
222
- ): GenKind<Z, _R, _O, _E, _A>
226
+ ): Kind<Z, _R, _O, _E, _A>
223
227
  <A, B, C, D, E, F, G, _R, _O, _E, _A>(
224
228
  a: A,
225
229
  ab: (a: A) => B,
@@ -229,7 +233,7 @@ export interface Adapter<Z extends TypeLambda> {
229
233
  ef: (e: E) => F,
230
234
  fg: (f: F) => G,
231
235
  gh: (g: F) => Kind<Z, _R, _O, _E, _A>
232
- ): GenKind<Z, _R, _O, _E, _A>
236
+ ): Kind<Z, _R, _O, _E, _A>
233
237
  <A, B, C, D, E, F, G, H, _R, _O, _E, _A>(
234
238
  a: A,
235
239
  ab: (a: A) => B,
@@ -240,7 +244,7 @@ export interface Adapter<Z extends TypeLambda> {
240
244
  fg: (f: F) => G,
241
245
  gh: (g: G) => H,
242
246
  hi: (g: H) => Kind<Z, _R, _O, _E, _A>
243
- ): GenKind<Z, _R, _O, _E, _A>
247
+ ): Kind<Z, _R, _O, _E, _A>
244
248
  <A, B, C, D, E, F, G, H, I, _R, _O, _E, _A>(
245
249
  a: A,
246
250
  ab: (a: A) => B,
@@ -252,7 +256,7 @@ export interface Adapter<Z extends TypeLambda> {
252
256
  gh: (g: G) => H,
253
257
  hi: (h: H) => I,
254
258
  ij: (i: I) => Kind<Z, _R, _O, _E, _A>
255
- ): GenKind<Z, _R, _O, _E, _A>
259
+ ): Kind<Z, _R, _O, _E, _A>
256
260
  <A, B, C, D, E, F, G, H, I, J, _R, _O, _E, _A>(
257
261
  a: A,
258
262
  ab: (a: A) => B,
@@ -265,7 +269,7 @@ export interface Adapter<Z extends TypeLambda> {
265
269
  hi: (h: H) => I,
266
270
  ij: (i: I) => J,
267
271
  jk: (j: J) => Kind<Z, _R, _O, _E, _A>
268
- ): GenKind<Z, _R, _O, _E, _A>
272
+ ): Kind<Z, _R, _O, _E, _A>
269
273
  <A, B, C, D, E, F, G, H, I, J, K, _R, _O, _E, _A>(
270
274
  a: A,
271
275
  ab: (a: A) => B,
@@ -279,7 +283,7 @@ export interface Adapter<Z extends TypeLambda> {
279
283
  ij: (i: I) => J,
280
284
  jk: (j: J) => K,
281
285
  kl: (k: K) => Kind<Z, _R, _O, _E, _A>
282
- ): GenKind<Z, _R, _O, _E, _A>
286
+ ): Kind<Z, _R, _O, _E, _A>
283
287
  <A, B, C, D, E, F, G, H, I, J, K, L, _R, _O, _E, _A>(
284
288
  a: A,
285
289
  ab: (a: A) => B,
@@ -294,7 +298,7 @@ export interface Adapter<Z extends TypeLambda> {
294
298
  jk: (j: J) => K,
295
299
  kl: (k: K) => L,
296
300
  lm: (l: L) => Kind<Z, _R, _O, _E, _A>
297
- ): GenKind<Z, _R, _O, _E, _A>
301
+ ): Kind<Z, _R, _O, _E, _A>
298
302
  <A, B, C, D, E, F, G, H, I, J, K, L, M, _R, _O, _E, _A>(
299
303
  a: A,
300
304
  ab: (a: A) => B,
@@ -310,7 +314,7 @@ export interface Adapter<Z extends TypeLambda> {
310
314
  kl: (k: K) => L,
311
315
  lm: (l: L) => M,
312
316
  mn: (m: M) => Kind<Z, _R, _O, _E, _A>
313
- ): GenKind<Z, _R, _O, _E, _A>
317
+ ): Kind<Z, _R, _O, _E, _A>
314
318
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, _R, _O, _E, _A>(
315
319
  a: A,
316
320
  ab: (a: A) => B,
@@ -327,7 +331,7 @@ export interface Adapter<Z extends TypeLambda> {
327
331
  lm: (l: L) => M,
328
332
  mn: (m: M) => N,
329
333
  no: (n: N) => Kind<Z, _R, _O, _E, _A>
330
- ): GenKind<Z, _R, _O, _E, _A>
334
+ ): Kind<Z, _R, _O, _E, _A>
331
335
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, _R, _O, _E, _A>(
332
336
  a: A,
333
337
  ab: (a: A) => B,
@@ -345,7 +349,7 @@ export interface Adapter<Z extends TypeLambda> {
345
349
  mn: (m: M) => N,
346
350
  no: (n: N) => O,
347
351
  op: (o: O) => Kind<Z, _R, _O, _E, _A>
348
- ): GenKind<Z, _R, _O, _E, _A>
352
+ ): Kind<Z, _R, _O, _E, _A>
349
353
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, _R, _O, _E, _A>(
350
354
  a: A,
351
355
  ab: (a: A) => B,
@@ -364,7 +368,7 @@ export interface Adapter<Z extends TypeLambda> {
364
368
  no: (n: N) => O,
365
369
  op: (o: O) => P,
366
370
  pq: (p: P) => Kind<Z, _R, _O, _E, _A>
367
- ): GenKind<Z, _R, _O, _E, _A>
371
+ ): Kind<Z, _R, _O, _E, _A>
368
372
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, _R, _O, _E, _A>(
369
373
  a: A,
370
374
  ab: (a: A) => B,
@@ -384,7 +388,7 @@ export interface Adapter<Z extends TypeLambda> {
384
388
  op: (o: O) => P,
385
389
  pq: (p: P) => Q,
386
390
  qr: (q: Q) => Kind<Z, _R, _O, _E, _A>
387
- ): GenKind<Z, _R, _O, _E, _A>
391
+ ): Kind<Z, _R, _O, _E, _A>
388
392
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, _R, _O, _E, _A>(
389
393
  a: A,
390
394
  ab: (a: A) => B,
@@ -405,7 +409,7 @@ export interface Adapter<Z extends TypeLambda> {
405
409
  pq: (p: P) => Q,
406
410
  qr: (q: Q) => R,
407
411
  rs: (r: R) => Kind<Z, _R, _O, _E, _A>
408
- ): GenKind<Z, _R, _O, _E, _A>
412
+ ): Kind<Z, _R, _O, _E, _A>
409
413
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, _R, _O, _E, _A>(
410
414
  a: A,
411
415
  ab: (a: A) => B,
@@ -427,7 +431,7 @@ export interface Adapter<Z extends TypeLambda> {
427
431
  qr: (q: Q) => R,
428
432
  rs: (r: R) => S,
429
433
  st: (s: S) => Kind<Z, _R, _O, _E, _A>
430
- ): GenKind<Z, _R, _O, _E, _A>
434
+ ): Kind<Z, _R, _O, _E, _A>
431
435
  <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, _R, _O, _E, _A>(
432
436
  a: A,
433
437
  ab: (a: A) => B,
@@ -450,20 +454,19 @@ export interface Adapter<Z extends TypeLambda> {
450
454
  rs: (r: R) => S,
451
455
  st: (s: S) => T,
452
456
  tu: (s: T) => Kind<Z, _R, _O, _E, _A>
453
- ): GenKind<Z, _R, _O, _E, _A>
457
+ ): Kind<Z, _R, _O, _E, _A>
454
458
  }
455
459
 
456
460
  /**
457
461
  * @category adapters
458
462
  * @since 2.0.0
459
463
  */
460
- export const adapter: <F extends TypeLambda>() => Adapter<F> = () => // @ts-expect-error
461
- (function() {
464
+ export const adapter: <F extends TypeLambda>() => Adapter<F> = () => (function() {
462
465
  let x = arguments[0]
463
466
  for (let i = 1; i < arguments.length; i++) {
464
467
  x = arguments[i](x)
465
468
  }
466
- return new GenKindImpl(x)
469
+ return x
467
470
  })
468
471
 
469
472
  const defaultIncHi = 0x14057b7e
package/src/index.ts CHANGED
@@ -531,6 +531,21 @@ export * as Number from "./Number.js"
531
531
  export * as Option from "./Option.js"
532
532
 
533
533
  /**
534
+ * This module provides an implementation of the `Order` type class which is used to define a total ordering on some type `A`.
535
+ * An order is defined by a relation `<=`, which obeys the following laws:
536
+ *
537
+ * - either `x <= y` or `y <= x` (totality)
538
+ * - if `x <= y` and `y <= x`, then `x == y` (antisymmetry)
539
+ * - if `x <= y` and `y <= z`, then `x <= z` (transitivity)
540
+ *
541
+ * The truth table for compare is defined as follows:
542
+ *
543
+ * | `x <= y` | `x >= y` | Ordering | |
544
+ * | -------- | -------- | -------- | --------------------- |
545
+ * | `true` | `true` | `0` | corresponds to x == y |
546
+ * | `true` | `false` | `< 0` | corresponds to x < y |
547
+ * | `false` | `true` | `> 0` | corresponds to x > y |
548
+ *
534
549
  * @since 2.0.0
535
550
  */
536
551
  export * as Order from "./Order.js"
@@ -34,7 +34,6 @@ import * as fiberRefsPatch from "./fiberRefs/patch.js"
34
34
  import type { FiberRuntime } from "./fiberRuntime.js"
35
35
  import * as metricLabel from "./metric/label.js"
36
36
  import * as runtimeFlags from "./runtimeFlags.js"
37
- import * as SingleShotGen from "./singleShotGen.js"
38
37
  import * as internalTracer from "./tracer.js"
39
38
 
40
39
  /* @internal */
@@ -774,23 +773,6 @@ export const forever = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<ne
774
773
  return loop
775
774
  }
776
775
 
777
- /** @internal */
778
- class EffectGen {
779
- constructor(readonly value: Effect.Effect<any, any, any>) {
780
- }
781
- [Symbol.iterator]() {
782
- return new SingleShotGen.SingleShotGen(this)
783
- }
784
- }
785
-
786
- const adapter = function() {
787
- let x = arguments[0]
788
- for (let i = 1; i < arguments.length; i++) {
789
- x = arguments[i](x)
790
- }
791
- return new EffectGen(x) as any
792
- }
793
-
794
776
  /**
795
777
  * Inspired by https://github.com/tusharmath/qio/pull/22 (revised)
796
778
  @internal */
@@ -802,16 +784,13 @@ export const gen: typeof Effect.gen = function() {
802
784
  f = arguments[1].bind(arguments[0])
803
785
  }
804
786
  return core.suspend(() => {
805
- const iterator = f(adapter)
787
+ const iterator = f(pipe)
806
788
  const state = iterator.next()
807
789
  const run = (
808
790
  state: IteratorYieldResult<any> | IteratorReturnResult<any>
809
791
  ): Effect.Effect<any, any, any> => (state.done
810
792
  ? core.succeed(state.value)
811
- : pipe(
812
- state.value.value as unknown as Effect.Effect<any, any, any>,
813
- core.flatMap((val: any) => run(iterator.next(val)))
814
- ))
793
+ : core.flatMap(state.value, (val: any) => run(iterator.next(val))))
815
794
  return run(state)
816
795
  })
817
796
  }
@@ -47,6 +47,7 @@ import type * as fiberScope from "./fiberScope.js"
47
47
  import * as DeferredOpCodes from "./opCodes/deferred.js"
48
48
  import * as OpCodes from "./opCodes/effect.js"
49
49
  import * as _runtimeFlags from "./runtimeFlags.js"
50
+ import { SingleShotGen } from "./singleShotGen.js"
50
51
  import * as internalTracer from "./tracer.js"
51
52
 
52
53
  // -----------------------------------------------------------------------------
@@ -178,6 +179,9 @@ class EffectPrimitive {
178
179
  [NodeInspectSymbol]() {
179
180
  return this.toJSON()
180
181
  }
182
+ [Symbol.iterator]() {
183
+ return new SingleShotGen(this)
184
+ }
181
185
  }
182
186
 
183
187
  /** @internal */
@@ -216,6 +220,9 @@ class EffectPrimitiveFailure {
216
220
  [NodeInspectSymbol]() {
217
221
  return this.toJSON()
218
222
  }
223
+ [Symbol.iterator]() {
224
+ return new SingleShotGen(this)
225
+ }
219
226
  }
220
227
 
221
228
  /** @internal */
@@ -254,6 +261,9 @@ class EffectPrimitiveSuccess {
254
261
  [NodeInspectSymbol]() {
255
262
  return this.toJSON()
256
263
  }
264
+ [Symbol.iterator]() {
265
+ return new SingleShotGen(this)
266
+ }
257
267
  }
258
268
 
259
269
  /** @internal */
@@ -7,6 +7,7 @@ import { pipeArguments } from "../Pipeable.js"
7
7
  import type * as Sink from "../Sink.js"
8
8
  import type * as Stream from "../Stream.js"
9
9
  import * as OpCodes from "./opCodes/effect.js"
10
+ import * as SingleShotGen from "./singleShotGen.js"
10
11
  import * as version from "./version.js"
11
12
 
12
13
  /** @internal */
@@ -75,6 +76,9 @@ export const EffectPrototype: Effect.Effect<never> & Equal.Equal = {
75
76
  [Hash.symbol]() {
76
77
  return Hash.cached(this, Hash.random(this))
77
78
  },
79
+ [Symbol.iterator]() {
80
+ return new SingleShotGen.SingleShotGen(this) as any
81
+ },
78
82
  pipe() {
79
83
  return pipeArguments(this, arguments)
80
84
  }
@@ -1585,7 +1585,7 @@ export const exists: {
1585
1585
  readonly batching?: boolean | "inherit" | undefined
1586
1586
  }): Effect.Effect<boolean, E, R>
1587
1587
  } = dual(
1588
- (args) => Predicate.isIterable(args[0]),
1588
+ (args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]),
1589
1589
  <A, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<boolean, E, R>, options?: {
1590
1590
  readonly concurrency?: Concurrency | undefined
1591
1591
  readonly batching?: boolean | "inherit" | undefined
@@ -1639,7 +1639,7 @@ export const filter = dual<
1639
1639
  readonly negate?: boolean | undefined
1640
1640
  }) => Effect.Effect<Array<A>, E, R>
1641
1641
  >(
1642
- (args) => Predicate.isIterable(args[0]),
1642
+ (args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]),
1643
1643
  <A, E, R>(elements: Iterable<A>, f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>, options?: {
1644
1644
  readonly concurrency?: Concurrency | undefined
1645
1645
  readonly batching?: boolean | "inherit" | undefined
@@ -2551,7 +2551,7 @@ export const reduceEffect = dual<
2551
2551
  readonly batching?: boolean | "inherit" | undefined
2552
2552
  }
2553
2553
  ) => Effect.Effect<Z, E | Effect.Effect.Error<Eff>, R | Effect.Effect.Context<Eff>>
2554
- >((args) => Predicate.isIterable(args[0]), <A, E, R, Z>(
2554
+ >((args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]), <A, E, R, Z>(
2555
2555
  elements: Iterable<Effect.Effect<A, E, R>>,
2556
2556
  zero: Effect.Effect<Z, E, R>,
2557
2557
  f: (acc: NoInfer<Z>, a: NoInfer<A>, i: number) => Z,
@@ -34,7 +34,7 @@ const tokenBucket = (limit: number, window: DurationInput): Effect.Effect<
34
34
  Effect.gen(function*(_) {
35
35
  const millisPerToken = Math.ceil(Duration.toMillis(window) / limit)
36
36
  const semaphore = yield* _(Effect.makeSemaphore(limit))
37
- const latch = yield* _(Effect.makeSemaphore(0))
37
+ const latch = yield* Effect.makeSemaphore(0)
38
38
  const refill: Effect.Effect<void> = Effect.sleep(millisPerToken).pipe(
39
39
  Effect.zipRight(latch.releaseAll),
40
40
  Effect.zipRight(semaphore.release(1)),
@@ -19,6 +19,7 @@ import { ChannelTypeId } from "../core-stream.js"
19
19
  import { withFiberRuntime } from "../core.js"
20
20
  import { effectVariance } from "../effectable.js"
21
21
  import { OP_COMMIT } from "../opCodes/effect.js"
22
+ import { SingleShotGen } from "../singleShotGen.js"
22
23
  import { SinkTypeId } from "../sink.js"
23
24
  import * as OpCodes from "./opCodes/stm.js"
24
25
  import * as TExitOpCodes from "./opCodes/tExit.js"
@@ -170,6 +171,9 @@ class STMPrimitive implements STM.STM<any, any, any> {
170
171
  [Hash.symbol](this: {}) {
171
172
  return Hash.cached(this, Hash.random(this))
172
173
  }
174
+ [Symbol.iterator]() {
175
+ return new SingleShotGen(this) as any
176
+ }
173
177
  commit(this: STM.STM<any, any, any>): Effect.Effect<any, any, any> {
174
178
  return unsafeAtomically(this, constVoid, constVoid)
175
179
  }