@fncts/base 0.0.26 → 0.0.28

Sign up to get free protection for your applications and to get access to all the features.
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";