@typed/fx 1.0.14 → 1.0.16

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 (152) hide show
  1. package/dist/Fx.d.ts +6 -0
  2. package/dist/Fx.d.ts.map +1 -1
  3. package/dist/Fx.js.map +1 -1
  4. package/dist/Subject/HoldSubject.d.ts +1 -1
  5. package/dist/Subject/HoldSubject.d.ts.map +1 -1
  6. package/dist/Subject/HoldSubject.js +1 -1
  7. package/dist/Subject/HoldSubject.js.map +1 -1
  8. package/dist/Subject/RefSubject.js +2 -2
  9. package/dist/Subject/RefSubject.js.map +1 -1
  10. package/dist/Subject/SynchronizedSubject.js +2 -2
  11. package/dist/Subject/SynchronizedSubject.js.map +1 -1
  12. package/dist/_internal/RefCounter.js +1 -1
  13. package/dist/_internal/RefCounter.js.map +1 -1
  14. package/dist/constructor/at.d.ts +1 -1
  15. package/dist/constructor/at.d.ts.map +1 -1
  16. package/dist/constructor/periodic.d.ts +1 -1
  17. package/dist/constructor/periodic.d.ts.map +1 -1
  18. package/dist/constructor/service.d.ts +1 -1
  19. package/dist/constructor/service.d.ts.map +1 -1
  20. package/dist/constructor/serviceWith.d.ts +1 -1
  21. package/dist/constructor/serviceWith.d.ts.map +1 -1
  22. package/dist/constructor/serviceWithEffect.d.ts +1 -1
  23. package/dist/constructor/serviceWithEffect.d.ts.map +1 -1
  24. package/dist/constructor/serviceWithFx.d.ts +1 -1
  25. package/dist/constructor/serviceWithFx.d.ts.map +1 -1
  26. package/dist/operator/catchTag.d.ts +20 -0
  27. package/dist/operator/catchTag.d.ts.map +1 -0
  28. package/dist/operator/catchTag.js +14 -0
  29. package/dist/operator/catchTag.js.map +1 -0
  30. package/dist/operator/contramapContext.d.ts +1 -1
  31. package/dist/operator/contramapContext.d.ts.map +1 -1
  32. package/dist/operator/contramapContext.js +1 -1
  33. package/dist/operator/contramapContext.js.map +1 -1
  34. package/dist/operator/debounce.d.ts +1 -1
  35. package/dist/operator/debounce.d.ts.map +1 -1
  36. package/dist/operator/delay.d.ts +1 -1
  37. package/dist/operator/delay.d.ts.map +1 -1
  38. package/dist/operator/exhaustMap.d.ts +3 -2
  39. package/dist/operator/exhaustMap.d.ts.map +1 -1
  40. package/dist/operator/exhaustMap.js +2 -4
  41. package/dist/operator/exhaustMap.js.map +1 -1
  42. package/dist/operator/flatMap.d.ts +3 -1
  43. package/dist/operator/flatMap.d.ts.map +1 -1
  44. package/dist/operator/flatMap.js +2 -4
  45. package/dist/operator/flatMap.js.map +1 -1
  46. package/dist/operator/hold.d.ts +1 -1
  47. package/dist/operator/hold.d.ts.map +1 -1
  48. package/dist/operator/hold.js +1 -1
  49. package/dist/operator/hold.js.map +1 -1
  50. package/dist/operator/index.d.ts +1 -0
  51. package/dist/operator/index.d.ts.map +1 -1
  52. package/dist/operator/index.js +1 -0
  53. package/dist/operator/index.js.map +1 -1
  54. package/dist/operator/map.d.ts +4 -1
  55. package/dist/operator/map.d.ts.map +1 -1
  56. package/dist/operator/map.js +2 -3
  57. package/dist/operator/map.js.map +1 -1
  58. package/dist/operator/multicast.d.ts +1 -1
  59. package/dist/operator/multicast.d.ts.map +1 -1
  60. package/dist/operator/onInterrupt.d.ts +1 -1
  61. package/dist/operator/onInterrupt.d.ts.map +1 -1
  62. package/dist/operator/provideContext.d.ts +1 -1
  63. package/dist/operator/provideContext.d.ts.map +1 -1
  64. package/dist/operator/provideContext.js +1 -1
  65. package/dist/operator/provideContext.js.map +1 -1
  66. package/dist/operator/provideService.d.ts +1 -1
  67. package/dist/operator/provideService.d.ts.map +1 -1
  68. package/dist/operator/provideServiceEffect.d.ts +1 -1
  69. package/dist/operator/provideServiceEffect.d.ts.map +1 -1
  70. package/dist/operator/skipRepeats.js +1 -1
  71. package/dist/operator/skipRepeats.js.map +1 -1
  72. package/dist/operator/switchMap.d.ts +3 -1
  73. package/dist/operator/switchMap.d.ts.map +1 -1
  74. package/dist/operator/switchMap.js +2 -4
  75. package/dist/operator/switchMap.js.map +1 -1
  76. package/dist/operator/switchMapCause.d.ts +7 -0
  77. package/dist/operator/switchMapCause.d.ts.map +1 -1
  78. package/dist/operator/switchMapCause.js +4 -0
  79. package/dist/operator/switchMapCause.js.map +1 -1
  80. package/dist/operator/throttle.d.ts +1 -1
  81. package/dist/operator/throttle.d.ts.map +1 -1
  82. package/dist/typeclass/Bicovariant.d.ts +1 -0
  83. package/dist/typeclass/Bicovariant.d.ts.map +1 -1
  84. package/dist/typeclass/Bicovariant.js +3 -2
  85. package/dist/typeclass/Bicovariant.js.map +1 -1
  86. package/dist/typeclass/Covariant.d.ts.map +1 -1
  87. package/dist/typeclass/Covariant.js +4 -1
  88. package/dist/typeclass/Covariant.js.map +1 -1
  89. package/dist/typeclass/SemiProduct.d.ts +3 -0
  90. package/dist/typeclass/SemiProduct.d.ts.map +1 -1
  91. package/dist/typeclass/SemiProduct.js +5 -2
  92. package/dist/typeclass/SemiProduct.js.map +1 -1
  93. package/package.json +5 -5
  94. package/src/Fx.ts +6 -0
  95. package/src/Subject/HoldSubject.test.ts +1 -1
  96. package/src/Subject/HoldSubject.ts +1 -1
  97. package/src/Subject/RefSubject.ts +2 -2
  98. package/src/Subject/SynchronizedSubject.ts +2 -2
  99. package/src/_internal/RefCounter.ts +1 -1
  100. package/src/constructor/at.ts +1 -1
  101. package/src/constructor/periodic.ts +1 -1
  102. package/src/constructor/service.ts +1 -1
  103. package/src/constructor/serviceWith.ts +1 -1
  104. package/src/constructor/serviceWithEffect.ts +1 -1
  105. package/src/constructor/serviceWithFx.ts +1 -1
  106. package/src/operator/catchTag.ts +56 -0
  107. package/src/operator/combine.test.ts +1 -1
  108. package/src/operator/concatMap.test.ts +1 -1
  109. package/src/operator/contramapContext.ts +1 -1
  110. package/src/operator/debounce.test.ts +1 -1
  111. package/src/operator/debounce.ts +1 -1
  112. package/src/operator/delay.ts +1 -1
  113. package/src/operator/exhaustMap.test.ts +1 -1
  114. package/src/operator/exhaustMap.ts +7 -4
  115. package/src/operator/exhaustMapLatest.test.ts +1 -1
  116. package/src/operator/flatMap.test.ts +1 -1
  117. package/src/operator/flatMap.ts +7 -6
  118. package/src/operator/flatMapConcurrently.test.ts +1 -1
  119. package/src/operator/hold.test.ts +1 -1
  120. package/src/operator/hold.ts +1 -1
  121. package/src/operator/index.ts +1 -0
  122. package/src/operator/map.ts +6 -3
  123. package/src/operator/merge.test.ts +1 -1
  124. package/src/operator/mergeRace.test.ts +1 -1
  125. package/src/operator/multicast.test.ts +1 -1
  126. package/src/operator/multicast.ts +1 -1
  127. package/src/operator/onInterrupt.ts +1 -1
  128. package/src/operator/provideContext.ts +1 -1
  129. package/src/operator/provideService.test.ts +1 -1
  130. package/src/operator/provideService.ts +1 -1
  131. package/src/operator/provideServiceEffect.test.ts +1 -1
  132. package/src/operator/provideServiceEffect.ts +1 -1
  133. package/src/operator/race.test.ts +1 -1
  134. package/src/operator/race.ts +1 -1
  135. package/src/operator/scanEffect.test.ts +1 -1
  136. package/src/operator/separate.test.ts +1 -1
  137. package/src/operator/skipRepeats.ts +1 -1
  138. package/src/operator/snapshot.test.ts +1 -1
  139. package/src/operator/snapshotEffect.test.ts +1 -1
  140. package/src/operator/struct.test.ts +1 -1
  141. package/src/operator/switchMap.test.ts +1 -1
  142. package/src/operator/switchMap.ts +7 -6
  143. package/src/operator/switchMapCause.test.ts +1 -1
  144. package/src/operator/switchMapCause.ts +15 -0
  145. package/src/operator/switchMatch.test.ts +1 -1
  146. package/src/operator/throttle.test.ts +1 -1
  147. package/src/operator/throttle.ts +1 -1
  148. package/src/operator/zip.test.ts +1 -1
  149. package/src/typeclass/Bicovariant.ts +8 -2
  150. package/src/typeclass/Covariant.ts +4 -1
  151. package/src/typeclass/SemiProduct.ts +11 -5
  152. package/tsconfig.build.tsbuildinfo +1 -1
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import * as Duration from '@fp-ts/data/Duration'
5
+ import * as Duration from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { fromIterable } from '../constructor/fromIterable.js'
@@ -2,14 +2,17 @@ import * as Cause from '@effect/io/Cause'
2
2
  import * as Effect from '@effect/io/Effect'
3
3
  import type * as Fiber from '@effect/io/Fiber'
4
4
  import * as Ref from '@effect/io/Ref/Synchronized'
5
- import { pipe } from '@fp-ts/core/Function'
5
+ import { dual, pipe } from '@fp-ts/core/Function'
6
+ import type { FlatMap } from '@fp-ts/core/typeclass/FlatMap'
6
7
 
7
8
  import { Fx } from '../Fx.js'
8
9
  import { withRefCounter } from '../_internal/RefCounter.js'
10
+ import type { FxTypeLambda } from '../typeclass/TypeLambda.js'
9
11
 
10
- export function exhaustMap<A, R2, E2, B>(f: (a: A) => Fx<R2, E2, B>) {
11
- return <R, E>(fx: Fx<R, E, A>): Fx<R | R2, E | E2, B> => new ExhaustMapFx(fx, f)
12
- }
12
+ export const exhaustMap: FlatMap<FxTypeLambda>['flatMap'] = dual(
13
+ 2,
14
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Fx<R2, E2, B>) => new ExhaustMapFx(fx, f),
15
+ )
13
16
 
14
17
  class ExhaustMapFx<R, E, A, R2, E2, B>
15
18
  extends Fx.Variance<R | R2, E | E2, B>
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import * as Duration from '@fp-ts/data/Duration'
5
+ import * as Duration from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { fromIterable } from '../constructor/fromIterable.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -1,15 +1,16 @@
1
1
  import * as Cause from '@effect/io/Cause'
2
2
  import * as Effect from '@effect/io/Effect'
3
- import { identity, pipe } from '@fp-ts/core/Function'
3
+ import { dual, identity, pipe } from '@fp-ts/core/Function'
4
+ import type { FlatMap } from '@fp-ts/core/typeclass/FlatMap'
4
5
 
5
6
  import { Fx } from '../Fx.js'
6
7
  import { withRefCounter } from '../_internal/RefCounter.js'
8
+ import type { FxTypeLambda } from '../index.js'
7
9
 
8
- export function flatMap<A, R2, E2, B>(
9
- f: (a: A) => Fx<R2, E2, B>,
10
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B> {
11
- return (fx) => new FlatMapFx(fx, f)
12
- }
10
+ export const flatMap: FlatMap<FxTypeLambda>['flatMap'] = dual(
11
+ 2,
12
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Fx<R2, E2, B>) => new FlatMapFx(fx, f),
13
+ )
13
14
 
14
15
  export const flatten: <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => Fx<R | R2, E | E2, A> =
15
16
  flatMap(identity)
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import * as Fiber from '@effect/io/Fiber'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -4,7 +4,7 @@ import * as Fiber from '@effect/io/Fiber'
4
4
  import type { Scope } from '@effect/io/Scope'
5
5
  import { pipe } from '@fp-ts/core/Function'
6
6
  import * as Option from '@fp-ts/core/Option'
7
- import * as MutableRef from '@fp-ts/data/MutableRef'
7
+ import * as MutableRef from '@effect/data/MutableRef'
8
8
 
9
9
  import type { Fx } from '../Fx.js'
10
10
  import { asap } from '../_internal/RefCounter.js'
@@ -3,6 +3,7 @@ export * from './asUnit.js'
3
3
  export * from './catchAll.js'
4
4
  export * from './catchAllCause.js'
5
5
  export * from './catchAllDefect.js'
6
+ export * from './catchTag.js'
6
7
  export * from './combine.js'
7
8
  export * from './compact.js'
8
9
  export * from './concatMap.js'
@@ -1,8 +1,11 @@
1
+ import { dual } from '@fp-ts/core/Function'
2
+
1
3
  import { Fx } from '../Fx.js'
2
4
 
3
- export function map<A, B>(f: (a: A) => B) {
4
- return <R, E>(fx: Fx<R, E, A>): Fx<R, E, B> => new MapFx(fx, f)
5
- }
5
+ export const map: {
6
+ <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B): Fx<R, E, B>
7
+ <A, B>(f: (a: A) => B): <R, E>(fx: Fx<R, E, A>) => Fx<R, E, B>
8
+ } = dual(2, <R, E, A, B>(fx: Fx<R, E, A>, f: (a: A) => B) => new MapFx(fx, f))
6
9
 
7
10
  class MapFx<R, E, A, B> extends Fx.Variance<R, E, B> implements Fx<R, E, B> {
8
11
  constructor(readonly fx: Fx<R, E, A>, readonly f: (a: A) => B) {
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -3,7 +3,7 @@ import { deepStrictEqual } from 'assert'
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import * as Fiber from '@effect/io/Fiber'
5
5
  import { pipe } from '@fp-ts/core/Function'
6
- import { millis } from '@fp-ts/data/Duration'
6
+ import { millis } from '@effect/data/Duration'
7
7
  import { describe, it } from 'vitest'
8
8
 
9
9
  import { fromIterable } from '../constructor/fromIterable.js'
@@ -5,7 +5,7 @@ import * as Fiber from '@effect/io/Fiber'
5
5
  import type { RuntimeFiber } from '@effect/io/Fiber'
6
6
  import type { Scope } from '@effect/io/Scope'
7
7
  import { pipe } from '@fp-ts/core/Function'
8
- import type { Context } from '@fp-ts/data/Context'
8
+ import type { Context } from '@effect/data/Context'
9
9
 
10
10
  import { Fx } from '../Fx.js'
11
11
  import { asap } from '../_internal/RefCounter.js'
@@ -1,7 +1,7 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import type { FiberId } from '@effect/io/Fiber/Id'
3
3
  import { flow, pipe } from '@fp-ts/core/Function'
4
- import type { HashSet } from '@fp-ts/data/HashSet'
4
+ import type { HashSet } from '@effect/data/HashSet'
5
5
 
6
6
  import { Fx } from '../Fx.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import type { Scope } from '@effect/io/Scope'
3
3
  import { pipe } from '@fp-ts/core/Function'
4
- import * as Context from '@fp-ts/data/Context'
4
+ import * as Context from '@effect/data/Context'
5
5
 
6
6
  import { Fx } from '../Fx.js'
7
7
 
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { Tag } from '@fp-ts/data/Context'
5
+ import { Tag } from '@effect/data/Context'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { serviceWith } from '../constructor/serviceWith.js'
@@ -1,6 +1,6 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import { pipe } from '@fp-ts/core/Function'
3
- import type * as Context from '@fp-ts/data/Context'
3
+ import type * as Context from '@effect/data/Context'
4
4
 
5
5
  import { Fx } from '../Fx.js'
6
6
 
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { Tag } from '@fp-ts/data/Context'
5
+ import { Tag } from '@effect/data/Context'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { serviceWith } from '../constructor/serviceWith.js'
@@ -1,7 +1,7 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import type { Scope } from '@effect/io/Scope'
3
3
  import { pipe } from '@fp-ts/core/Function'
4
- import type * as Context from '@fp-ts/data/Context'
4
+ import type * as Context from '@effect/data/Context'
5
5
 
6
6
  import { Fx } from '../Fx.js'
7
7
 
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -4,7 +4,7 @@ import * as ExecutionStrategy from '@effect/io/ExecutionStrategy'
4
4
  import * as Exit from '@effect/io/Exit'
5
5
  import * as Scope from '@effect/io/Scope'
6
6
  import { pipe } from '@fp-ts/core/Function'
7
- import type { Chunk } from '@fp-ts/data/Chunk'
7
+ import type { Chunk } from '@effect/data/Chunk'
8
8
 
9
9
  import { Fx } from '../Fx.js'
10
10
  import { asap } from '../_internal/RefCounter.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { fromArray } from '../constructor/fromArray.js'
@@ -3,7 +3,7 @@ import { deepStrictEqual } from 'assert'
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import * as Fiber from '@effect/io/Fiber'
5
5
  import * as Either from '@fp-ts/core/Either'
6
- import { millis } from '@fp-ts/data/Duration'
6
+ import { millis } from '@effect/data/Duration'
7
7
  import { describe, it } from 'vitest'
8
8
 
9
9
  import { at } from '../constructor/at.js'
@@ -1,7 +1,7 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import { pipe } from '@fp-ts/core/Function'
3
3
  import * as Option from '@fp-ts/core/Option'
4
- import { equals } from '@fp-ts/data/Equal'
4
+ import { equals } from '@effect/data/Equal'
5
5
 
6
6
  import { Fx } from '../Fx.js'
7
7
 
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { periodic } from '../constructor/periodic.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,16 +2,17 @@ import * as Cause from '@effect/io/Cause'
2
2
  import * as Effect from '@effect/io/Effect'
3
3
  import * as Fiber from '@effect/io/Fiber'
4
4
  import * as Ref from '@effect/io/Ref/Synchronized'
5
- import { flow, pipe, identity } from '@fp-ts/core/Function'
5
+ import { flow, pipe, identity, dual } from '@fp-ts/core/Function'
6
+ import type { FlatMap } from '@fp-ts/core/typeclass/FlatMap'
6
7
 
7
8
  import { Fx } from '../Fx.js'
8
9
  import { withRefCounter } from '../_internal/RefCounter.js'
10
+ import type { FxTypeLambda } from '../typeclass/TypeLambda.js'
9
11
 
10
- export function switchMap<A, R2, E2, B>(
11
- f: (a: A) => Fx<R2, E2, B>,
12
- ): <R, E>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, B> {
13
- return (fx) => new SwitchMapFx(fx, f)
14
- }
12
+ export const switchMap: FlatMap<FxTypeLambda>['flatMap'] = dual(
13
+ 2,
14
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, f: (a: A) => Fx<R2, E2, B>) => new SwitchMapFx(fx, f),
15
+ )
15
16
 
16
17
  export const switchLatest: <R, E, R2, E2, A>(fx: Fx<R, E, Fx<R2, E2, A>>) => Fx<R | R2, E | E2, A> =
17
18
  switchMap(identity)
@@ -4,7 +4,7 @@ import * as Cause from '@effect/io/Cause'
4
4
  import * as Effect from '@effect/io/Effect'
5
5
  import * as Either from '@fp-ts/core/Either'
6
6
  import { flow, pipe } from '@fp-ts/core/Function'
7
- import { millis } from '@fp-ts/data/Duration'
7
+ import { millis } from '@effect/data/Duration'
8
8
  import { describe, it } from 'vitest'
9
9
 
10
10
  import { at } from '../constructor/at.js'
@@ -7,12 +7,27 @@ import { flow, pipe } from '@fp-ts/core/Function'
7
7
  import { Fx } from '../Fx.js'
8
8
  import { withRefCounter } from '../_internal/RefCounter.js'
9
9
 
10
+ import { catchTag_ } from './catchTag.js'
11
+
10
12
  export function switchMapCause<E, R2, E2, B>(
11
13
  f: (cause: Cause.Cause<E>) => Fx<R2, E2, B>,
12
14
  ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2, A | B> {
13
15
  return (fx) => new SwitchMapCauseFx(fx, f)
14
16
  }
15
17
 
18
+ export function switchMapCatchTag<
19
+ K extends E['_tag'] & string,
20
+ E extends { readonly _tag: string },
21
+ R2,
22
+ E2,
23
+ B,
24
+ >(
25
+ k: K,
26
+ f: (e: Extract<E, { readonly _tag: K }>) => Fx<R2, E2, B>,
27
+ ): <R, A>(fx: Fx<R, E, A>) => Fx<R | R2, E2 | Exclude<E, { readonly _tag: K }>, A | B> {
28
+ return (fx) => new SwitchMapCauseFx(fx, (cause) => catchTag_(cause, k, f))
29
+ }
30
+
16
31
  class SwitchMapCauseFx<R, E, A, R2, E2, B>
17
32
  extends Fx.Variance<R | R2, E2, A | B>
18
33
  implements Fx<R | R2, E2, A | B>
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import * as Duration from '@fp-ts/data/Duration'
5
+ import * as Duration from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { fromArray } from '../constructor/fromArray.js'
@@ -1,7 +1,7 @@
1
1
  import * as Effect from '@effect/io/Effect'
2
2
  import type * as Fiber from '@effect/io/Fiber'
3
3
  import { pipe } from '@fp-ts/core/Function'
4
- import type * as Duration from '@fp-ts/data/Duration'
4
+ import type * as Duration from '@effect/data/Duration'
5
5
 
6
6
  import type { Fx } from '../Fx.js'
7
7
  import { suspend } from '../constructor/suspend.js'
@@ -2,7 +2,7 @@ import { deepStrictEqual } from 'assert'
2
2
 
3
3
  import * as Effect from '@effect/io/Effect'
4
4
  import { pipe } from '@fp-ts/core/Function'
5
- import { millis } from '@fp-ts/data/Duration'
5
+ import { millis } from '@effect/data/Duration'
6
6
  import { describe, it } from 'vitest'
7
7
 
8
8
  import { at } from '../constructor/at.js'
@@ -1,4 +1,4 @@
1
- import { pipe } from '@fp-ts/core/Function'
1
+ import { dual, pipe } from '@fp-ts/core/Function'
2
2
  import * as B from '@fp-ts/core/typeclass/Bicovariant'
3
3
 
4
4
  import type { Fx } from '../Fx.js'
@@ -7,8 +7,14 @@ import { mapError } from '../operator/mapError.js'
7
7
 
8
8
  import type { FxTypeLambda } from './TypeLambda.js'
9
9
 
10
+ export const bimap: B.Bicovariant<FxTypeLambda>['bimap'] = dual(
11
+ 3,
12
+ <R, E, A, E2, B>(self: Fx<R, E, A>, f: (e: E) => E2, g: (a: A) => B) =>
13
+ pipe(self, mapError(f), map(g)),
14
+ )
15
+
10
16
  export const Bicovariant: B.Bicovariant<FxTypeLambda> = {
11
- bimap: (f, g) => (fa) => pipe(fa, mapError(f), map(g)),
17
+ bimap,
12
18
  }
13
19
 
14
20
  export const mapLeft: <E1, E2>(f: (e: E1) => E2) => <R, A>(self: Fx<R, E1, A>) => Fx<R, E2, A> =
@@ -5,7 +5,10 @@ import { map } from '../operator/map.js'
5
5
 
6
6
  import type { FxTypeLambda } from './TypeLambda.js'
7
7
 
8
- export const Covariant: C.Covariant<FxTypeLambda> = C.make((f) => map(f))
8
+ export const Covariant: C.Covariant<FxTypeLambda> = {
9
+ map,
10
+ imap: C.imap<FxTypeLambda>(map),
11
+ }
9
12
 
10
13
  export const flap: <A>(a: A) => <R, E, B>(self: Fx<R, E, (a: A) => B>) => Fx<R, E, B> =
11
14
  C.flap(Covariant)
@@ -1,15 +1,21 @@
1
+ import { dual } from '@fp-ts/core/Function'
1
2
  import * as SP from '@fp-ts/core/typeclass/SemiProduct'
2
3
 
4
+ import type { Fx } from '../Fx.js'
3
5
  import { combine } from '../operator/combine.js'
4
6
 
5
7
  import { Covariant } from './Covariant.js'
6
8
  import type { FxTypeLambda } from './TypeLambda.js'
7
9
 
10
+ export const product: SP.SemiProduct<FxTypeLambda>['product'] = dual(
11
+ 2,
12
+ <R, E, A, R2, E2, B>(self: Fx<R, E, A>, that: Fx<R2, E2, B>) => combine(that)(self),
13
+ )
14
+
15
+ export const productMany = SP.productMany<FxTypeLambda>(Covariant.map, product)
16
+
8
17
  export const SemiProduct: SP.SemiProduct<FxTypeLambda> = {
9
- product: ((s, o) => combine(o)(s)) as SP.SemiProduct<FxTypeLambda>['product'],
10
- productMany: SP.productMany<FxTypeLambda>(
11
- Covariant,
12
- (s, o) => combine(o)(s) as any,
13
- ) as SP.SemiProduct<FxTypeLambda>['productMany'],
18
+ product,
19
+ productMany,
14
20
  imap: Covariant.imap,
15
21
  }