@fncts/base 0.0.26 → 0.0.28

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 (301) hide show
  1. package/_cjs/collection/Iterable/api.cjs +3 -2
  2. package/_cjs/collection/Iterable/api.cjs.map +1 -1
  3. package/_cjs/collection/immutable/Conc/api.cjs +25 -12
  4. package/_cjs/collection/immutable/Conc/api.cjs.map +1 -1
  5. package/_cjs/collection/immutable/HashMap/api.cjs +20 -8
  6. package/_cjs/collection/immutable/HashMap/api.cjs.map +1 -1
  7. package/_cjs/collection/immutable/HashMap/definition.cjs +3 -2
  8. package/_cjs/collection/immutable/HashMap/definition.cjs.map +1 -1
  9. package/_cjs/collection/immutable/HashMap/internal.cjs +9 -7
  10. package/_cjs/collection/immutable/HashMap/internal.cjs.map +1 -1
  11. package/_cjs/collection/immutable/HashSet/api.cjs +7 -6
  12. package/_cjs/collection/immutable/HashSet/api.cjs.map +1 -1
  13. package/_cjs/collection/immutable/ImmutableArray/api.cjs +18 -17
  14. package/_cjs/collection/immutable/ImmutableArray/api.cjs.map +1 -1
  15. package/_cjs/collection/immutable/ImmutableNonEmptyArray/constructors.cjs +2 -1
  16. package/_cjs/collection/immutable/ImmutableNonEmptyArray/constructors.cjs.map +1 -1
  17. package/_cjs/collection/immutable/List/api.cjs +3 -2
  18. package/_cjs/collection/immutable/List/api.cjs.map +1 -1
  19. package/_cjs/collection/immutable/List/definition.cjs +19 -4
  20. package/_cjs/collection/immutable/List/definition.cjs.map +1 -1
  21. package/_cjs/collection/immutable/Queue/api.cjs +7 -6
  22. package/_cjs/collection/immutable/Queue/api.cjs.map +1 -1
  23. package/_cjs/collection/immutable/RoseTree/api.cjs +1 -1
  24. package/_cjs/collection/immutable/RoseTree/api.cjs.map +1 -1
  25. package/_cjs/collection/immutable/SortedMap/api.cjs +23 -22
  26. package/_cjs/collection/immutable/SortedMap/api.cjs.map +1 -1
  27. package/_cjs/collection/immutable/SortedMap/iterator.cjs +7 -6
  28. package/_cjs/collection/immutable/SortedMap/iterator.cjs.map +1 -1
  29. package/_cjs/collection/immutable/Vector/api.cjs +62 -19
  30. package/_cjs/collection/immutable/Vector/api.cjs.map +1 -1
  31. package/_cjs/collection/immutable/Vector/definition.cjs.map +1 -1
  32. package/_cjs/collection/mutable/HashMap.cjs +6 -19
  33. package/_cjs/collection/mutable/HashMap.cjs.map +1 -1
  34. package/_cjs/control/CompletablePromise.cjs +21 -0
  35. package/_cjs/control/CompletablePromise.cjs.map +1 -0
  36. package/_cjs/control/Z/api.cjs +1 -1
  37. package/_cjs/control/Z/api.cjs.map +1 -1
  38. package/_cjs/control/Z/runtime.cjs +2 -2
  39. package/_cjs/control/Z/runtime.cjs.map +1 -1
  40. package/_cjs/data/Branded/definition.cjs +4 -3
  41. package/_cjs/data/Branded/definition.cjs.map +1 -1
  42. package/_cjs/data/Cause/api/fold.cjs +8 -7
  43. package/_cjs/data/Cause/api/fold.cjs.map +1 -1
  44. package/_cjs/data/Cause/api.cjs +124 -128
  45. package/_cjs/data/Cause/api.cjs.map +1 -1
  46. package/_cjs/data/DatumEither/api.cjs +5 -4
  47. package/_cjs/data/DatumEither/api.cjs.map +1 -1
  48. package/_cjs/data/Decoder/api.cjs +2 -1
  49. package/_cjs/data/Decoder/api.cjs.map +1 -1
  50. package/_cjs/data/Either/api/alignWith.cjs +2 -1
  51. package/_cjs/data/Either/api/alignWith.cjs.map +1 -1
  52. package/_cjs/data/Either/api.cjs +25 -16
  53. package/_cjs/data/Either/api.cjs.map +1 -1
  54. package/_cjs/data/Either/constructors.cjs +10 -9
  55. package/_cjs/data/Either/constructors.cjs.map +1 -1
  56. package/_cjs/data/Either/definition.cjs +34 -6
  57. package/_cjs/data/Either/definition.cjs.map +1 -1
  58. package/_cjs/data/Either/instances.cjs +7 -6
  59. package/_cjs/data/Either/instances.cjs.map +1 -1
  60. package/_cjs/data/EitherT/api.cjs +4 -3
  61. package/_cjs/data/EitherT/api.cjs.map +1 -1
  62. package/_cjs/data/Eq/api.cjs +20 -0
  63. package/_cjs/data/Eq/api.cjs.map +1 -0
  64. package/_cjs/data/Eq.cjs +11 -0
  65. package/_cjs/data/Eq.cjs.map +1 -1
  66. package/_cjs/data/Equatable/api.cjs +39 -11
  67. package/_cjs/data/Equatable/api.cjs.map +1 -1
  68. package/_cjs/data/Equatable/definition.cjs +1 -1
  69. package/_cjs/data/Equatable/definition.cjs.map +1 -1
  70. package/_cjs/data/Exit/api.cjs +32 -6
  71. package/_cjs/data/Exit/api.cjs.map +1 -1
  72. package/_cjs/data/Exit/constructors.cjs +13 -12
  73. package/_cjs/data/Exit/constructors.cjs.map +1 -1
  74. package/_cjs/data/Exit/definition.cjs +11 -6
  75. package/_cjs/data/Exit/definition.cjs.map +1 -1
  76. package/_cjs/data/FiberId/api.cjs +16 -15
  77. package/_cjs/data/FiberId/api.cjs.map +1 -1
  78. package/_cjs/data/Interval.cjs +2 -1
  79. package/_cjs/data/Interval.cjs.map +1 -1
  80. package/_cjs/data/Maybe/api.cjs +8 -7
  81. package/_cjs/data/Maybe/api.cjs.map +1 -1
  82. package/_cjs/data/Maybe/constructors.cjs +11 -11
  83. package/_cjs/data/Maybe/constructors.cjs.map +1 -1
  84. package/_cjs/data/Maybe/definition.cjs +10 -5
  85. package/_cjs/data/Maybe/definition.cjs.map +1 -1
  86. package/_cjs/data/Maybe/instances.cjs +30 -8
  87. package/_cjs/data/Maybe/instances.cjs.map +1 -1
  88. package/_cjs/data/Showable/show.cjs +2 -2
  89. package/_cjs/data/Showable/show.cjs.map +1 -1
  90. package/_cjs/data/These/destructors.cjs +3 -2
  91. package/_cjs/data/These/destructors.cjs.map +1 -1
  92. package/_cjs/data/exceptions/IOError.cjs +25 -0
  93. package/_cjs/data/exceptions/IOError.cjs.map +1 -0
  94. package/_cjs/data/exceptions/NoSuchElementError.cjs.map +1 -1
  95. package/_cjs/data/exceptions.cjs +11 -0
  96. package/_cjs/data/exceptions.cjs.map +1 -1
  97. package/_cjs/optics/Lens/definition.cjs +2 -1
  98. package/_cjs/optics/Lens/definition.cjs.map +1 -1
  99. package/_cjs/optics/Prism/api/just.cjs +2 -1
  100. package/_cjs/optics/Prism/api/just.cjs.map +1 -1
  101. package/_cjs/typeclass/ApplicativeExcept.cjs +2 -1
  102. package/_cjs/typeclass/ApplicativeExcept.cjs.map +1 -1
  103. package/_cjs/typeclass/Semialign.cjs +2 -1
  104. package/_cjs/typeclass/Semialign.cjs.map +1 -1
  105. package/_cjs/typeclass/Witherable.cjs +2 -1
  106. package/_cjs/typeclass/Witherable.cjs.map +1 -1
  107. package/_cjs/typeclass/WitherableWithIndex.cjs +2 -1
  108. package/_cjs/typeclass/WitherableWithIndex.cjs.map +1 -1
  109. package/_cjs/typeclass.cjs +2 -2
  110. package/_cjs/types.cjs +0 -11
  111. package/_cjs/types.cjs.map +1 -1
  112. package/_cjs/util/predicates.cjs +4 -0
  113. package/_cjs/util/predicates.cjs.map +1 -1
  114. package/_cjs/util/rand/Random.cjs.map +1 -1
  115. package/_mjs/collection/Iterable/api.mjs +3 -2
  116. package/_mjs/collection/Iterable/api.mjs.map +1 -1
  117. package/_mjs/collection/immutable/Conc/api.mjs +24 -12
  118. package/_mjs/collection/immutable/Conc/api.mjs.map +1 -1
  119. package/_mjs/collection/immutable/HashMap/api.mjs +19 -8
  120. package/_mjs/collection/immutable/HashMap/api.mjs.map +1 -1
  121. package/_mjs/collection/immutable/HashMap/definition.mjs +3 -2
  122. package/_mjs/collection/immutable/HashMap/definition.mjs.map +1 -1
  123. package/_mjs/collection/immutable/HashMap/internal.mjs +8 -7
  124. package/_mjs/collection/immutable/HashMap/internal.mjs.map +1 -1
  125. package/_mjs/collection/immutable/HashSet/api.mjs +7 -6
  126. package/_mjs/collection/immutable/HashSet/api.mjs.map +1 -1
  127. package/_mjs/collection/immutable/ImmutableArray/api.mjs +18 -17
  128. package/_mjs/collection/immutable/ImmutableArray/api.mjs.map +1 -1
  129. package/_mjs/collection/immutable/ImmutableNonEmptyArray/constructors.mjs +2 -1
  130. package/_mjs/collection/immutable/ImmutableNonEmptyArray/constructors.mjs.map +1 -1
  131. package/_mjs/collection/immutable/List/api.mjs +3 -2
  132. package/_mjs/collection/immutable/List/api.mjs.map +1 -1
  133. package/_mjs/collection/immutable/List/definition.mjs +13 -2
  134. package/_mjs/collection/immutable/List/definition.mjs.map +1 -1
  135. package/_mjs/collection/immutable/Queue/api.mjs +7 -6
  136. package/_mjs/collection/immutable/Queue/api.mjs.map +1 -1
  137. package/_mjs/collection/immutable/RoseTree/api.mjs +1 -1
  138. package/_mjs/collection/immutable/RoseTree/api.mjs.map +1 -1
  139. package/_mjs/collection/immutable/SortedMap/api.mjs +23 -22
  140. package/_mjs/collection/immutable/SortedMap/api.mjs.map +1 -1
  141. package/_mjs/collection/immutable/SortedMap/iterator.mjs +7 -6
  142. package/_mjs/collection/immutable/SortedMap/iterator.mjs.map +1 -1
  143. package/_mjs/collection/immutable/Vector/api.mjs +54 -16
  144. package/_mjs/collection/immutable/Vector/api.mjs.map +1 -1
  145. package/_mjs/collection/immutable/Vector/definition.mjs.map +1 -1
  146. package/_mjs/collection/mutable/HashMap.mjs +6 -5
  147. package/_mjs/collection/mutable/HashMap.mjs.map +1 -1
  148. package/_mjs/control/CompletablePromise.mjs +15 -0
  149. package/_mjs/control/CompletablePromise.mjs.map +1 -0
  150. package/_mjs/control/Z/api.mjs +1 -1
  151. package/_mjs/control/Z/api.mjs.map +1 -1
  152. package/_mjs/control/Z/runtime.mjs +2 -2
  153. package/_mjs/control/Z/runtime.mjs.map +1 -1
  154. package/_mjs/data/Branded/definition.mjs +4 -3
  155. package/_mjs/data/Branded/definition.mjs.map +1 -1
  156. package/_mjs/data/Cause/api/fold.mjs +8 -7
  157. package/_mjs/data/Cause/api/fold.mjs.map +1 -1
  158. package/_mjs/data/Cause/api.mjs +123 -127
  159. package/_mjs/data/Cause/api.mjs.map +1 -1
  160. package/_mjs/data/DatumEither/api.mjs +5 -4
  161. package/_mjs/data/DatumEither/api.mjs.map +1 -1
  162. package/_mjs/data/Decoder/api.mjs +2 -1
  163. package/_mjs/data/Decoder/api.mjs.map +1 -1
  164. package/_mjs/data/Either/api/alignWith.mjs +2 -1
  165. package/_mjs/data/Either/api/alignWith.mjs.map +1 -1
  166. package/_mjs/data/Either/api.mjs +22 -15
  167. package/_mjs/data/Either/api.mjs.map +1 -1
  168. package/_mjs/data/Either/constructors.mjs +10 -9
  169. package/_mjs/data/Either/constructors.mjs.map +1 -1
  170. package/_mjs/data/Either/definition.mjs +30 -4
  171. package/_mjs/data/Either/definition.mjs.map +1 -1
  172. package/_mjs/data/Either/instances.mjs +7 -6
  173. package/_mjs/data/Either/instances.mjs.map +1 -1
  174. package/_mjs/data/EitherT/api.mjs +4 -3
  175. package/_mjs/data/EitherT/api.mjs.map +1 -1
  176. package/_mjs/data/Eq/api.mjs +12 -0
  177. package/_mjs/data/Eq/api.mjs.map +1 -0
  178. package/_mjs/data/Eq.mjs +1 -0
  179. package/_mjs/data/Eq.mjs.map +1 -1
  180. package/_mjs/data/Equatable/api.mjs +35 -8
  181. package/_mjs/data/Equatable/api.mjs.map +1 -1
  182. package/_mjs/data/Equatable/definition.mjs +1 -1
  183. package/_mjs/data/Equatable/definition.mjs.map +1 -1
  184. package/_mjs/data/Exit/api.mjs +30 -6
  185. package/_mjs/data/Exit/api.mjs.map +1 -1
  186. package/_mjs/data/Exit/constructors.mjs +13 -12
  187. package/_mjs/data/Exit/constructors.mjs.map +1 -1
  188. package/_mjs/data/Exit/definition.mjs +11 -6
  189. package/_mjs/data/Exit/definition.mjs.map +1 -1
  190. package/_mjs/data/FiberId/api.mjs +16 -15
  191. package/_mjs/data/FiberId/api.mjs.map +1 -1
  192. package/_mjs/data/Interval.mjs +2 -1
  193. package/_mjs/data/Interval.mjs.map +1 -1
  194. package/_mjs/data/Maybe/api.mjs +8 -7
  195. package/_mjs/data/Maybe/api.mjs.map +1 -1
  196. package/_mjs/data/Maybe/constructors.mjs +11 -11
  197. package/_mjs/data/Maybe/constructors.mjs.map +1 -1
  198. package/_mjs/data/Maybe/definition.mjs +10 -5
  199. package/_mjs/data/Maybe/definition.mjs.map +1 -1
  200. package/_mjs/data/Maybe/instances.mjs +30 -8
  201. package/_mjs/data/Maybe/instances.mjs.map +1 -1
  202. package/_mjs/data/Showable/show.mjs +2 -2
  203. package/_mjs/data/Showable/show.mjs.map +1 -1
  204. package/_mjs/data/These/destructors.mjs +3 -2
  205. package/_mjs/data/These/destructors.mjs.map +1 -1
  206. package/_mjs/data/exceptions/IOError.mjs +14 -0
  207. package/_mjs/data/exceptions/IOError.mjs.map +1 -0
  208. package/_mjs/data/exceptions/NoSuchElementError.mjs.map +1 -1
  209. package/_mjs/data/exceptions.mjs +1 -0
  210. package/_mjs/data/exceptions.mjs.map +1 -1
  211. package/_mjs/optics/Lens/definition.mjs +2 -1
  212. package/_mjs/optics/Lens/definition.mjs.map +1 -1
  213. package/_mjs/optics/Prism/api/just.mjs +2 -1
  214. package/_mjs/optics/Prism/api/just.mjs.map +1 -1
  215. package/_mjs/typeclass/ApplicativeExcept.mjs +2 -1
  216. package/_mjs/typeclass/ApplicativeExcept.mjs.map +1 -1
  217. package/_mjs/typeclass/Semialign.mjs +2 -1
  218. package/_mjs/typeclass/Semialign.mjs.map +1 -1
  219. package/_mjs/typeclass/Witherable.mjs +2 -1
  220. package/_mjs/typeclass/Witherable.mjs.map +1 -1
  221. package/_mjs/typeclass/WitherableWithIndex.mjs +2 -1
  222. package/_mjs/typeclass/WitherableWithIndex.mjs.map +1 -1
  223. package/_mjs/typeclass.mjs +1 -1
  224. package/_mjs/typeclass.mjs.map +1 -1
  225. package/_mjs/types.mjs +0 -1
  226. package/_mjs/types.mjs.map +1 -1
  227. package/_mjs/util/predicates.mjs +3 -0
  228. package/_mjs/util/predicates.mjs.map +1 -1
  229. package/_mjs/util/rand/Random.mjs +2 -1
  230. package/_mjs/util/rand/Random.mjs.map +1 -1
  231. package/_src/collection/immutable/Conc/api.ts +12 -0
  232. package/_src/collection/immutable/HashMap/api.ts +11 -0
  233. package/_src/collection/immutable/HashMap/internal.ts +1 -1
  234. package/_src/collection/immutable/HashSet/api.ts +4 -4
  235. package/_src/collection/immutable/List/definition.ts +14 -2
  236. package/_src/collection/immutable/RoseTree/api.ts +1 -1
  237. package/_src/collection/immutable/Vector/api.ts +64 -2
  238. package/_src/collection/immutable/Vector/definition.ts +1 -0
  239. package/_src/control/CompletablePromise.ts +23 -0
  240. package/_src/control.ts +1 -0
  241. package/_src/data/Branded/definition.ts +3 -3
  242. package/_src/data/Cause/api.ts +33 -40
  243. package/_src/data/Either/api.ts +10 -0
  244. package/_src/data/Either/constructors.ts +4 -4
  245. package/_src/data/Either/definition.ts +29 -2
  246. package/_src/data/Eq/api.ts +8 -0
  247. package/_src/data/Eq.ts +1 -0
  248. package/_src/data/Equatable/api.ts +33 -8
  249. package/_src/data/Equatable/definition.ts +6 -2
  250. package/_src/data/Exit/api.ts +26 -0
  251. package/_src/data/Exit/constructors.ts +7 -7
  252. package/_src/data/Exit/definition.ts +9 -4
  253. package/_src/data/FiberId/api.ts +5 -5
  254. package/_src/data/Maybe/constructors.ts +4 -6
  255. package/_src/data/Maybe/definition.ts +9 -1
  256. package/_src/data/Maybe/instances.ts +18 -0
  257. package/_src/data/Showable/show.ts +2 -2
  258. package/_src/data/exceptions/IOError.ts +11 -0
  259. package/_src/data/exceptions/NoSuchElementError.ts +1 -1
  260. package/_src/data/exceptions.ts +1 -0
  261. package/_src/data.ts +1 -0
  262. package/_src/typeclass.ts +1 -1
  263. package/_src/types.ts +0 -1
  264. package/_src/util/predicates.ts +4 -0
  265. package/collection/immutable/Conc/api.d.ts +5 -0
  266. package/collection/immutable/HashMap/api.d.ts +5 -0
  267. package/collection/immutable/HashMap/internal.d.ts +1 -2
  268. package/collection/immutable/List/definition.d.ts +9 -0
  269. package/collection/immutable/Vector/api.d.ts +30 -3
  270. package/collection/immutable/Vector/definition.d.ts +1 -0
  271. package/control/CompletablePromise.d.ts +13 -0
  272. package/control.d.ts +1 -0
  273. package/data/Branded/definition.d.ts +3 -2
  274. package/data/Cause/api.d.ts +1 -1
  275. package/data/Either/api.d.ts +5 -0
  276. package/data/Either/constructors.d.ts +2 -2
  277. package/data/Either/definition.d.ts +15 -2
  278. package/data/Eq/api.d.ts +6 -0
  279. package/data/Eq.d.ts +1 -0
  280. package/data/Equatable/api.d.ts +7 -1
  281. package/data/Equatable/definition.d.ts +4 -1
  282. package/data/Exit/api.d.ts +12 -0
  283. package/data/Exit/constructors.d.ts +5 -5
  284. package/data/Exit/definition.d.ts +9 -2
  285. package/data/Maybe/constructors.d.ts +2 -2
  286. package/data/Maybe/definition.d.ts +9 -1
  287. package/data/Maybe/instances.d.ts +24 -0
  288. package/data/exceptions/IOError.d.ts +9 -0
  289. package/data/exceptions/NoSuchElementError.d.ts +1 -1
  290. package/data/exceptions.d.ts +1 -0
  291. package/data.d.ts +1 -0
  292. package/package.json +1 -1
  293. package/typeclass.d.ts +1 -1
  294. package/types.d.ts +0 -1
  295. package/util/predicates.d.ts +1 -0
  296. package/_cjs/types/test.cjs +0 -6
  297. package/_cjs/types/test.cjs.map +0 -1
  298. package/_mjs/types/test.mjs +0 -2
  299. package/_mjs/types/test.mjs.map +0 -1
  300. package/_src/types/test.ts +0 -0
  301. package/types/test.d.ts +0 -1
@@ -1,3 +1,5 @@
1
+ import type { EqualsContext } from "@fncts/base/data/Equatable";
2
+
1
3
  export const enum EitherTag {
2
4
  Left = "Left",
3
5
  Right = "Right",
@@ -17,38 +19,63 @@ export interface EitherF extends HKT {
17
19
  };
18
20
  }
19
21
 
22
+ const IOTypeId = Symbol.for("fncts.io.IO");
23
+ type IOTypeId = typeof IOTypeId;
24
+
20
25
  /**
21
26
  * @tsplus type fncts.Either
22
27
  * @tsplus companion fncts.EitherOps
23
28
  */
24
29
  export class Either<E, A> {
25
30
  readonly [EitherTypeId]: EitherTypeId = EitherTypeId;
31
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
32
+ readonly trace?: string | undefined = undefined;
26
33
  declare [EitherVariance]: {
27
34
  readonly _E: (_: never) => E;
28
35
  readonly _A: (_: never) => A;
29
36
  };
30
37
  }
31
38
 
39
+ const leftHash = Hashable.string(EitherTag.Left);
40
+
32
41
  /**
33
42
  * @tsplus type fncts.Either.Left
34
43
  * @tsplus companion fncts.Either.LeftOps
35
44
  */
36
45
  export class Left<E> extends Either<E, never> {
37
46
  readonly _tag = EitherTag.Left;
38
- constructor(readonly left: E) {
47
+ constructor(readonly left: E, readonly trace?: string) {
39
48
  super();
40
49
  }
50
+
51
+ get [Symbol.hash](): number {
52
+ return Hashable.combine(leftHash, Hashable.unknown(this.left));
53
+ }
54
+
55
+ [Symbol.equals](that: unknown, context: EqualsContext): boolean {
56
+ return Either.isEither(that) && that.isLeft() && context.comparator(this.left, that.left);
57
+ }
41
58
  }
42
59
 
60
+ const rightHash = Hashable.string(EitherTag.Right);
61
+
43
62
  /**
44
63
  * @tsplus type fncts.Either.Right
45
64
  * @tsplus companion fncts.Either.RightOps
46
65
  */
47
66
  export class Right<A> extends Either<never, A> {
48
67
  readonly _tag = EitherTag.Right;
49
- constructor(readonly right: A) {
68
+ constructor(readonly right: A, readonly trace?: string) {
50
69
  super();
51
70
  }
71
+
72
+ get [Symbol.hash](): number {
73
+ return Hashable.combine(rightHash, Hashable.unknown(this.left));
74
+ }
75
+
76
+ [Symbol.equals](that: unknown, context: EqualsContext): boolean {
77
+ return Either.isEither(that) && that.isRight() && context.comparator(this.right, that.right);
78
+ }
52
79
  }
53
80
 
54
81
  /**
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @tsplus pipeable fncts.Eq contramap
3
+ */
4
+ export function contramap<A, B>(f: (b: B) => A) {
5
+ return (self: Eq<A>): Eq<B> => {
6
+ return Eq({ equals: (b2) => (b1) => self.equals(f(b2))(f(b1)) });
7
+ };
8
+ }
package/_src/data/Eq.ts CHANGED
@@ -1,2 +1,3 @@
1
+ export * from "./Eq/api.js";
1
2
  export * from "./Eq/definition.js";
2
3
  export {} from "./Eq/derivations.js";
@@ -1,3 +1,5 @@
1
+ import type { EqualsContext } from "@fncts/base/data/Equatable/definition";
2
+
1
3
  import { isEquatable } from "@fncts/base/data/Equatable/definition";
2
4
  import {
3
5
  createCircularEqualCreator,
@@ -5,30 +7,53 @@ import {
5
7
  sameValueZeroEqual,
6
8
  } from "@fncts/base/data/Equatable/fast-equals";
7
9
 
8
- /**
9
- * @tsplus static fncts.EquatableOps deepEquals
10
- */
11
- export const deepEquals = createComparator(
10
+ const deepEqualsComparator = createComparator(
12
11
  createCircularEqualCreator((eq) => (a, b, meta) => {
12
+ const equalsContext: EqualsContext = { comparator: deepEquals };
13
13
  if (isEquatable(a)) {
14
- return a[Symbol.equals](b);
14
+ return a[Symbol.equals](b, equalsContext);
15
15
  } else if (isEquatable(b)) {
16
- return b[Symbol.equals](a);
16
+ return b[Symbol.equals](a, equalsContext);
17
17
  } else {
18
18
  return eq(a, b, meta);
19
19
  }
20
20
  }),
21
21
  );
22
22
 
23
+ /**
24
+ * @tsplus static fncts.EquatableOps deepEquals
25
+ */
26
+ export function deepEquals<A>(a: A, b: unknown): boolean {
27
+ const context: EqualsContext = { comparator: deepEquals };
28
+ if (isEquatable(a)) {
29
+ return a[Symbol.equals](b, context);
30
+ } else if (isEquatable(b)) {
31
+ return b[Symbol.equals](a, context);
32
+ } else {
33
+ return deepEqualsComparator(a, b);
34
+ }
35
+ }
36
+
23
37
  /**
24
38
  * @tsplus static fncts.EquatableOps strictEquals
25
39
  * @tsplus operator fncts.Equatable ==
26
40
  */
27
41
  export function strictEquals<A>(a: A, b: unknown): boolean {
42
+ const context: EqualsContext = {
43
+ comparator: strictEquals,
44
+ };
28
45
  if (isEquatable(a)) {
29
- return a[Symbol.equals](b);
46
+ return a[Symbol.equals](b, context);
30
47
  } else if (isEquatable(b)) {
31
- return b[Symbol.equals](a);
48
+ return b[Symbol.equals](a, context);
32
49
  }
33
50
  return sameValueZeroEqual(a, b);
34
51
  }
52
+
53
+ /**
54
+ * @tsplus static fncts.EquatableOps strictNotEquals
55
+ * @tsplus operator fncts.Equatable !=
56
+ */
57
+ export function strictNotEquals<A>(a: A, b: unknown): boolean {
58
+ return !strictEquals(a, b);
59
+ }
@@ -3,15 +3,19 @@
3
3
  */
4
4
  export const equalsSymbol: unique symbol = Symbol.for("fncts.Equatable");
5
5
 
6
+ export interface EqualsContext {
7
+ comparator: (a: unknown, b: unknown) => boolean;
8
+ }
9
+
6
10
  /**
7
11
  * @tsplus type fncts.Equatable
8
12
  */
9
13
  export interface Equatable {
10
- [equalsSymbol](that: unknown): boolean;
14
+ [equalsSymbol](that: unknown, context: EqualsContext): boolean;
11
15
  }
12
16
 
13
17
  export function isEquatable(u: unknown): u is Equatable {
14
- return isObject(u) && Symbol.equals in u;
18
+ return isObject(u) && typeof u[Symbol.equals] === "function";
15
19
  }
16
20
 
17
21
  /**
@@ -1,3 +1,5 @@
1
+ import { IOError } from "@fncts/base/data/exceptions";
2
+
1
3
  import { identity, tuple } from "../function.js";
2
4
  import { ExitTag } from "./definition.js";
3
5
 
@@ -201,3 +203,27 @@ export function zipWithCause<E, A, G, B, C>(
201
203
  }
202
204
  };
203
205
  }
206
+
207
+ /**
208
+ * Returns the Exit's Success value if it exists
209
+ *
210
+ * @tsplus getter fncts.Exit value
211
+ */
212
+ export function value<E, A>(self: Exit<E, A>): A | undefined {
213
+ if (self.isFailure()) {
214
+ return undefined;
215
+ }
216
+ return self.value;
217
+ }
218
+
219
+ /**
220
+ * Returns the Exit's Success value if it exists, or throws the pretty-printed Cause if it doesn't
221
+ *
222
+ * @tsplus getter fncts.Exit valueOrThrow
223
+ */
224
+ export function valueOrThrow<E, A>(self: Exit<E, A>): A {
225
+ if (self.isFailure()) {
226
+ throw new IOError(self.cause);
227
+ }
228
+ return self.value;
229
+ }
@@ -3,14 +3,14 @@ import { Failure, Success } from "./definition.js";
3
3
  /**
4
4
  * @tsplus static fncts.ExitOps halt
5
5
  */
6
- export function halt(defect: unknown): Exit<never, never> {
6
+ export function halt(defect: unknown, __tsplusTrace?: string): Exit<never, never> {
7
7
  return failCause(Cause.halt(defect));
8
8
  }
9
9
 
10
10
  /**
11
11
  * @tsplus static fncts.ExitOps fail
12
12
  */
13
- export function fail<E = never, A = never>(e: E): Exit<E, A> {
13
+ export function fail<E = never, A = never>(e: E, __tsplusTrace?: string): Exit<E, A> {
14
14
  return failCause(Cause.fail(e));
15
15
  }
16
16
 
@@ -31,22 +31,22 @@ export function fromMaybe<E, A>(fa: Maybe<A>, onNothing: () => E): Exit<E, A> {
31
31
  /**
32
32
  * @tsplus static fncts.ExitOps failCause
33
33
  */
34
- export function failCause<E = never, A = never>(cause: Cause<E>): Exit<E, A> {
35
- return new Failure(cause);
34
+ export function failCause<E = never, A = never>(cause: Cause<E>, __tsplusTrace?: string): Exit<E, A> {
35
+ return new Failure(cause, __tsplusTrace);
36
36
  }
37
37
 
38
38
  /**
39
39
  * @tsplus static fncts.ExitOps interrupt
40
40
  */
41
- export function interrupt(id: FiberId): Exit<never, never> {
41
+ export function interrupt(id: FiberId, __tsplusTrace?: string): Exit<never, never> {
42
42
  return failCause(Cause.interrupt(id));
43
43
  }
44
44
 
45
45
  /**
46
46
  * @tsplus static fncts.ExitOps succeed
47
47
  */
48
- export function succeed<E = never, A = never>(value: A): Exit<E, A> {
49
- return new Success(value);
48
+ export function succeed<E = never, A = never>(value: A, __tsplusTrace?: string): Exit<E, A> {
49
+ return new Success(value, __tsplusTrace);
50
50
  }
51
51
 
52
52
  /**
@@ -23,6 +23,9 @@ export const enum ExitTag {
23
23
  Failure = "Failure",
24
24
  }
25
25
 
26
+ const IOTypeId = Symbol.for("fncts.io.IO");
27
+ type IOTypeId = typeof IOTypeId;
28
+
26
29
  const _failureHash = Hashable.string("fncts.Exit.Failure");
27
30
  const _successHash = Hashable.string("fncts.Exit.Success");
28
31
 
@@ -36,8 +39,9 @@ export class Failure<E> {
36
39
  readonly _E: (_: never) => E;
37
40
  readonly _A: (_: never) => never;
38
41
  };
39
- readonly _tag = ExitTag.Failure;
40
- constructor(readonly cause: Cause<E>) {}
42
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
43
+ readonly _tag = ExitTag.Failure;
44
+ constructor(readonly cause: Cause<E>, readonly trace?: string) {}
41
45
 
42
46
  get [Symbol.hash](): number {
43
47
  return Hashable.combine(_failureHash, Hashable.unknown(this.cause));
@@ -57,8 +61,9 @@ export class Success<A> implements P.Hashable, P.Equatable {
57
61
  readonly _E: (_: never) => never;
58
62
  readonly _A: (_: never) => A;
59
63
  };
60
- readonly _tag = ExitTag.Success;
61
- constructor(readonly value: A) {}
64
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
65
+ readonly _tag = ExitTag.Success;
66
+ constructor(readonly value: A, readonly trace?: string) {}
62
67
 
63
68
  get [Symbol.hash](): number {
64
69
  return Hashable.combine(_successHash, Hashable.unknown(this.value));
@@ -5,20 +5,20 @@ import { Composite, isComposite, isNone } from "./definition.js";
5
5
  */
6
6
  export function combine(id1: FiberId) {
7
7
  return (id0: FiberId): FiberId => {
8
- if (isNone(id0)) {
8
+ if (id0.isNone()) {
9
9
  return id1;
10
10
  }
11
- if (isNone(id1)) {
11
+ if (id1.isNone()) {
12
12
  return id0;
13
13
  }
14
- if (isComposite(id0)) {
15
- if (isComposite(id1)) {
14
+ if (id0.isComposite()) {
15
+ if (id1.isComposite()) {
16
16
  return new Composite(id0.fiberIds.union(id1.fiberIds));
17
17
  } else {
18
18
  return new Composite(id0.fiberIds.add(id1));
19
19
  }
20
20
  }
21
- if (isComposite(id1)) {
21
+ if (id1.isComposite()) {
22
22
  return new Composite(id1.fiberIds.add(id0));
23
23
  }
24
24
  return new Composite(HashSet.make(id0, id1));
@@ -4,18 +4,16 @@ import type { Nullable } from "@fncts/base/types";
4
4
  * @tsplus static fncts.MaybeOps just
5
5
  * @tsplus static fncts.JustOps __call
6
6
  */
7
- export function just<A>(a: A): Maybe<A> {
8
- return new Just(a);
7
+ export function just<A>(a: A, __tsplusTrace?: string): Maybe<A> {
8
+ return new Just(a, __tsplusTrace);
9
9
  }
10
10
 
11
- const _Nothing = new Nothing();
12
-
13
11
  /**
14
12
  * @tsplus static fncts.MaybeOps nothing
15
13
  * @tsplus static fncts.NothingOps __call
16
14
  */
17
- export function nothing<A = never>(): Maybe<A> {
18
- return _Nothing;
15
+ export function nothing<A = never>(__tsplusTrace?: string): Maybe<A> {
16
+ return new Nothing(__tsplusTrace);
19
17
  }
20
18
 
21
19
  /**
@@ -11,6 +11,9 @@ export type MaybeVariance = typeof MaybeVariance;
11
11
  export const MaybeTypeId = Symbol.for("fncts.Maybe");
12
12
  export type MaybeTypeId = typeof MaybeTypeId;
13
13
 
14
+ const IOTypeId = Symbol.for("fncts.io.IO");
15
+ type IOTypeId = typeof IOTypeId;
16
+
14
17
  export interface MaybeF extends HKT {
15
18
  type: Maybe<this["A"]>;
16
19
  variance: {
@@ -30,6 +33,8 @@ export abstract class Maybe<A> {
30
33
  readonly _A: (_: never) => A;
31
34
  };
32
35
  readonly [MaybeTypeId]: MaybeTypeId = MaybeTypeId;
36
+ readonly [IOTypeId]: IOTypeId = IOTypeId;
37
+ readonly trace?: string | undefined = undefined;
33
38
  }
34
39
 
35
40
  /**
@@ -38,7 +43,7 @@ export abstract class Maybe<A> {
38
43
  */
39
44
  export class Just<A> extends Maybe<A> {
40
45
  readonly _tag = MaybeTag.Just;
41
- constructor(readonly value: A) {
46
+ constructor(readonly value: A, readonly trace?: string) {
42
47
  super();
43
48
  }
44
49
  [Symbol.equals](that: unknown): boolean {
@@ -55,6 +60,9 @@ export class Just<A> extends Maybe<A> {
55
60
  */
56
61
  export class Nothing extends Maybe<never> {
57
62
  readonly _tag = MaybeTag.Nothing;
63
+ constructor(readonly trace?: string) {
64
+ super();
65
+ }
58
66
  [Symbol.equals](that: unknown): boolean {
59
67
  return isMaybe(that) && that.isNothing();
60
68
  }
@@ -6,25 +6,43 @@ import { MaybeJson } from "@fncts/base/json/MaybeJson";
6
6
  import { filter, filterMap, flatMap, foldLeft, foldRight, map, partition, partitionMap, zip, zipWith } from "./api.js";
7
7
  import { just } from "./constructors.js";
8
8
 
9
+ /**
10
+ * @tsplus static fncts.MaybeOps Functor
11
+ */
9
12
  export const Functor = HKT.instance<P.Functor<MaybeF>>({ map });
10
13
 
14
+ /**
15
+ * @tsplus static fncts.MaybeOps Apply
16
+ */
11
17
  export const Apply = HKT.instance<P.Apply<MaybeF>>({ ...Functor, zip, zipWith });
12
18
 
19
+ /**
20
+ * @tsplus static fncts.MaybeOps Applicative
21
+ */
13
22
  export const Applicative = HKT.instance<P.Applicative<MaybeF>>({
14
23
  ...Apply,
15
24
  pure: just,
16
25
  });
17
26
 
27
+ /**
28
+ * @tsplus static fncts.MaybeOps Monad
29
+ */
18
30
  export const Monad = HKT.instance<P.Monad<MaybeF>>({
19
31
  ...Applicative,
20
32
  flatMap,
21
33
  });
22
34
 
35
+ /**
36
+ * @tsplus static fncts.MaybeOps Foldable
37
+ */
23
38
  export const Foldable = HKT.instance<P.Foldable<MaybeF>>({
24
39
  foldLeft,
25
40
  foldRight,
26
41
  });
27
42
 
43
+ /**
44
+ * @tsplus static fncts.MaybeOps Filterable
45
+ */
28
46
  export const Filterable = HKT.instance<P.Filterable<MaybeF>>({
29
47
  ...Functor,
30
48
  filter,
@@ -490,12 +490,12 @@ function reduceToSingleString(
490
490
  value?: any,
491
491
  ): string {
492
492
  let output = input;
493
- if (context.compact >= 1) {
493
+ if (Number(context.compact) >= 1) {
494
494
  const entries = output.length;
495
495
  if (extrasType === ARRAY_EXTRAS_TYPE && entries > 6) {
496
496
  output = groupElements(context, output, value);
497
497
  }
498
- if (context.currentDepth - context.recurseTimes < context.compact && entries === output.length) {
498
+ if (context.currentDepth - context.recurseTimes < Number(context.compact) && entries === output.length) {
499
499
  const start = output.length + context.indentationLevel + braces[0].length + base.length + 10;
500
500
  if (isBelowBreakLength(context, output, start, base)) {
501
501
  return `${base ? `${base} ` : ""}${braces[0]} ${output.join(", ")} ${braces[1]}`;
@@ -0,0 +1,11 @@
1
+ export const IOErrorTypeId = Symbol.for("fncts.base.exceptions.IOError");
2
+ export type IOErrorTypeId = typeof IOErrorTypeId;
3
+
4
+ export class IOError<E> {
5
+ readonly [IOErrorTypeId]: IOErrorTypeId = IOErrorTypeId;
6
+ constructor(readonly cause: Cause<E>) {}
7
+ }
8
+
9
+ export function isIOError(u: unknown): u is IOError<unknown> {
10
+ return isObject(u) && IOErrorTypeId in u;
11
+ }
@@ -2,7 +2,7 @@ export const NoSuchElementErrorTag = "NoSuchElementError";
2
2
 
3
3
  export class NoSuchElementError extends Error {
4
4
  readonly _tag = NoSuchElementErrorTag;
5
- constructor(message: string) {
5
+ constructor(message?: string) {
6
6
  super(message);
7
7
  this.name = NoSuchElementErrorTag;
8
8
  }
@@ -5,6 +5,7 @@ export * from "./exceptions/IllegalStateError.js";
5
5
  export * from "./exceptions/IndexOutOfBoundsError.js";
6
6
  export * from "./exceptions/InterruptedException.js";
7
7
  export * from "./exceptions/InvalidCapacityError.js";
8
+ export * from "./exceptions/IOError.js";
8
9
  export * from "./exceptions/NoSuchElementError.js";
9
10
  export * from "./exceptions/RuntimeError.js";
10
11
  // codegen:end
package/_src/data.ts CHANGED
@@ -38,6 +38,7 @@ export type {} from "./data/Predicate.js";
38
38
  export type {} from "./data/Refinement.js";
39
39
  export type {} from "./data/Showable.js";
40
40
  export type {} from "./data/string.js";
41
+ export type {} from "./data/Struct.js";
41
42
  export type {} from "./data/Tag.js";
42
43
  export type {} from "./data/These.js";
43
44
  export type {} from "./data/Trace.js";
package/_src/typeclass.ts CHANGED
@@ -32,7 +32,7 @@ export * from "./typeclass/WitherableWithIndex.js";
32
32
 
33
33
  export { Eq } from "./data/Eq.js";
34
34
  export { Equatable } from "./data/Equatable.js";
35
- export { Guard } from "./data/Guard.js";
35
+ export { Guard } from "./data/Guard/definition.js";
36
36
  export { Hash } from "./data/Hash.js";
37
37
  export { Hashable } from "./data/Hashable.js";
38
38
  export { HashEq } from "./data/HashEq.js";
package/_src/types.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  // codegen:start { preset: barrel, include: types/*.ts }
2
2
  export * from "./types/extractions.js";
3
- export * from "./types/test.js";
4
3
  export * from "./types/utility.js";
5
4
  // codegen:end
@@ -41,6 +41,10 @@ export function isObject<A>(value: A | Primitive): boolean {
41
41
  return typeof value === "object" && value !== null;
42
42
  }
43
43
 
44
+ export function isRecord(value: unknown): value is object & Record<PropertyKey, unknown> {
45
+ return isObject(value) && !Array.isArray(value);
46
+ }
47
+
44
48
  export function hasTypeId<X extends symbol>(
45
49
  value: unknown,
46
50
  typeId: X,
@@ -268,6 +268,11 @@ export declare function reverse<A>(self: Conc<A>): Iterable<A>;
268
268
  * @tsplus location "@fncts/base/collection/immutable/Conc/api"
269
269
  */
270
270
  export declare function separate<E, A>(self: Conc<Either<E, A>>): readonly [Conc<E>, Conc<A>];
271
+ /**
272
+ * @tsplus pipeable fncts.Conc slice
273
+ * @tsplus location "@fncts/base/collection/immutable/Conc/api"
274
+ */
275
+ export declare function slice(from: number, to: number): <A>(self: import("@fncts/base/collection/immutable/Conc/definition").Conc<A>) => import("@fncts/base/collection/immutable/Conc/definition").Conc<A>;
271
276
  /**
272
277
  * @tsplus pipeable fncts.Conc splitAt
273
278
  * @tsplus location "@fncts/base/collection/immutable/Conc/api"
@@ -26,6 +26,11 @@ export declare function makeWith<K, V>(config: P.HashEq<K>): HashMap<K, V>;
26
26
  * @tsplus location "@fncts/base/collection/immutable/HashMap/api"
27
27
  */
28
28
  export declare function make<K, V>(...items: ReadonlyArray<readonly [K, V]>): HashMap<K, V>;
29
+ /**
30
+ * @tsplus static fncts.HashMapOps from
31
+ * @tsplus location "@fncts/base/collection/immutable/HashMap/api"
32
+ */
33
+ export declare function from<K, V>(items: Iterable<readonly [K, V]>): HashMap<K, V>;
29
34
  /**
30
35
  * Make a new map that has randomly cached hash and structural equality
31
36
  * @tsplus static fncts.HashMapOps empty
@@ -48,7 +48,7 @@ export declare class CollisionNode<K, V> {
48
48
  constructor(edit: number, hash: number, children: Array<Node<K, V>>);
49
49
  modify(edit: number, keyEq: KeyEq<K>, shift: number, f: UpdateFn<V>, hash: number, key: K, size: SizeRef): Node<K, V>;
50
50
  }
51
- declare class IndexedNode<K, V> {
51
+ export declare class IndexedNode<K, V> {
52
52
  edit: number;
53
53
  mask: number;
54
54
  children: Array<Node<K, V>>;
@@ -64,4 +64,3 @@ export declare class ArrayNode<K, V> {
64
64
  constructor(edit: number, size: number, children: Array<Node<K, V>>);
65
65
  modify(edit: number, keyEq: KeyEq<K>, shift: number, f: UpdateFn<V>, hash: number, key: K, size: SizeRef): Node<K, V>;
66
66
  }
67
- export {};
@@ -1,3 +1,5 @@
1
+ export declare const ListTypeId: unique symbol;
2
+ export type ListTypeId = typeof ListTypeId;
1
3
  /**
2
4
  * @tsplus type fncts.List.Cons
3
5
  * @tsplus companion fncts.ConsOps
@@ -6,6 +8,7 @@ export declare class Cons<A> implements Iterable<A> {
6
8
  readonly head: A;
7
9
  tail: List<A>;
8
10
  readonly _tag = "Cons";
11
+ readonly [ListTypeId]: ListTypeId;
9
12
  constructor(head: A, tail?: List<A>);
10
13
  [Symbol.iterator](): Iterator<A>;
11
14
  }
@@ -15,8 +18,14 @@ export declare class Cons<A> implements Iterable<A> {
15
18
  */
16
19
  export declare class Nil<A> implements Iterable<A> {
17
20
  readonly _tag = "Nil";
21
+ readonly [ListTypeId]: ListTypeId;
18
22
  [Symbol.iterator](): Iterator<A>;
19
23
  }
24
+ /**
25
+ * @tsplus static fncts.ListOps is
26
+ * @tsplus location "@fncts/base/collection/immutable/List/definition"
27
+ */
28
+ export declare function isList(u: unknown): u is List<unknown>;
20
29
  export declare const _Nil: Nil<never>;
21
30
  /**
22
31
  * @tsplus type fncts.List
@@ -1,7 +1,7 @@
1
1
  import { Vector } from "@fncts/base/collection/immutable/Vector";
2
- import { Predicate } from "@fncts/base/data/Predicate/definition";
3
- import { Refinement } from "@fncts/base/data/Refinement/definition";
4
2
  import { Maybe } from "@fncts/base/data/Maybe/definition";
3
+ import { RefinementWithIndex, Refinement } from "@fncts/base/data/Refinement/definition";
4
+ import { PredicateWithIndex, Predicate } from "@fncts/base/data/Predicate/definition";
5
5
  import { List } from "@fncts/base/collection/immutable/List/definition";
6
6
  import { HKT } from "@fncts/typelevel/HKT";
7
7
  import type { MutableVector, VectorF } from "@fncts/base/collection/immutable/Vector/definition";
@@ -15,6 +15,28 @@ import type * as P from "@fncts/base/typeclass";
15
15
  * @tsplus location "@fncts/base/collection/immutable/Vector/api"
16
16
  */
17
17
  export declare function append<A>(a: A): (self: Vector<A>) => Vector<A>;
18
+ /**
19
+ * @tsplus pipeable fncts.Vector filterMapWithIndex
20
+ * @tsplus location "@fncts/base/collection/immutable/Vector/api"
21
+ */
22
+ export declare function filterMapWithIndex<A, B>(f: (i: number, a: A) => Maybe<B>): (self: Vector<A>) => Vector<B>;
23
+ /**
24
+ * @tsplus pipeable fncts.Vector filterMap
25
+ * @tsplus location "@fncts/base/collection/immutable/Vector/api"
26
+ */
27
+ export declare function filterMap<A, B>(f: (a: A) => Maybe<B>): (self: Vector<A>) => Vector<B>;
28
+ /**
29
+ * @tsplus pipeable fncts.Vector filterWithIndex
30
+ * @tsplus location "@fncts/base/collection/immutable/Vector/api"
31
+ */
32
+ export declare function filterWithIndex<A, B extends A>(refinement: RefinementWithIndex<number, A, B>): (self: Vector<A>) => Vector<B>;
33
+ export declare function filterWithIndex<A>(predicate: PredicateWithIndex<number, A>): (self: Vector<A>) => Vector<A>;
34
+ /**
35
+ * @tsplus pipeable fncts.Vector filter
36
+ * @tsplus location "@fncts/base/collection/immutable/Vector/api"
37
+ */
38
+ export declare function filter<A, B extends A>(refinement: Refinement<A, B>): (self: Vector<A>) => Vector<B>;
39
+ export declare function filter<A>(predicate: Predicate<A>): (self: Vector<A>) => Vector<A>;
18
40
  /**
19
41
  * Maps a function over a Vector and concatenates all the resulting
20
42
  * Vectors together.
@@ -261,6 +283,11 @@ export declare function groupWith<A>(f: (a: A, b: A) => boolean): (self: Vector<
261
283
  * @tsplus location "@fncts/base/collection/immutable/Vector/api"
262
284
  */
263
285
  export declare function head<A>(self: Vector<A>): Maybe<NonNullable<A>>;
286
+ /**
287
+ * @tsplus pipeable fncts.Vector includes
288
+ * @tsplus location "@fncts/base/collection/immutable/Vector/api"
289
+ */
290
+ export declare function includes<A>(element: A): (self: Vector<A>) => boolean;
264
291
  /**
265
292
  * Returns the index of the _first_ element in the Vector that is equal
266
293
  * to the given element. If no such element is found `-1` is returned.
@@ -620,4 +647,4 @@ export declare function updateAt<A>(i: number, a: A): (self: Vector<A>) => Vecto
620
647
  * @tsplus static fncts.VectorOps __call
621
648
  * @tsplus location "@fncts/base/collection/immutable/Vector/api"
622
649
  */
623
- export declare function vector<A>(...elements: ReadonlyArray<A>): Vector<A>;
650
+ export declare function vector<A extends ReadonlyArray<any>>(...elements: A): Vector<[A] extends [ReadonlyArray<infer X>] ? X : never>;
@@ -51,6 +51,7 @@ export declare class Vector<A> implements Iterable<A> {
51
51
  [Symbol.equals](that: unknown): boolean;
52
52
  }
53
53
  /**
54
+ * @tsplus type fncts.Vector
54
55
  * @tsplus type fncts.MutableVector
55
56
  */
56
57
  export interface MutableVector<A> {
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @tsplus type fncts.CompletablePromise
3
+ * @tsplus companion fncts.CompletablePromiseOps
4
+ */
5
+ export interface CompletablePromise<A> extends Promise<A> {
6
+ resolve: (a: A) => void;
7
+ reject: (reason: unknown) => void;
8
+ }
9
+ /**
10
+ * @tsplus static fncts.CompletablePromiseOps __call
11
+ * @tsplus location "@fncts/base/control/CompletablePromise"
12
+ */
13
+ export declare function make<A>(): CompletablePromise<A>;
package/control.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export type {} from "./control/CompletablePromise.js";
1
2
  export type {} from "./control/Eval.js";
2
3
  export type {} from "./control/LazyValue.js";
3
4
  export type {} from "./control/Z.js";