@fncts/test 0.0.12 → 0.0.13

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 (127) hide show
  1. package/TestSpec.d.ts +1 -1
  2. package/_cjs/control/Annotations/api.cjs +1 -1
  3. package/_cjs/control/Annotations/api.cjs.map +1 -1
  4. package/_cjs/control/Gen/api/char.cjs.map +1 -1
  5. package/_cjs/control/Gen/api.cjs +3 -3
  6. package/_cjs/control/Gen/api.cjs.map +1 -1
  7. package/_cjs/control/Gen/definition.cjs.map +1 -1
  8. package/_cjs/control/Live/definition.cjs +1 -1
  9. package/_cjs/control/Live/definition.cjs.map +1 -1
  10. package/_cjs/control/RunnableSpec.cjs +9 -11
  11. package/_cjs/control/RunnableSpec.cjs.map +1 -1
  12. package/_cjs/control/Sized/api.cjs +1 -1
  13. package/_cjs/control/Sized/api.cjs.map +1 -1
  14. package/_cjs/control/Spec/api.cjs +1 -1
  15. package/_cjs/control/Spec/api.cjs.map +1 -1
  16. package/_cjs/control/Spec/definition.cjs.map +1 -1
  17. package/_cjs/control/TestAspect/api.cjs +3 -3
  18. package/_cjs/control/TestAspect/api.cjs.map +1 -1
  19. package/_cjs/control/TestClock/api.cjs +14 -22
  20. package/_cjs/control/TestClock/api.cjs.map +1 -1
  21. package/_cjs/control/TestConsole/api.cjs +12 -15
  22. package/_cjs/control/TestConsole/api.cjs.map +1 -1
  23. package/_cjs/control/TestEnvironment.cjs.map +1 -1
  24. package/_cjs/control/TestExecutor.cjs +6 -6
  25. package/_cjs/control/TestExecutor.cjs.map +1 -1
  26. package/_cjs/control/TestLogger.cjs.map +1 -1
  27. package/_cjs/control/TestRandom/api.cjs +10 -18
  28. package/_cjs/control/TestRandom/api.cjs.map +1 -1
  29. package/_cjs/control/TestRunner.cjs.map +1 -1
  30. package/_mjs/control/Annotations/api.mjs +1 -1
  31. package/_mjs/control/Annotations/api.mjs.map +1 -1
  32. package/_mjs/control/Gen/api/char.mjs.map +1 -1
  33. package/_mjs/control/Gen/api.mjs +3 -3
  34. package/_mjs/control/Gen/api.mjs.map +1 -1
  35. package/_mjs/control/Gen/definition.mjs.map +1 -1
  36. package/_mjs/control/Live/definition.mjs +1 -1
  37. package/_mjs/control/Live/definition.mjs.map +1 -1
  38. package/_mjs/control/RunnableSpec.mjs +9 -11
  39. package/_mjs/control/RunnableSpec.mjs.map +1 -1
  40. package/_mjs/control/Sized/api.mjs +1 -1
  41. package/_mjs/control/Sized/api.mjs.map +1 -1
  42. package/_mjs/control/Spec/api.mjs +1 -1
  43. package/_mjs/control/Spec/api.mjs.map +1 -1
  44. package/_mjs/control/Spec/definition.mjs.map +1 -1
  45. package/_mjs/control/TestAspect/api.mjs +3 -3
  46. package/_mjs/control/TestAspect/api.mjs.map +1 -1
  47. package/_mjs/control/TestClock/api.mjs +13 -21
  48. package/_mjs/control/TestClock/api.mjs.map +1 -1
  49. package/_mjs/control/TestConsole/api.mjs +10 -13
  50. package/_mjs/control/TestConsole/api.mjs.map +1 -1
  51. package/_mjs/control/TestEnvironment.mjs.map +1 -1
  52. package/_mjs/control/TestExecutor.mjs +6 -6
  53. package/_mjs/control/TestExecutor.mjs.map +1 -1
  54. package/_mjs/control/TestLogger.mjs.map +1 -1
  55. package/_mjs/control/TestRandom/api.mjs +10 -18
  56. package/_mjs/control/TestRandom/api.mjs.map +1 -1
  57. package/_mjs/control/TestRunner.mjs.map +1 -1
  58. package/_src/api.ts +8 -8
  59. package/_src/control/AbstractRunnableSpec.ts +2 -2
  60. package/_src/control/Annotations/api.ts +4 -4
  61. package/_src/control/AssertionIO/definition.ts +1 -1
  62. package/_src/control/DefaultTestReporter/render.ts +1 -1
  63. package/_src/control/FreeBooleanAlgebraIO/api.ts +4 -4
  64. package/_src/control/Gen/api/array.ts +2 -2
  65. package/_src/control/Gen/api/char.ts +10 -10
  66. package/_src/control/Gen/api/conc.ts +2 -2
  67. package/_src/control/Gen/api/double.ts +2 -2
  68. package/_src/control/Gen/api/float.ts +1 -1
  69. package/_src/control/Gen/api/string.ts +8 -8
  70. package/_src/control/Gen/api.ts +20 -20
  71. package/_src/control/Gen/definition.ts +2 -0
  72. package/_src/control/Live/definition.ts +7 -7
  73. package/_src/control/RunnableSpec.ts +4 -4
  74. package/_src/control/Sample/api.ts +12 -12
  75. package/_src/control/Sized/api.ts +2 -2
  76. package/_src/control/Sized/live.ts +1 -1
  77. package/_src/control/Spec/api.ts +18 -21
  78. package/_src/control/Spec/definition.ts +3 -3
  79. package/_src/control/TestAspect/api.ts +12 -14
  80. package/_src/control/TestAspect/definition.ts +1 -1
  81. package/_src/control/TestClock/api.ts +10 -10
  82. package/_src/control/TestClock/definition.ts +3 -3
  83. package/_src/control/TestConsole/api.ts +5 -5
  84. package/_src/control/TestEnvironment.ts +11 -10
  85. package/_src/control/TestExecutor.ts +4 -6
  86. package/_src/control/TestLogger.ts +2 -2
  87. package/_src/control/TestRandom/api.ts +10 -10
  88. package/_src/control/TestRunner.ts +3 -3
  89. package/_src/data/TestConfig.ts +1 -1
  90. package/_src/util/math.ts +3 -3
  91. package/api.d.ts +5 -6
  92. package/control/AbstractRunnableSpec.d.ts +2 -3
  93. package/control/Annotations/api.d.ts +4 -5
  94. package/control/Annotations/live.d.ts +3 -3
  95. package/control/AssertionIO/definition.d.ts +1 -1
  96. package/control/DefaultRunnableSpec.d.ts +2 -2
  97. package/control/DefaultTestReporter/render.d.ts +1 -2
  98. package/control/FreeBooleanAlgebraIO/api.d.ts +4 -4
  99. package/control/Gen/api/array.d.ts +2 -3
  100. package/control/Gen/api/char.d.ts +9 -9
  101. package/control/Gen/api/conc.d.ts +2 -3
  102. package/control/Gen/api/double.d.ts +2 -2
  103. package/control/Gen/api/float.d.ts +1 -1
  104. package/control/Gen/api/string.d.ts +8 -9
  105. package/control/Gen/api.d.ts +19 -20
  106. package/control/Gen/definition.d.ts +2 -0
  107. package/control/Live/definition.d.ts +4 -6
  108. package/control/RunnableSpec.d.ts +2 -3
  109. package/control/Sample/api.d.ts +10 -10
  110. package/control/Sized/api.d.ts +2 -3
  111. package/control/Sized/live.d.ts +1 -2
  112. package/control/Spec/api.d.ts +12 -14
  113. package/control/Spec/definition.d.ts +4 -5
  114. package/control/TestAspect/api.d.ts +6 -7
  115. package/control/TestAspect/definition.d.ts +1 -1
  116. package/control/TestClock/api.d.ts +3 -4
  117. package/control/TestClock/definition.d.ts +3 -3
  118. package/control/TestConsole/api.d.ts +2 -3
  119. package/control/TestConsole/definition.d.ts +5 -5
  120. package/control/TestEnvironment.d.ts +2 -3
  121. package/control/TestExecutor.d.ts +2 -3
  122. package/control/TestLogger.d.ts +2 -3
  123. package/control/TestRandom/api.d.ts +10 -10
  124. package/control/TestRunner.d.ts +3 -4
  125. package/data/TestConfig.d.ts +5 -6
  126. package/package.json +4 -4
  127. package/util/math.d.ts +4 -4
@@ -14,7 +14,7 @@ import { Gen } from "./definition.js";
14
14
  /**
15
15
  * @tsplus static fncts.test.GenOps anyBigInt
16
16
  */
17
- export const anyBigInt: Gen<unknown, bigint> = fromIOSample(
17
+ export const anyBigInt: Gen<never, bigint> = fromIOSample(
18
18
  Random.nextBigIntBetween(BigInt(-1) << BigInt(255), (BigInt(1) << BigInt(255)) - BigInt(1)).map(
19
19
  Sample.shrinkBigInt(BigInt(0)),
20
20
  ),
@@ -23,12 +23,12 @@ export const anyBigInt: Gen<unknown, bigint> = fromIOSample(
23
23
  /**
24
24
  * @tsplus static fncts.test.GenOps anyDouble
25
25
  */
26
- export const anyDouble: Gen<unknown, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0)));
26
+ export const anyDouble: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0)));
27
27
 
28
28
  /**
29
29
  * @tsplus static fncts.test.GenOps anyInt
30
30
  */
31
- export const anyInt: Gen<unknown, number> = Gen.fromIOSample(Random.nextInt.map(Sample.shrinkIntegral(0)));
31
+ export const anyInt: Gen<never, number> = Gen.fromIOSample(Random.nextInt.map(Sample.shrinkIntegral(0)));
32
32
 
33
33
  /**
34
34
  * @tsplus static fncts.test.GenOps bounded
@@ -40,14 +40,14 @@ export function bounded<R, A>(min: number, max: number, f: (n: number) => Gen<R,
40
40
  /**
41
41
  * @tsplus static fncts.test.GenOps constant
42
42
  */
43
- export function constant<A>(a: A): Gen<unknown, A> {
43
+ export function constant<A>(a: A): Gen<never, A> {
44
44
  return new Gen(Stream.succeedNow(Just(Sample.noShrink(a))));
45
45
  }
46
46
 
47
47
  /**
48
48
  * @tsplus fluent fncts.test.Gen flatMap
49
49
  */
50
- export function flatMap_<R, A, R1, B>(ma: Gen<R, A>, f: (a: A) => Gen<R1, B>): Gen<R & R1, B> {
50
+ export function flatMap_<R, A, R1, B>(ma: Gen<R, A>, f: (a: A) => Gen<R1, B>): Gen<R | R1, B> {
51
51
  return new Gen(
52
52
  Sample.flatMapStream(ma.sample, (sample) => {
53
53
  const values = f(sample.value).sample;
@@ -67,7 +67,7 @@ export function defer<R, A>(gen: Lazy<Gen<R, A>>): Gen<R, A> {
67
67
  /**
68
68
  * @tsplus static fncts.test.GenOps empty
69
69
  */
70
- export const empty: Gen<unknown, never> = new Gen(Stream.empty);
70
+ export const empty: Gen<never, never> = new Gen(Stream.empty);
71
71
 
72
72
  /**
73
73
  * @tsplus fluent fncts.test.Gen filter
@@ -88,7 +88,7 @@ export function filterNot_<R, A>(fa: Gen<R, A>, p: Predicate<A>): Gen<R, A> {
88
88
  /**
89
89
  * @tsplus getter fncts.test.Gen flatten
90
90
  */
91
- export function flatten<R, R1, A>(mma: Gen<R, Gen<R1, A>>): Gen<R & R1, A> {
91
+ export function flatten<R, R1, A>(mma: Gen<R, Gen<R1, A>>): Gen<R | R1, A> {
92
92
  return mma.flatMap(identity);
93
93
  }
94
94
 
@@ -109,7 +109,7 @@ export function fromIOSample<R, A>(effect: IO<R, never, Sample<R, A>>): Gen<R, A
109
109
  /**
110
110
  * @tsplus static fncts.test.GenOps int
111
111
  */
112
- export function int(constraints: NumberConstraints = {}): Gen<unknown, number> {
112
+ export function int(constraints: NumberConstraints = {}): Gen<never, number> {
113
113
  return Gen.fromIOSample(
114
114
  IO.defer(() => {
115
115
  const min = constraints.min ?? -0x80000000;
@@ -133,7 +133,7 @@ export function map_<R, A, B>(self: Gen<R, A>, f: (a: A) => B): Gen<R, B> {
133
133
  /**
134
134
  * @tsplus fluent fncts.test.Gen mapIO
135
135
  */
136
- export function mapIO_<R, A, R1, B>(self: Gen<R, A>, f: (a: A) => IO<R1, never, B>): Gen<R & R1, B> {
136
+ export function mapIO_<R, A, R1, B>(self: Gen<R, A>, f: (a: A) => IO<R1, never, B>): Gen<R | R1, B> {
137
137
  return new Gen(
138
138
  self.sample.mapIO((maybeSample) =>
139
139
  maybeSample.match(
@@ -147,17 +147,17 @@ export function mapIO_<R, A, R1, B>(self: Gen<R, A>, f: (a: A) => IO<R1, never,
147
147
  /**
148
148
  * @tsplus static fncts.test.GenOps exponential
149
149
  */
150
- export const exponential: Gen<unknown, number> = Gen.uniform.map((n) => -Math.log(1 - n));
150
+ export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
151
151
 
152
152
  /**
153
153
  * @tsplus static fncts.test.GenOps size
154
154
  */
155
- export const size: Gen<Has<Sized>, number> = Gen.fromIO(Sized.size);
155
+ export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
156
156
 
157
157
  /**
158
158
  * @tsplus static fncts.test.GenOps medium
159
159
  */
160
- export function medium<R, A>(f: (n: number) => Gen<R, A>, min = 0): Gen<R & Has<Sized>, A> {
160
+ export function medium<R, A>(f: (n: number) => Gen<R, A>, min = 0): Gen<R | Sized, A> {
161
161
  return Gen.size
162
162
  .flatMap((max) => Gen.exponential.map((n) => clamp(Math.round((n * max) / 10.0), min, max)))
163
163
  .reshrink(Sample.shrinkIntegral(min))
@@ -200,9 +200,9 @@ export function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_
200
200
  /**
201
201
  * @tsplus fluent fncts.test.Gen reshrink
202
202
  */
203
- export function reshrink_<R, A, R1, B>(gen: Gen<R, A>, f: (a: A) => Sample<R1, B>): Gen<R & R1, B> {
203
+ export function reshrink_<R, A, R1, B>(gen: Gen<R, A>, f: (a: A) => Sample<R1, B>): Gen<R | R1, B> {
204
204
  return new Gen(
205
- (gen.sample as Stream<R & R1, never, Maybe<Sample<R, A>>>).map((maybeSample) =>
205
+ (gen.sample as Stream<R | R1, never, Maybe<Sample<R, A>>>).map((maybeSample) =>
206
206
  maybeSample.map((sample) => f(sample.value)),
207
207
  ),
208
208
  );
@@ -211,14 +211,14 @@ export function reshrink_<R, A, R1, B>(gen: Gen<R, A>, f: (a: A) => Sample<R1, B
211
211
  /**
212
212
  * @tsplus static fncts.test.GenOps sized
213
213
  */
214
- export function sized<R, A>(f: (size: number) => Gen<R, A>): Gen<R & Has<Sized>, A> {
214
+ export function sized<R, A>(f: (size: number) => Gen<R, A>): Gen<R | Sized, A> {
215
215
  return Gen.size.flatMap(f);
216
216
  }
217
217
 
218
218
  /**
219
219
  * @tsplus static fncts.test.GenOps small
220
220
  */
221
- export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R & Has<Sized>, A> {
221
+ export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R | Sized, A> {
222
222
  return Gen.size
223
223
  .flatMap((max) => Gen.exponential.map((n) => clamp(Math.round((n * max) / 25), min, max)))
224
224
  .reshrink(Sample.shrinkIntegral(min))
@@ -228,7 +228,7 @@ export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R & Ha
228
228
  /**
229
229
  * @tsplus static fncts.test.GenOps unfoldGen
230
230
  */
231
- export function unfoldGen<S, R, A>(s: S, f: (s: S) => Gen<R, readonly [S, A]>): Gen<R & Has<Sized>, Conc<A>> {
231
+ export function unfoldGen<S, R, A>(s: S, f: (s: S) => Gen<R, readonly [S, A]>): Gen<R | Sized, Conc<A>> {
232
232
  return Gen.small((n) => Gen.unfoldGenN(n, s, f));
233
233
  }
234
234
 
@@ -243,12 +243,12 @@ export function unfoldGenN<S, R, A>(n: number, s: S, f: (s: S) => Gen<R, readonl
243
243
  /**
244
244
  * @tsplus static fncts.test.GenOps uniform
245
245
  */
246
- export const uniform: Gen<unknown, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0.0)));
246
+ export const uniform: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0.0)));
247
247
 
248
248
  /**
249
249
  * @tsplus static fncts.test.GenOps unwrap
250
250
  */
251
- export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R & R1, A> {
251
+ export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R | R1, A> {
252
252
  return Gen.fromIO(effect).flatten;
253
253
  }
254
254
 
@@ -271,6 +271,6 @@ export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, numbe
271
271
  /**
272
272
  * @tsplus fluent fncts.test.Gen zipWith
273
273
  */
274
- export function zipWith_<R, A, R1, B, C>(self: Gen<R, A>, that: Gen<R1, B>, f: (a: A, b: B) => C): Gen<R & R1, C> {
274
+ export function zipWith_<R, A, R1, B, C>(self: Gen<R, A>, that: Gen<R1, B>, f: (a: A, b: B) => C): Gen<R | R1, C> {
275
275
  return self.flatMap((a) => that.map((b) => f(a, b)));
276
276
  }
@@ -5,5 +5,7 @@ import type { Sample } from "../Sample.js";
5
5
  * @tsplus companion fncts.test.GenOps
6
6
  */
7
7
  export class Gen<R, A> {
8
+ declare _R: () => R;
9
+ declare _A: () => A;
8
10
  constructor(readonly sample: Stream<R, never, Maybe<Sample<R, A>>>) {}
9
11
  }
@@ -13,7 +13,7 @@ export const LiveTag = Tag<Live>();
13
13
  export abstract class Live {
14
14
  abstract provide<R, E, A>(io: IO<R, E, A>): IO<R, E, A>;
15
15
 
16
- static Default: Layer<IOEnv, never, Has<Live>> = Layer.fromIO(
16
+ static Default: Layer<IOEnv, never, Live> = Layer.fromIO(
17
17
  IO.environmentWith(
18
18
  (env) =>
19
19
  new (class extends Live {
@@ -25,7 +25,7 @@ export abstract class Live {
25
25
  LiveTag,
26
26
  );
27
27
 
28
- static Live<R extends Has<Live>, E, A>(io: IO<R, E, A>): IO<R & Has<Live>, E, A> {
28
+ static Live<R extends Live, E, A>(io: IO<R, E, A>): IO<R | Live, E, A> {
29
29
  return IO.serviceWithIO((live) => live.provide(io), LiveTag);
30
30
  }
31
31
  }
@@ -35,13 +35,13 @@ export abstract class Live {
35
35
  */
36
36
  export function withLive_<R, E, A, E1, B>(
37
37
  io: IO<R, E, A>,
38
- f: (_: IO<unknown, E, A>) => IO<IOEnv, E1, B>,
39
- ): IO<Erase<R, Has<Live>>, E | E1, B> {
38
+ f: (_: IO<never, E, A>) => IO<IOEnv, E1, B>,
39
+ ): IO<Exclude<R, Live>, E | E1, B> {
40
40
  // @ts-expect-error
41
- return IO.environment<R & Has<Live>>().flatMap((r) => Live.Live(f(io.provideEnvironment(r))));
41
+ return IO.environment<R | Live>().flatMap((r) => Live.Live(f(io.provideEnvironment(r))));
42
42
  }
43
43
 
44
- export function withLive<R extends Has<Live>, E, A>(io: IO<R, E, A>) {
45
- return <E1, B>(f: (_: IO<R, E, A>) => IO<R, E1, B>): IO<R & Has<Live>, E1, B> =>
44
+ export function withLive<R extends Live, E, A>(io: IO<R, E, A>) {
45
+ return <E1, B>(f: (_: IO<R, E, A>) => IO<R, E1, B>): IO<R | Live, E1, B> =>
46
46
  IOEnv.services.getWith((services) => Live.Live(f(IOEnv.services.locally(services)(io))));
47
47
  }
@@ -9,10 +9,10 @@ import { TestLogger } from "@fncts/test/control/TestLogger";
9
9
 
10
10
  export abstract class RunnableSpec<R, E> extends AbstractRunnableSpec<R, E> {
11
11
  readonly _tag = "RunnableSpec";
12
- run(spec: Spec<R, E>): URIO<Has<TestLogger>, number> {
12
+ run(spec: Spec<R, E>): URIO<TestLogger, number> {
13
13
  const self = this;
14
- return IO.gen(function* (_) {
15
- const results = yield* _(self.runSpec(spec));
14
+ return Do((_) => {
15
+ const results = _(self.runSpec(spec));
16
16
  const hasFailures = results.exists(
17
17
  matchTag(
18
18
  {
@@ -22,7 +22,7 @@ export abstract class RunnableSpec<R, E> extends AbstractRunnableSpec<R, E> {
22
22
  ),
23
23
  );
24
24
  const summary = SummaryBuilder.buildSummary(results);
25
- yield* _(TestLogger.logLine(summary.summary));
25
+ _(TestLogger.logLine(summary.summary));
26
26
  return hasFailures ? 1 : 0;
27
27
  });
28
28
  }
@@ -10,7 +10,7 @@ import { Sample } from "./definition.js";
10
10
  /**
11
11
  * @tsplus fluent fncts.test.Sample flatMap
12
12
  */
13
- export function flatMap_<R, A, R1, B>(ma: Sample<R, A>, f: (a: A) => Sample<R1, B>): Sample<R & R1, B> {
13
+ export function flatMap_<R, A, R1, B>(ma: Sample<R, A>, f: (a: A) => Sample<R1, B>): Sample<R | R1, B> {
14
14
  const sample = f(ma.value);
15
15
  return new Sample(
16
16
  sample.value,
@@ -45,7 +45,7 @@ export function filter_<R, A>(ma: Sample<R, A>, f: Predicate<A>): Stream<R, neve
45
45
  export function foreach_<R, A, R1, B>(
46
46
  ma: Sample<R, A>,
47
47
  f: (a: A) => IO<R1, never, B>,
48
- ): IO<R & R1, never, Sample<R & R1, B>> {
48
+ ): IO<R | R1, never, Sample<R | R1, B>> {
49
49
  return f(ma.value).map(
50
50
  (b) =>
51
51
  new Sample(
@@ -104,28 +104,28 @@ export function unfold<R, A, S>(s: S, f: (s: S) => readonly [A, Stream<R, never,
104
104
  /**
105
105
  * @tsplus fluent fncts.test.Sample zip
106
106
  */
107
- export function zip<R, A, R1, B>(ma: Sample<R, A>, mb: Sample<R1, B>): Sample<R & R1, readonly [A, B]> {
107
+ export function zip<R, A, R1, B>(ma: Sample<R, A>, mb: Sample<R1, B>): Sample<R | R1, readonly [A, B]> {
108
108
  return ma.zipWith(mb, tuple);
109
109
  }
110
110
 
111
111
  /**
112
112
  * @tsplus fluent fncts.test.Sample zipWith
113
113
  */
114
- export function zipWith_<R, A, R1, B, C>(ma: Sample<R, A>, mb: Sample<R1, B>, f: (a: A, b: B) => C): Sample<R & R1, C> {
114
+ export function zipWith_<R, A, R1, B, C>(ma: Sample<R, A>, mb: Sample<R1, B>, f: (a: A, b: B) => C): Sample<R | R1, C> {
115
115
  return ma.flatMap((a) => map_(mb, (b) => f(a, b)));
116
116
  }
117
117
 
118
118
  /**
119
119
  * @tsplus static fncts.test.SampleOps noShrink
120
120
  */
121
- export function noShrink<A>(a: A): Sample<unknown, A> {
121
+ export function noShrink<A>(a: A): Sample<never, A> {
122
122
  return new Sample(a, Stream.empty);
123
123
  }
124
124
 
125
125
  /**
126
126
  * @tsplus static fncts.test.SampleOps shrinkFractional
127
127
  */
128
- export function shrinkFractional(smallest: number): (a: number) => Sample<unknown, number> {
128
+ export function shrinkFractional(smallest: number): (a: number) => Sample<never, number> {
129
129
  return (a) =>
130
130
  Sample.unfold(a, (max) =>
131
131
  tuple(
@@ -155,7 +155,7 @@ function bigIntAbs(x: bigint): bigint {
155
155
  /**
156
156
  * @tsplus static fncts.test.SampleOps shrinkBigInt
157
157
  */
158
- export function shrinkBigInt(smallest: bigint): (a: bigint) => Sample<unknown, bigint> {
158
+ export function shrinkBigInt(smallest: bigint): (a: bigint) => Sample<never, bigint> {
159
159
  return (a) =>
160
160
  Sample.unfold(a, (max) =>
161
161
  tuple(
@@ -177,7 +177,7 @@ export function shrinkBigInt(smallest: bigint): (a: bigint) => Sample<unknown, b
177
177
  /**
178
178
  * @tsplus static fncts.test.SampleOps shrinkIntegral
179
179
  */
180
- export function shrinkIntegral(smallest: number): (a: number) => Sample<unknown, number> {
180
+ export function shrinkIntegral(smallest: number): (a: number) => Sample<never, number> {
181
181
  return (a) =>
182
182
  Sample.unfold(a, (max) =>
183
183
  tuple(
@@ -199,7 +199,7 @@ export function shrinkIntegral(smallest: number): (a: number) => Sample<unknown,
199
199
  /**
200
200
  * @tsplus static fncts.test.SampleOps shrinkArrayInt64
201
201
  */
202
- export function shrinkArrayInt64(target: ArrayInt64): (value: ArrayInt64) => Sample<unknown, ArrayInt64> {
202
+ export function shrinkArrayInt64(target: ArrayInt64): (value: ArrayInt64) => Sample<never, ArrayInt64> {
203
203
  return (value) =>
204
204
  Sample.unfold(value, (max) =>
205
205
  tuple(
@@ -219,8 +219,8 @@ export function shrinkArrayInt64(target: ArrayInt64): (value: ArrayInt64) => Sam
219
219
  function mergeStream<R, A, R1, B>(
220
220
  left: Stream<R, never, Maybe<A>>,
221
221
  right: Stream<R1, never, Maybe<B>>,
222
- ): Stream<R & R1, never, Maybe<A | B>> {
223
- return flatMapStream(Stream.fromChunk(Conc(Just<Stream<R & R1, never, Maybe<A | B>>>(left), Just(right))), identity);
222
+ ): Stream<R | R1, never, Maybe<A | B>> {
223
+ return flatMapStream(Stream.fromChunk(Conc(Just<Stream<R | R1, never, Maybe<A | B>>>(left), Just(right))), identity);
224
224
  }
225
225
 
226
226
  /**
@@ -229,7 +229,7 @@ function mergeStream<R, A, R1, B>(
229
229
  export function flatMapStream<R, A, R1, B>(
230
230
  stream: Stream<R, never, Maybe<A>>,
231
231
  f: (a: A) => Stream<R1, never, Maybe<B>>,
232
- ): Stream<R & R1, never, Maybe<B>> {
232
+ ): Stream<R | R1, never, Maybe<B>> {
233
233
  return new Stream(
234
234
  stream.rechunk(1).channel.concatMapWithCustom(
235
235
  (values) =>
@@ -3,12 +3,12 @@ import { Sized } from "./definition.js";
3
3
  /**
4
4
  * @tsplus static fncts.test.SizedOps size
5
5
  */
6
- export const size: URIO<Has<Sized>, number> = IO.serviceWithIO((sized) => sized.size, Sized.Tag);
6
+ export const size: URIO<Sized, number> = IO.serviceWithIO((sized) => sized.size, Sized.Tag);
7
7
 
8
8
  /**
9
9
  * @tsplus static fncts.test.SizedOps withSize
10
10
  */
11
11
  export function withSize(size: number) {
12
- return <R, E, A>(io: IO<R, E, A>): IO<R & Has<Sized>, E, A> =>
12
+ return <R, E, A>(io: IO<R, E, A>): IO<R | Sized, E, A> =>
13
13
  IO.serviceWithIO((sized) => sized.withSize(size)(io), Sized.Tag);
14
14
  }
@@ -3,7 +3,7 @@ import { Sized } from "./definition.js";
3
3
  /**
4
4
  * @tsplus static fncts.test.SizedOps Live
5
5
  */
6
- export function Live(size: number): Layer<unknown, never, Has<Sized>> {
6
+ export function Live(size: number): Layer<never, never, Sized> {
7
7
  return Layer.scoped(
8
8
  FiberRef.make(size).map(
9
9
  (ref) =>
@@ -17,7 +17,7 @@ import { ExecCase, LabeledCase, MultipleCase, PSpec, ScopedCase, TestCase } from
17
17
  /**
18
18
  * @tsplus getter fncts.test.PSpec annotated
19
19
  */
20
- export function annotated<R, E, T>(spec: PSpec<R, E, T>): PSpec<R & Has<Annotations>, Annotated<E>, Annotated<T>> {
20
+ export function annotated<R, E, T>(spec: PSpec<R, E, T>): PSpec<R | Annotations, Annotated<E>, Annotated<T>> {
21
21
  return spec.transform(
22
22
  matchTag(
23
23
  {
@@ -35,7 +35,7 @@ export function annotated<R, E, T>(spec: PSpec<R, E, T>): PSpec<R & Has<Annotati
35
35
  export function combine_<R, E, T, R1, E1, T1>(
36
36
  self: PSpec<R, E, T>,
37
37
  that: PSpec<R1, E1, T1>,
38
- ): PSpec<R & R1, E | E1, T | T1> {
38
+ ): PSpec<R | R1, E | E1, T | T1> {
39
39
  if (self.caseValue.isMultiple() && that.caseValue.isMultiple()) {
40
40
  return MultipleCase(self.caseValue.specs.concat(that.caseValue.specs));
41
41
  }
@@ -45,7 +45,7 @@ export function combine_<R, E, T, R1, E1, T1>(
45
45
  if (that.caseValue.isMultiple()) {
46
46
  return MultipleCase(that.caseValue.specs.prepend(self));
47
47
  }
48
- return MultipleCase(Conc<PSpec<R & R1, E | E1, T | T1>>(self, that));
48
+ return MultipleCase(Conc<PSpec<R | R1, E | E1, T | T1>>(self, that));
49
49
  }
50
50
 
51
51
  /**
@@ -60,8 +60,8 @@ export function contramapEnvironment_<R, E, T, R0>(
60
60
  {
61
61
  Scoped: ({ scoped }) =>
62
62
  new ScopedCase(
63
- scoped.contramapEnvironment((r: Environment<R0 & Has<Scope>>) =>
64
- Environment.empty.add(r.get(Scope.Tag), Scope.Tag).union(f(r)),
63
+ scoped.contramapEnvironment((r: Environment<R0 | Scope>) =>
64
+ Environment.empty.add(r.get(Scope.Tag), Scope.Tag).union(f(r as Environment<R0>)),
65
65
  ),
66
66
  ),
67
67
  Test: ({ test, annotations }) => new TestCase(test.contramapEnvironment(f), annotations),
@@ -74,7 +74,7 @@ export function contramapEnvironment_<R, E, T, R0>(
74
74
  /**
75
75
  * @tsplus fluent fncts.test.PSpec countTests
76
76
  */
77
- export function countTests_<R, E, T>(spec: PSpec<R, E, T>, f: (t: T) => boolean): IO<R & Has<Scope>, E, number> {
77
+ export function countTests_<R, E, T>(spec: PSpec<R, E, T>, f: (t: T) => boolean): IO<R | Scope, E, number> {
78
78
  return spec.fold(
79
79
  matchTag({
80
80
  Exec: ({ spec }) => spec,
@@ -89,7 +89,7 @@ export function countTests_<R, E, T>(spec: PSpec<R, E, T>, f: (t: T) => boolean)
89
89
  /**
90
90
  * @tsplus static fncts.test.PSpecOps empty
91
91
  */
92
- export const empty: PSpec<unknown, never, never> = multipleCase(Conc.empty());
92
+ export const empty: PSpec<never, never, never> = multipleCase(Conc.empty());
93
93
 
94
94
  /**
95
95
  * @tsplus static fncts.test.PSpecOps exec
@@ -105,8 +105,8 @@ export function exec<R, E, T>(spec: PSpec<R, E, T>, exec: ExecutionStrategy): PS
105
105
  export function execute<R, E, T>(
106
106
  self: PSpec<R, E, T>,
107
107
  defExec: ExecutionStrategy,
108
- ): IO<R & Has<Scope>, never, PSpec<unknown, E, T>> {
109
- return IO.environmentWithIO((r: Environment<R & Has<Scope>>) =>
108
+ ): IO<R | Scope, never, PSpec<never, E, T>> {
109
+ return IO.environmentWithIO((r: Environment<R | Scope>) =>
110
110
  self.provideEnvironment(r).foreachExec(IO.failCauseNow, IO.succeedNow, defExec),
111
111
  );
112
112
  }
@@ -186,9 +186,9 @@ export function fold_<R, E, T, Z>(spec: PSpec<R, E, T>, f: (_: SpecCase<R, E, T,
186
186
  */
187
187
  export function foldScoped_<R, E, T, R1, E1, Z>(
188
188
  spec: PSpec<R, E, T>,
189
- f: (_: SpecCase<R, E, T, Z>) => IO<R1 & Has<Scope>, E1, Z>,
189
+ f: (_: SpecCase<R, E, T, Z>) => IO<R1 | Scope, E1, Z>,
190
190
  defExec: ExecutionStrategy,
191
- ): IO<R & R1 & Has<Scope>, E1, Z> {
191
+ ): IO<R | R1 | Scope, E1, Z> {
192
192
  return matchTag_(spec.caseValue, {
193
193
  Exec: ({ exec, spec }) => spec.foldScoped(f, exec).flatMap((z) => f(new ExecCase(exec, z))),
194
194
  Labeled: ({ label, spec }) => spec.foldScoped(f, defExec).flatMap((z) => f(new LabeledCase(label, z))),
@@ -213,7 +213,7 @@ export function foreachExec_<R, E, T, R1, E1, A, R2, E2, B>(
213
213
  failure: (c: Cause<E>) => IO<R1, E1, A>,
214
214
  success: (t: T) => IO<R2, E2, B>,
215
215
  defExec: ExecutionStrategy,
216
- ): IO<R & R1 & R2 & Has<Scope>, never, PSpec<R & R1 & R2, E1 | E2, A | B>> {
216
+ ): IO<R | R1 | R2 | Scope, never, PSpec<R | R1 | R2, E1 | E2, A | B>> {
217
217
  return spec.foldScoped(
218
218
  matchTag({
219
219
  Exec: ({ exec, spec }) => IO.succeedNow(ExecCase(spec, exec)),
@@ -248,7 +248,7 @@ export function labeledCase<R, E, T>(spec: PSpec<R, E, T>, label: string): PSpec
248
248
  * @tsplus static fncts.test.PSpecOps scoped
249
249
  * @tsplus static fncts.test.PSpec.ScopedCaseOps __call
250
250
  */
251
- export function scoped<R, E, T>(managed: IO<R & Has<Scope>, E, PSpec<R, E, T>>): PSpec<R, E, T> {
251
+ export function scoped<R, E, T>(managed: IO<R | Scope, E, PSpec<R, E, T>>): PSpec<R, E, T> {
252
252
  return new PSpec(new ScopedCase(managed));
253
253
  }
254
254
 
@@ -292,21 +292,21 @@ export function multipleCase<R, E, T>(specs: Conc<PSpec<R, E, T>>): PSpec<R, E,
292
292
  /**
293
293
  * @tsplus fluent fncts.test.PSpec provideEnvironment
294
294
  */
295
- export function provideEnvironment_<R, E, T>(self: PSpec<R, E, T>, r: Environment<R>): PSpec<unknown, E, T> {
295
+ export function provideEnvironment_<R, E, T>(self: PSpec<R, E, T>, r: Environment<R>): PSpec<never, E, T> {
296
296
  return self.contramapEnvironment(() => r);
297
297
  }
298
298
 
299
299
  /**
300
300
  * @tsplus fluent fncts.test.PSpec provideLayer
301
301
  */
302
- export function provideLayer_<RIn, E, ROut extends Spreadable, R, E1, T>(
302
+ export function provideLayer_<RIn, E, ROut, E1, T>(
303
303
  self: PSpec<ROut, E1, T>,
304
304
  layer: Layer<RIn, E, ROut>,
305
305
  ): PSpec<RIn, E | E1, T> {
306
306
  return self.transform(
307
307
  matchTag(
308
308
  {
309
- Scoped: ({ scoped }) => new ScopedCase(scoped.provideLayer(Layer.environment<Has<Scope>>().and(layer))),
309
+ Scoped: ({ scoped }) => new ScopedCase(scoped.provideLayer(Layer.environment<Scope>().and(layer))),
310
310
  Test: ({ test, annotations }) => new TestCase(test.provideLayer(layer), annotations),
311
311
  },
312
312
  identity,
@@ -359,7 +359,7 @@ export function annotate_<R, E, T, V>(self: PSpec<R, E, T>, key: TestAnnotation<
359
359
  export function whenIO_<R, E, R1, E1>(
360
360
  self: PSpec<R, E, TestSuccess>,
361
361
  b: IO<R1, E1, boolean>,
362
- ): PSpec<R & R1 & Has<Annotations>, E | E1, TestSuccess> {
362
+ ): PSpec<R | R1 | Annotations, E | E1, TestSuccess> {
363
363
  return matchTag_(self.caseValue, {
364
364
  Exec: (c) => exec(c.spec.whenIO(b), c.exec),
365
365
  Labeled: ({ label, spec }) => Spec.labeled(spec.whenIO(b), label),
@@ -376,9 +376,6 @@ export function whenIO_<R, E, R1, E1>(
376
376
  /**
377
377
  * @tsplus fluent fncts.test.PSpec when
378
378
  */
379
- export function when_<R, E>(
380
- self: PSpec<R, E, TestSuccess>,
381
- b: Lazy<boolean>,
382
- ): PSpec<R & Has<Annotations>, E, TestSuccess> {
379
+ export function when_<R, E>(self: PSpec<R, E, TestSuccess>, b: Lazy<boolean>): PSpec<R | Annotations, E, TestSuccess> {
383
380
  return self.whenIO(IO.succeed(b));
384
381
  }
@@ -8,7 +8,7 @@ import type { _A, _E, _R } from "@fncts/base/types.js";
8
8
  * @tsplus companion fncts.test.PSpecOps
9
9
  */
10
10
  export class PSpec<R, E, T> {
11
- readonly _R!: (_: R) => void;
11
+ readonly _R!: () => R;
12
12
  readonly _E!: () => E;
13
13
  readonly _A!: () => T;
14
14
 
@@ -56,7 +56,7 @@ export class LabeledCase<Spec> {
56
56
  */
57
57
  export class ScopedCase<R, E, Spec> {
58
58
  readonly _tag = SpecCaseTag.Scoped;
59
- constructor(readonly scoped: IO<R & Has<Scope>, E, Spec>) {}
59
+ constructor(readonly scoped: IO<R | Scope, E, Spec>) {}
60
60
  }
61
61
 
62
62
  /**
@@ -71,7 +71,7 @@ export class MultipleCase<Spec> {
71
71
  * @tsplus companion fncts.test.PSpec.TestCaseOps
72
72
  */
73
73
  export class TestCase<R, E, T> {
74
- readonly _R!: (_: R) => void;
74
+ readonly _R!: () => R;
75
75
  readonly _E!: () => E;
76
76
  readonly _A!: () => T;
77
77
  readonly _tag = SpecCaseTag.Test;
@@ -15,10 +15,10 @@ export type TestAspectPoly = TestAspect<unknown, never>;
15
15
 
16
16
  export const id: TestAspectPoly = Function.identity;
17
17
 
18
- export const ignore: TestAspectAtLeastR<Has<Annotations>> = (spec) => spec.when(false);
18
+ export const ignore: TestAspectAtLeastR<Annotations> = (spec) => spec.when(false);
19
19
 
20
20
  export function perTest<R, E>(
21
- f: <R1, E1>(test: IO<R1, TestFailure<E1>, TestSuccess>) => IO<R & R1, TestFailure<E | E1>, TestSuccess>,
21
+ f: <R1, E1>(test: IO<R1, TestFailure<E1>, TestSuccess>) => IO<R | R1, TestFailure<E | E1>, TestSuccess>,
22
22
  ): TestAspect<R, E> {
23
23
  return (spec) =>
24
24
  spec.transform(
@@ -41,8 +41,8 @@ export function after<R, E, A>(effect: IO<R, E, A>): TestAspect<R, E> {
41
41
  );
42
42
  }
43
43
 
44
- export function around<R, E, A, R1>(before: IO<R, E, A>, after: (a: A) => IO<R1, never, any>): TestAspect<R & R1, E> {
45
- return perTest<R & R1, E>((test) =>
44
+ export function around<R, E, A, R1>(before: IO<R, E, A>, after: (a: A) => IO<R1, never, any>): TestAspect<R | R1, E> {
45
+ return perTest<R | R1, E>((test) =>
46
46
  before.catchAllCause((c) => IO.fail(new RuntimeFailure(c))).bracket(() => test, after),
47
47
  );
48
48
  }
@@ -50,9 +50,9 @@ export function around<R, E, A, R1>(before: IO<R, E, A>, after: (a: A) => IO<R1,
50
50
  export function aroundAll<R, E, A, R1>(
51
51
  before: IO<R, E, A>,
52
52
  after: (a: A) => IO<R1, never, any>,
53
- ): TestAspect<R & R1, E> {
53
+ ): TestAspect<R | R1, E> {
54
54
  return <R0, E0>(spec: Spec<R0, E0>) =>
55
- Spec.scoped<R & R1 & R0, TestFailure<E | E0>, TestSuccess>(
55
+ Spec.scoped<R | R1 | R0, TestFailure<E | E0>, TestSuccess>(
56
56
  IO.acquireRelease(before, after)
57
57
  .mapError((e) => TestFailure.fail(e))
58
58
  .as(spec),
@@ -69,12 +69,10 @@ export function beforeAll<R0, E0>(effect: IO<R0, E0, any>): TestAspect<R0, E0> {
69
69
 
70
70
  export const eventually = perTest((test) => test.eventually);
71
71
 
72
- export function repeat<R0>(schedule: Schedule<R0, TestSuccess, any>): TestAspect<R0 & Has<Annotations>, never> {
73
- return perTest<R0 & Has<Annotations>, never>(
74
- <R1, E1>(
75
- test: IO<R1, TestFailure<E1>, TestSuccess>,
76
- ): IO<R0 & R1 & Has<Annotations>, TestFailure<E1>, TestSuccess> =>
77
- IO.environmentWithIO((r: Environment<R0 & R1 & Has<Annotations>>) =>
72
+ export function repeat<R0>(schedule: Schedule<R0, TestSuccess, any>): TestAspect<R0 & Annotations, never> {
73
+ return perTest<R0 | Annotations, never>(
74
+ <R1, E1>(test: IO<R1, TestFailure<E1>, TestSuccess>): IO<R0 | R1 | Annotations, TestFailure<E1>, TestSuccess> =>
75
+ IO.environmentWithIO((r: Environment<R0 | R1 | Annotations>) =>
78
76
  test
79
77
  .provideEnvironment(r)
80
78
  .repeat(
@@ -88,9 +86,9 @@ export function repeat<R0>(schedule: Schedule<R0, TestSuccess, any>): TestAspect
88
86
  );
89
87
  }
90
88
 
91
- export function timeoutWarning(duration: Duration): TestAspect<Has<Live>, any> {
89
+ export function timeoutWarning(duration: Duration): TestAspect<Live, any> {
92
90
  return <R1, E1>(spec: Spec<R1, E1>) => {
93
- const loop = (labels: Vector<string>, spec: Spec<R1, E1>): Spec<R1 & Has<Live>, E1> =>
91
+ const loop = (labels: Vector<string>, spec: Spec<R1, E1>): Spec<R1 | Live, E1> =>
94
92
  matchTag_(spec.caseValue, {
95
93
  Exec: ({ exec, spec }) => Spec.exec(loop(labels, spec), exec),
96
94
  Labeled: ({ label, spec }) => Spec.labeled(loop(labels.append(label), spec), label),
@@ -1,3 +1,3 @@
1
1
  import type { Spec } from "@fncts/test/control/Spec";
2
2
 
3
- export type TestAspect<R, E> = <R1, E1>(spec: Spec<R1, E1>) => Spec<R & R1, E | E1>;
3
+ export type TestAspect<R, E> = <R1, E1>(spec: Spec<R1, E1>) => Spec<R | R1, E | E1>;
@@ -6,17 +6,17 @@ import { Data, Start, TestClock } from "@fncts/test/control/TestClock/definition
6
6
  /**
7
7
  * @tsplus static fncts.test.TestClockOps make
8
8
  */
9
- export function make(data: Data): Layer<Has<Live> & Has<Annotations>, never, Has<TestClock>> {
9
+ export function make(data: Data): Layer<Live | Annotations, never, TestClock> {
10
10
  return Layer.scoped(
11
- IO.gen(function* (_) {
12
- const live = yield* _(IO.service(Live.Tag));
13
- const annotations = yield* _(IO.service(Annotations.Tag));
14
- const ref = yield* _(Ref.make(data));
15
- const synchronized = yield* _(Ref.Synchronized.make(Start));
16
- const test = yield* _(
11
+ Do((_) => {
12
+ const live = _(IO.service(Live.Tag));
13
+ const annotations = _(IO.service(Annotations.Tag));
14
+ const ref = _(Ref.make(data));
15
+ const synchronized = _(Ref.Synchronized.make(Start));
16
+ const test = _(
17
17
  IO.acquireRelease(IO.succeed(new TestClock(ref, live, annotations, synchronized)), (tc) => tc.warningDone),
18
18
  );
19
- yield* _(IOEnv.services.locallyScopedWith((_) => _.add(test, TestClock.Tag)));
19
+ _(IOEnv.services.locallyScopedWith((_) => _.add(test, TestClock.Tag)));
20
20
  return test;
21
21
  }),
22
22
  TestClock.Tag,
@@ -26,11 +26,11 @@ export function make(data: Data): Layer<Has<Live> & Has<Annotations>, never, Has
26
26
  /**
27
27
  * @tsplus static fncts.test.TestClockOps Live
28
28
  */
29
- export const live: Layer<Has<Live> & Has<Annotations>, never, Has<TestClock>> = TestClock.make(new Data(0, Nil()));
29
+ export const live: Layer<Live | Annotations, never, TestClock> = TestClock.make(new Data(0, Nil()));
30
30
 
31
31
  /**
32
32
  * @tsplus static fncts.test.TestClockOps adjust
33
33
  */
34
- export function adjust(duration: number): IO<Has<TestClock>, never, void> {
34
+ export function adjust(duration: number): IO<TestClock, never, void> {
35
35
  return IO.serviceWithIO((service: TestClock) => service.adjust(duration), TestClock.Tag);
36
36
  }
@@ -114,7 +114,7 @@ export class TestClock extends Clock {
114
114
  );
115
115
  }
116
116
 
117
- private get freeze(): IO<unknown, void, HashMap<FiberId, FiberStatus>> {
117
+ private get freeze(): IO<never, void, HashMap<FiberId, FiberStatus>> {
118
118
  return this.supervizedFibers.flatMap((fibers) =>
119
119
  IO.foldLeft(fibers, HashMap.makeDefault<FiberId, FiberStatus>(), (map, fiber) =>
120
120
  fiber.status.flatMap((status) => {
@@ -166,7 +166,7 @@ export class TestClock extends Clock {
166
166
  );
167
167
  }
168
168
 
169
- private get suspended(): IO<unknown, void, HashMap<FiberId, FiberStatus>> {
169
+ private get suspended(): IO<never, void, HashMap<FiberId, FiberStatus>> {
170
170
  return this.freeze.zip(this.delay > this.freeze).flatMap(([first, last]) => {
171
171
  if (Equatable.strictEquals(first, last)) {
172
172
  return IO.succeedNow(first);
@@ -190,7 +190,7 @@ export class TestClock extends Clock {
190
190
  Start: () =>
191
191
  Just(this.live.provide(Clock.sleep((5).seconds) > Console.print(warning)).interruptible.fork.map(Pending)),
192
192
  },
193
- () => Nothing<IO<unknown, never, WarningData>>(),
193
+ () => Nothing<IO<never, never, WarningData>>(),
194
194
  ),
195
195
  );
196
196
  }