@fncts/base 0.0.30 → 0.0.32

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 (245) hide show
  1. package/_cjs/collection/compat/Array/api.cjs +53 -0
  2. package/_cjs/collection/compat/Array/api.cjs.map +1 -1
  3. package/_cjs/collection/immutable/Conc/api.cjs +4 -1
  4. package/_cjs/collection/immutable/Conc/api.cjs.map +1 -1
  5. package/_cjs/collection/immutable/Dictionary/api.cjs +54 -8
  6. package/_cjs/collection/immutable/Dictionary/api.cjs.map +1 -1
  7. package/_cjs/collection/immutable/HashMap/api.cjs +7 -4
  8. package/_cjs/collection/immutable/HashMap/api.cjs.map +1 -1
  9. package/_cjs/collection/immutable/HashSet/api.cjs +7 -4
  10. package/_cjs/collection/immutable/HashSet/api.cjs.map +1 -1
  11. package/_cjs/collection/immutable/ImmutableArray/api.cjs +9 -6
  12. package/_cjs/collection/immutable/ImmutableArray/api.cjs.map +1 -1
  13. package/_cjs/collection/internal.cjs +6 -0
  14. package/_cjs/collection/internal.cjs.map +1 -0
  15. package/_cjs/collection/mutable/ArrayDeque.cjs +214 -0
  16. package/_cjs/collection/mutable/ArrayDeque.cjs.map +1 -0
  17. package/_cjs/collection/mutable/Queue.cjs +21 -0
  18. package/_cjs/collection/mutable/Queue.cjs.map +1 -0
  19. package/_cjs/control/InterruptiblePromise.cjs +23 -0
  20. package/_cjs/control/InterruptiblePromise.cjs.map +1 -0
  21. package/_cjs/control/Pure/api.cjs +20 -8
  22. package/_cjs/control/Pure/api.cjs.map +1 -1
  23. package/_cjs/data/Cause/api.cjs +8 -2
  24. package/_cjs/data/Cause/api.cjs.map +1 -1
  25. package/_cjs/data/Date/definition.cjs +6 -0
  26. package/_cjs/data/Date/definition.cjs.map +1 -0
  27. package/_cjs/data/Date.cjs +17 -0
  28. package/_cjs/data/Date.cjs.map +1 -0
  29. package/_cjs/data/Datum/api.cjs +8 -2
  30. package/_cjs/data/Datum/api.cjs.map +1 -1
  31. package/_cjs/data/DatumEither/api.cjs +8 -2
  32. package/_cjs/data/DatumEither/api.cjs.map +1 -1
  33. package/_cjs/data/Either/api.cjs +24 -6
  34. package/_cjs/data/Either/api.cjs.map +1 -1
  35. package/_cjs/data/Either/destructors.cjs +3 -3
  36. package/_cjs/data/Either/destructors.cjs.map +1 -1
  37. package/_cjs/data/Either/instances.cjs +10 -1
  38. package/_cjs/data/Either/instances.cjs.map +1 -1
  39. package/_cjs/data/EitherT/api.cjs +8 -2
  40. package/_cjs/data/EitherT/api.cjs.map +1 -1
  41. package/_cjs/data/Exit/constructors.cjs +4 -1
  42. package/_cjs/data/Exit/constructors.cjs.map +1 -1
  43. package/_cjs/data/Global.cjs +22 -0
  44. package/_cjs/data/Global.cjs.map +1 -0
  45. package/_cjs/data/Maybe/api.cjs +4 -1
  46. package/_cjs/data/Maybe/api.cjs.map +1 -1
  47. package/_cjs/optics/Fold/api/focus.cjs +17 -0
  48. package/_cjs/optics/Fold/api/focus.cjs.map +1 -0
  49. package/_cjs/optics/Fold/definition.cjs.map +1 -1
  50. package/_cjs/optics/Getter/definition.cjs.map +1 -1
  51. package/_cjs/optics/Index/api.cjs +16 -0
  52. package/_cjs/optics/Index/api.cjs.map +1 -1
  53. package/_cjs/optics/Iso/api.cjs +14 -0
  54. package/_cjs/optics/Iso/api.cjs.map +1 -1
  55. package/_cjs/optics/Iso/definition.cjs.map +1 -1
  56. package/_cjs/optics/Lens/api.cjs +50 -24
  57. package/_cjs/optics/Lens/api.cjs.map +1 -1
  58. package/_cjs/optics/Lens/definition.cjs +1 -1
  59. package/_cjs/optics/Lens/definition.cjs.map +1 -1
  60. package/_cjs/optics/Optional/api/focus.cjs +23 -0
  61. package/_cjs/optics/Optional/api/focus.cjs.map +1 -0
  62. package/_cjs/optics/Optional/api.cjs +16 -0
  63. package/_cjs/optics/Optional/api.cjs.map +1 -0
  64. package/_cjs/optics/Optional/definition.cjs +4 -1
  65. package/_cjs/optics/Optional/definition.cjs.map +1 -1
  66. package/_cjs/optics/Optional.cjs +22 -0
  67. package/_cjs/optics/Optional.cjs.map +1 -1
  68. package/_cjs/optics/Prism/api/focus.cjs +21 -0
  69. package/_cjs/optics/Prism/api/focus.cjs.map +1 -0
  70. package/_cjs/optics/Prism/definition.cjs +4 -1
  71. package/_cjs/optics/Prism/definition.cjs.map +1 -1
  72. package/_cjs/optics/Prism.cjs +11 -0
  73. package/_cjs/optics/Prism.cjs.map +1 -1
  74. package/_cjs/optics/Setter/api/focus.cjs +18 -0
  75. package/_cjs/optics/Setter/api/focus.cjs.map +1 -0
  76. package/_cjs/optics/Setter/definition.cjs.map +1 -1
  77. package/_cjs/optics/Traversal/api/focus.cjs +23 -0
  78. package/_cjs/optics/Traversal/api/focus.cjs.map +1 -0
  79. package/_cjs/optics/Traversal/definition.cjs.map +1 -1
  80. package/_cjs/optics/Traversal.cjs +11 -0
  81. package/_cjs/optics/Traversal.cjs.map +1 -1
  82. package/_cjs/typeclass/MonadExcept.cjs +4 -1
  83. package/_cjs/typeclass/MonadExcept.cjs.map +1 -1
  84. package/_mjs/collection/compat/Array/api.mjs +48 -0
  85. package/_mjs/collection/compat/Array/api.mjs.map +1 -1
  86. package/_mjs/collection/immutable/Conc/api.mjs +4 -1
  87. package/_mjs/collection/immutable/Conc/api.mjs.map +1 -1
  88. package/_mjs/collection/immutable/Dictionary/api.mjs +47 -5
  89. package/_mjs/collection/immutable/Dictionary/api.mjs.map +1 -1
  90. package/_mjs/collection/immutable/HashMap/api.mjs +7 -4
  91. package/_mjs/collection/immutable/HashMap/api.mjs.map +1 -1
  92. package/_mjs/collection/immutable/HashSet/api.mjs +7 -4
  93. package/_mjs/collection/immutable/HashSet/api.mjs.map +1 -1
  94. package/_mjs/collection/immutable/ImmutableArray/api.mjs +9 -6
  95. package/_mjs/collection/immutable/ImmutableArray/api.mjs.map +1 -1
  96. package/_mjs/collection/internal.mjs +2 -0
  97. package/_mjs/collection/internal.mjs.map +1 -0
  98. package/_mjs/collection/mutable/ArrayDeque.mjs +205 -0
  99. package/_mjs/collection/mutable/ArrayDeque.mjs.map +1 -0
  100. package/_mjs/collection/mutable/Queue.mjs +14 -0
  101. package/_mjs/collection/mutable/Queue.mjs.map +1 -0
  102. package/_mjs/control/InterruptiblePromise.mjs +15 -0
  103. package/_mjs/control/InterruptiblePromise.mjs.map +1 -0
  104. package/_mjs/control/Pure/api.mjs +20 -8
  105. package/_mjs/control/Pure/api.mjs.map +1 -1
  106. package/_mjs/data/Cause/api.mjs +8 -2
  107. package/_mjs/data/Cause/api.mjs.map +1 -1
  108. package/_mjs/data/Date/definition.mjs +2 -0
  109. package/_mjs/data/Date/definition.mjs.map +1 -0
  110. package/_mjs/data/Date.mjs +3 -0
  111. package/_mjs/data/Date.mjs.map +1 -0
  112. package/_mjs/data/Datum/api.mjs +8 -2
  113. package/_mjs/data/Datum/api.mjs.map +1 -1
  114. package/_mjs/data/DatumEither/api.mjs +8 -2
  115. package/_mjs/data/DatumEither/api.mjs.map +1 -1
  116. package/_mjs/data/Either/api.mjs +24 -6
  117. package/_mjs/data/Either/api.mjs.map +1 -1
  118. package/_mjs/data/Either/destructors.mjs +3 -3
  119. package/_mjs/data/Either/destructors.mjs.map +1 -1
  120. package/_mjs/data/Either/instances.mjs +10 -1
  121. package/_mjs/data/Either/instances.mjs.map +1 -1
  122. package/_mjs/data/EitherT/api.mjs +8 -2
  123. package/_mjs/data/EitherT/api.mjs.map +1 -1
  124. package/_mjs/data/Exit/constructors.mjs +4 -1
  125. package/_mjs/data/Exit/constructors.mjs.map +1 -1
  126. package/_mjs/data/Global.mjs +15 -0
  127. package/_mjs/data/Global.mjs.map +1 -0
  128. package/_mjs/data/Maybe/api.mjs +4 -1
  129. package/_mjs/data/Maybe/api.mjs.map +1 -1
  130. package/_mjs/optics/Fold/api/focus.mjs +11 -0
  131. package/_mjs/optics/Fold/api/focus.mjs.map +1 -0
  132. package/_mjs/optics/Fold/definition.mjs.map +1 -1
  133. package/_mjs/optics/Getter/definition.mjs.map +1 -1
  134. package/_mjs/optics/Index/api.mjs +16 -0
  135. package/_mjs/optics/Index/api.mjs.map +1 -1
  136. package/_mjs/optics/Iso/api.mjs +13 -0
  137. package/_mjs/optics/Iso/api.mjs.map +1 -1
  138. package/_mjs/optics/Iso/definition.mjs.map +1 -1
  139. package/_mjs/optics/Lens/api.mjs +46 -22
  140. package/_mjs/optics/Lens/api.mjs.map +1 -1
  141. package/_mjs/optics/Lens/definition.mjs +1 -1
  142. package/_mjs/optics/Lens/definition.mjs.map +1 -1
  143. package/_mjs/optics/Optional/api/focus.mjs +15 -0
  144. package/_mjs/optics/Optional/api/focus.mjs.map +1 -0
  145. package/_mjs/optics/Optional/api.mjs +8 -0
  146. package/_mjs/optics/Optional/api.mjs.map +1 -0
  147. package/_mjs/optics/Optional/definition.mjs +4 -1
  148. package/_mjs/optics/Optional/definition.mjs.map +1 -1
  149. package/_mjs/optics/Optional.mjs +2 -0
  150. package/_mjs/optics/Optional.mjs.map +1 -1
  151. package/_mjs/optics/Prism/api/focus.mjs +13 -0
  152. package/_mjs/optics/Prism/api/focus.mjs.map +1 -0
  153. package/_mjs/optics/Prism/definition.mjs +4 -1
  154. package/_mjs/optics/Prism/definition.mjs.map +1 -1
  155. package/_mjs/optics/Prism.mjs +1 -0
  156. package/_mjs/optics/Prism.mjs.map +1 -1
  157. package/_mjs/optics/Setter/api/focus.mjs +12 -0
  158. package/_mjs/optics/Setter/api/focus.mjs.map +1 -0
  159. package/_mjs/optics/Setter/definition.mjs.map +1 -1
  160. package/_mjs/optics/Traversal/api/focus.mjs +15 -0
  161. package/_mjs/optics/Traversal/api/focus.mjs.map +1 -0
  162. package/_mjs/optics/Traversal/definition.mjs.map +1 -1
  163. package/_mjs/optics/Traversal.mjs +1 -0
  164. package/_mjs/optics/Traversal.mjs.map +1 -1
  165. package/_mjs/typeclass/MonadExcept.mjs +4 -1
  166. package/_mjs/typeclass/MonadExcept.mjs.map +1 -1
  167. package/_src/collection/compat/Array/api.ts +51 -0
  168. package/_src/collection/immutable/Conc/api.ts +4 -4
  169. package/_src/collection/immutable/Dictionary/api.ts +40 -0
  170. package/_src/collection/immutable/HashMap/api.ts +4 -4
  171. package/_src/collection/immutable/HashSet/api.ts +4 -4
  172. package/_src/collection/immutable/ImmutableArray/api.ts +4 -4
  173. package/_src/collection/internal.ts +0 -0
  174. package/_src/collection/mutable/ArrayDeque.ts +231 -0
  175. package/_src/collection/mutable/Queue.ts +14 -0
  176. package/_src/collection/mutable.ts +2 -0
  177. package/_src/control/InterruptiblePromise.ts +23 -0
  178. package/_src/control/Pure/api.ts +7 -4
  179. package/_src/data/Cause/api.ts +8 -8
  180. package/_src/data/Date/definition.ts +6 -0
  181. package/_src/data/Date.ts +3 -0
  182. package/_src/data/Datum/api.ts +8 -8
  183. package/_src/data/DatumEither/api.ts +8 -8
  184. package/_src/data/Either/api.ts +18 -18
  185. package/_src/data/Either/destructors.ts +3 -3
  186. package/_src/data/Either/instances.ts +12 -12
  187. package/_src/data/EitherT/api.ts +8 -8
  188. package/_src/data/Exit/constructors.ts +1 -1
  189. package/_src/data/Global.ts +17 -0
  190. package/_src/data/Maybe/api.ts +4 -4
  191. package/_src/data.ts +2 -0
  192. package/_src/optics/Fold/api/focus.ts +12 -0
  193. package/_src/optics/Fold/definition.ts +9 -0
  194. package/_src/optics/Getter/definition.ts +9 -1
  195. package/_src/optics/Index/api.ts +15 -1
  196. package/_src/optics/Iso/api.ts +16 -0
  197. package/_src/optics/Iso/definition.ts +6 -1
  198. package/_src/optics/Lens/api.ts +36 -8
  199. package/_src/optics/Lens/definition.ts +4 -1
  200. package/_src/optics/Optional/api/focus.ts +16 -0
  201. package/_src/optics/Optional/api.ts +10 -0
  202. package/_src/optics/Optional/definition.ts +23 -4
  203. package/_src/optics/Optional.ts +2 -0
  204. package/_src/optics/Prism/api/focus.ts +14 -0
  205. package/_src/optics/Prism/definition.ts +6 -2
  206. package/_src/optics/Prism.ts +1 -0
  207. package/_src/optics/Setter/api/focus.ts +13 -0
  208. package/_src/optics/Setter/definition.ts +13 -0
  209. package/_src/optics/Traversal/api/focus.ts +16 -0
  210. package/_src/optics/Traversal/definition.ts +10 -0
  211. package/_src/optics/Traversal.ts +1 -0
  212. package/_src/typeclass/MonadExcept.ts +1 -1
  213. package/collection/compat/Array/api.d.ts +19 -0
  214. package/collection/immutable/Dictionary/api.d.ts +21 -0
  215. package/collection/internal.d.ts +1 -0
  216. package/collection/mutable/ArrayDeque.d.ts +41 -0
  217. package/collection/mutable/Queue.d.ts +9 -0
  218. package/collection/mutable.d.ts +2 -0
  219. package/control/InterruptiblePromise.d.ts +12 -0
  220. package/data/Date/definition.d.ts +9 -0
  221. package/data/Date.d.ts +1 -0
  222. package/data/Either/destructors.d.ts +4 -1
  223. package/data/Global.d.ts +4 -0
  224. package/data.d.ts +2 -0
  225. package/optics/Fold/api/focus.d.ts +6 -0
  226. package/optics/Fold/definition.d.ts +6 -0
  227. package/optics/Getter/definition.d.ts +7 -1
  228. package/optics/Index/api.d.ts +5 -0
  229. package/optics/Iso/api.d.ts +6 -0
  230. package/optics/Iso/definition.d.ts +4 -1
  231. package/optics/Lens/api.d.ts +11 -0
  232. package/optics/Lens/definition.d.ts +4 -1
  233. package/optics/Optional/api/focus.d.ts +6 -0
  234. package/optics/Optional/api.d.ts +6 -0
  235. package/optics/Optional/definition.d.ts +15 -0
  236. package/optics/Optional.d.ts +2 -0
  237. package/optics/Prism/api/focus.d.ts +6 -0
  238. package/optics/Prism/definition.d.ts +4 -1
  239. package/optics/Prism.d.ts +1 -0
  240. package/optics/Setter/api/focus.d.ts +6 -0
  241. package/optics/Setter/definition.d.ts +10 -0
  242. package/optics/Traversal/api/focus.d.ts +6 -0
  243. package/optics/Traversal/definition.d.ts +5 -0
  244. package/optics/Traversal.d.ts +1 -0
  245. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Traversal.mjs","names":[],"sources":["../../_src/optics/Traversal.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA,cAAc,4BAA2B;AACzC;AACA;AACA,cAAc,6BAA4B;AAC1C,cAAc,qCAAoC"}
1
+ {"version":3,"file":"Traversal.mjs","names":[],"sources":["../../_src/optics/Traversal.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA,cAAc,4BAA2B;AACzC;AACA;AACA,cAAc,6BAA4B;AAC1C,cAAc,2BAA0B;AACxC,cAAc,qCAAoC"}
@@ -1,6 +1,9 @@
1
1
  import * as tsplus_module_1 from "@fncts/base/data/Either/destructors";
2
2
  export const MonadExcept = {};
3
3
  export function absolve(F) {
4
- return F.flatMap(r => tsplus_module_1.match(F.fail, F.pure)(r));
4
+ return F.flatMap(r => tsplus_module_1.match({
5
+ Left: F.fail,
6
+ Right: F.pure
7
+ })(r));
5
8
  }
6
9
  //# sourceMappingURL=MonadExcept.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonadExcept.mjs","names":["MonadExcept","absolve","F","flatMap","r","tsplus_module_1","match","fail","pure"],"sources":["../../_src/typeclass/MonadExcept.ts"],"sourcesContent":[null],"mappings":";AAaA,OAAO,MAAMA,WAAW,GAAmB,EAAE;AAU7C,OAAM,SAAUC,OAAOA,CACrBC,CAAwB;EAExB,OAAOA,CAAC,CAACC,OAAO,CAAEC,CAAC,IAAKC,eAAA,CAAAC,KAAA,CAAQJ,CAAC,CAACK,IAAI,EAAEL,CAAC,CAACM,IAAI,EAAtBJ,CAAC,CAAsB,CAAC;AAClD"}
1
+ {"version":3,"file":"MonadExcept.mjs","names":["MonadExcept","absolve","F","flatMap","r","tsplus_module_1","match","Left","fail","Right","pure"],"sources":["../../_src/typeclass/MonadExcept.ts"],"sourcesContent":[null],"mappings":";AAaA,OAAO,MAAMA,WAAW,GAAmB,EAAE;AAU7C,OAAM,SAAUC,OAAOA,CACrBC,CAAwB;EAExB,OAAOA,CAAC,CAACC,OAAO,CAAEC,CAAC,IAAKC,eAAA,CAAAC,KAAA,CAAQ;IAAEC,IAAI,EAAEL,CAAC,CAACM,IAAI;IAAEC,KAAK,EAAEP,CAAC,CAACQ;EAAI,CAAE,EAAvCN,CAAC,CAAuC,CAAC;AACnE"}
@@ -1,4 +1,5 @@
1
1
  import type { Eq } from "@fncts/base/typeclass";
2
+
2
3
  /**
3
4
  * @tsplus getter fncts.Array elem
4
5
  * @tsplus getter fncts.ReadonlyArray elem
@@ -15,6 +16,41 @@ export function elem<A>(self: ReadonlyArray<A>) {
15
16
  };
16
17
  }
17
18
 
19
+ /**
20
+ * @tsplus pipeable fncts.Array filterMap
21
+ * @tsplus pipeable fncts.ReadonlyArray filterMap
22
+ */
23
+ export function filterMap<A, B>(f: (a: A) => Maybe<B>) {
24
+ return (self: ReadonlyArray<A>): ReadonlyArray<B> => {
25
+ const out: Array<B> = [];
26
+ for (let i = 0; i < self.length; i++) {
27
+ const v = f(self[i]!);
28
+ Maybe.concrete(v);
29
+ if (v._tag === MaybeTag.Just) {
30
+ out.push(v.value);
31
+ }
32
+ }
33
+ return out;
34
+ };
35
+ }
36
+
37
+ /**
38
+ * @tsplus pipeable fncts.Array filterMap
39
+ * @tsplus pipeable fncts.ReadonlyArray filterMap
40
+ */
41
+ export function filterMapUndefined<A, B>(f: (a: A) => B | undefined) {
42
+ return (self: ReadonlyArray<A>): ReadonlyArray<B> => {
43
+ const out: Array<B> = [];
44
+ for (let i = 0; i < self.length; i++) {
45
+ const v = f(self[i]!);
46
+ if (v !== undefined) {
47
+ out.push(v);
48
+ }
49
+ }
50
+ return out;
51
+ };
52
+ }
53
+
18
54
  /**
19
55
  * @tsplus fluent fncts.Array isEmpty
20
56
  * @tsplus fluent fncts.ReadonlyArray isEmpty
@@ -54,3 +90,18 @@ export function foldLeftWithIndex<A, B>(b: B, f: (i: number, b: B, a: A) => B) {
54
90
  return out;
55
91
  };
56
92
  }
93
+
94
+ /**
95
+ * @tsplus pipeable fncts.Array updateAt
96
+ * @tsplus pipeable fncts.ReadonlyArray updateAt
97
+ */
98
+ export function updateAt<A>(i: number, a: A) {
99
+ return (self: ReadonlyArray<A>): ReadonlyArray<A> => {
100
+ if (i in self) {
101
+ const copy = self.slice();
102
+ copy[i] = a;
103
+ return copy;
104
+ }
105
+ return self;
106
+ };
107
+ }
@@ -864,10 +864,10 @@ export function partitionMapWithIndex<A, B, C>(f: (i: number, a: A) => Either<B,
864
864
  const array = result.value;
865
865
  for (let j = 0; j < array.length; j++) {
866
866
  const eab = f(i, array[j]!);
867
- eab.match(
868
- (b) => left.append(b),
869
- (c) => right.append(c),
870
- );
867
+ eab.match({
868
+ Left: (b) => left.append(b),
869
+ Right: (c) => right.append(c),
870
+ });
871
871
  i++;
872
872
  }
873
873
  }
@@ -32,6 +32,38 @@ export function get(key: string) {
32
32
  };
33
33
  }
34
34
 
35
+ /**
36
+ * @tsplus pipeable fncts.Dictionary set
37
+ */
38
+ export function set<A>(key: string, value: A) {
39
+ return (self: Dictionary<A>): Dictionary<A> => {
40
+ return Dictionary({ ...self.toRecord, [key]: value });
41
+ };
42
+ }
43
+
44
+ /**
45
+ * @tsplus pipeable fncts.Dictionary remove
46
+ */
47
+ export function remove(key: string) {
48
+ return <A>(self: Dictionary<A>): Dictionary<A> => {
49
+ const out = { ...self.toRecord };
50
+ delete out[key];
51
+ return Dictionary(out);
52
+ };
53
+ }
54
+
55
+ /**
56
+ * @tsplus pipeable fncts.Dictionary update
57
+ */
58
+ export function update<A>(key: string, f: (a: Maybe<A>) => Maybe<A>) {
59
+ return (self: Dictionary<A>): Dictionary<A> => {
60
+ return f(self.get(key)).match(
61
+ () => self.remove(key),
62
+ (a) => self.set(key, a),
63
+ );
64
+ };
65
+ }
66
+
35
67
  /**
36
68
  * @tsplus getter fncts.Dictionary keys
37
69
  */
@@ -64,6 +96,14 @@ export function mapWithIndex<A, B>(f: (k: string, a: A) => B) {
64
96
  };
65
97
  }
66
98
 
99
+ /**
100
+ * @tsplus static fncts.DictionaryOps __call
101
+ * @tsplus macro identity
102
+ */
103
+ export function fromRecord<A>(self: Record<string, A>): Dictionary<A> {
104
+ return Dictionary.get(self);
105
+ }
106
+
67
107
  /**
68
108
  * @tsplus getter fncts.Dictionary toRecord
69
109
  * @tsplus macro identity
@@ -476,14 +476,14 @@ export function partitionMapWithIndex<K, V, A, B>(f: (i: K, a: V) => Either<A, B
476
476
  const left = makeWith<K, A>(self.config).beginMutation;
477
477
  const right = makeWith<K, B>(self.config).beginMutation;
478
478
  self.forEachWithIndex((k, v) => {
479
- f(k, v).match(
480
- (a) => {
479
+ f(k, v).match({
480
+ Left: (a) => {
481
481
  left.set(k, a);
482
482
  },
483
- (b) => {
483
+ Right: (b) => {
484
484
  right.set(k, b);
485
485
  },
486
- );
486
+ });
487
487
  });
488
488
  return [left.endMutation, right.endMutation];
489
489
  };
@@ -300,14 +300,14 @@ export function partitionMapWith<B, C>(
300
300
  const right = beginMutation(emptyWith(C));
301
301
  const left = beginMutation(emptyWith(B));
302
302
  fa.forEach((v) => {
303
- f(v).match(
304
- (b) => {
303
+ f(v).match({
304
+ Left: (b) => {
305
305
  left.add(b);
306
306
  },
307
- (c) => {
307
+ Right: (c) => {
308
308
  right.add(c);
309
309
  },
310
- );
310
+ });
311
311
  });
312
312
  return [endMutation(left), endMutation(right)];
313
313
  };
@@ -1430,16 +1430,16 @@ export function _wiltWithIndex<A>(self: ImmutableArray<A>) {
1430
1430
  .foldLeftWithIndex(G.pure([[] as Array<B>, [] as Array<B2>] as const), (i, fbs, a) =>
1431
1431
  f(i, a).pipe(
1432
1432
  G.zipWith(fbs, (eb, r) =>
1433
- eb.match(
1434
- (b1) => {
1433
+ eb.match({
1434
+ Left: (b1) => {
1435
1435
  r[0].push(b1);
1436
1436
  return r;
1437
1437
  },
1438
- (b2) => {
1438
+ Right: (b2) => {
1439
1439
  r[1].push(b2);
1440
1440
  return r;
1441
1441
  },
1442
- ),
1442
+ }),
1443
1443
  ),
1444
1444
  ),
1445
1445
  )
File without changes
@@ -0,0 +1,231 @@
1
+ const STABLE_SIZE = 128;
2
+ const DEFAULT_INITIAL_SIZE = 16;
3
+
4
+ /**
5
+ * @tsplus type fncts.MutableArrayDeque
6
+ * @tsplus companion fncts.MutableArrayDeque
7
+ */
8
+ export class ArrayDeque<A> {
9
+ constructor(protected array: Array<A>, private start: number, private end: number) {}
10
+
11
+ static empty<A>(initialSize = DEFAULT_INITIAL_SIZE): ArrayDeque<A> {
12
+ return new ArrayDeque(new Array(initialSize), 0, 0);
13
+ }
14
+
15
+ protected requireBounds(idx: number, until: number = this.length) {
16
+ if (idx < 0 || idx > until) throw new IndexOutOfBoundsError(`${idx} is out of bounds (min 0, max ${until - 1})`);
17
+ }
18
+
19
+ get(idx: number): A {
20
+ this.requireBounds(idx);
21
+ return this._get(idx);
22
+ }
23
+
24
+ update(idx: number, elem: A): void {
25
+ this.requireBounds(idx);
26
+ this._set(idx, elem);
27
+ }
28
+
29
+ addOne(elem: A): this {
30
+ this.ensureSize(this.length + 1);
31
+ return this.appendAssumingCapacity(elem);
32
+ }
33
+
34
+ prepend(elem: A): this {
35
+ this.ensureSize(this.length + 1);
36
+ return this.prependAssumingCapacity(elem);
37
+ }
38
+
39
+ insert(idx: number, elem: A): void {
40
+ this.requireBounds(idx, this.length + 1);
41
+ const n = this.length;
42
+ if (idx === 0) {
43
+ this.prepend(elem);
44
+ } else if (idx === n) {
45
+ this.addOne(elem);
46
+ } else {
47
+ const finalLength = n + 1;
48
+ if (this.mustGrow(finalLength)) {
49
+ const array2 = new Array(finalLength);
50
+ this.copySliceToArray(0, array2, 0, idx);
51
+ array2[idx] = elem;
52
+ this.copySliceToArray(idx, array2, idx + 1, n);
53
+ this.reset(array2, 0, finalLength);
54
+ } else if (n <= idx * 2) {
55
+ let i = n - 1;
56
+ for (; i >= idx; i--) {
57
+ this._set(i + 1, this._get(i));
58
+ }
59
+ this.end = this.end_plus(1);
60
+ i += 1;
61
+ this._set(i, elem);
62
+ } else {
63
+ let i = 0;
64
+ for (; i < idx; i++) {
65
+ this._set(i - 1, this._get(1));
66
+ }
67
+ this.start = this.start_minus(1);
68
+ this._set(i, elem);
69
+ }
70
+ }
71
+ }
72
+
73
+ remove(idx: number, count: number): void {
74
+ if (count > 0) {
75
+ this.requireBounds(idx);
76
+ const n = this.length;
77
+ const removals = Math.min(n - idx, count);
78
+ const finalLength = n - removals;
79
+ const suffixStart = idx + removals;
80
+ if (this.shouldShrink(finalLength)) {
81
+ const array2 = new Array(finalLength);
82
+ this.copySliceToArray(0, array2, 0, idx);
83
+ this.copySliceToArray(suffixStart, array2, idx, n);
84
+ this.reset(array2, 0, finalLength);
85
+ } else if (2 * idx <= finalLength) {
86
+ let i = suffixStart - 1;
87
+ for (; i >= removals; i--) {
88
+ this._set(i, this._get(i - removals));
89
+ }
90
+ for (; i >= 0; i--) {
91
+ this._set(i, null!);
92
+ }
93
+ this.start = this.start_plus(removals);
94
+ } else {
95
+ let i = idx;
96
+ for (; i < finalLength; i++) {
97
+ this._set(i, this._get(i + removals));
98
+ }
99
+ for (; i < n; i++) {
100
+ this._set(i, null!);
101
+ }
102
+ this.end = this.end_minus(removals);
103
+ }
104
+ } else if (count < 0) {
105
+ throw new Error(`Removing negative number of elements ${count}`);
106
+ }
107
+ }
108
+
109
+ removeHead(resizeInternalRepr = false): A {
110
+ if (this.isEmpty) throw new NoSuchElementError("empty collection");
111
+ else return this.removeHeadAssumingNonEmpty(resizeInternalRepr);
112
+ }
113
+
114
+ removeHeadOption(resizeInternalRepr = false): Maybe<A> {
115
+ if (this.isEmpty) return Nothing();
116
+ else return Just(this.removeHeadAssumingNonEmpty(resizeInternalRepr));
117
+ }
118
+
119
+ removeLastOption(resizeInternalRepr = false): Maybe<A> {
120
+ if (this.isEmpty) return Nothing();
121
+ else return Just(this.removeLastAssumingNonEmpty(resizeInternalRepr));
122
+ }
123
+
124
+ get isEmpty(): boolean {
125
+ return this.length === 0;
126
+ }
127
+
128
+ private removeHeadAssumingNonEmpty(resizeInternalRepr = false): A {
129
+ const elem = this.array[this.start];
130
+ this.array[this.start] = null!;
131
+ this.start = this.start_plus(1);
132
+ if (resizeInternalRepr) this.resize(this.length);
133
+ return elem!;
134
+ }
135
+
136
+ private removeLastAssumingNonEmpty(resizeInternalRepr = false): A {
137
+ this.end = this.end_minus(1);
138
+ const elem = this.array[this.end];
139
+ this.array[this.end] = null!;
140
+ if (resizeInternalRepr) this.resize(this.length);
141
+ return elem!;
142
+ }
143
+
144
+ protected prependAssumingCapacity(elem: A): this {
145
+ this.start = this.start_minus(1);
146
+ this.array[this.start] = elem;
147
+ return this;
148
+ }
149
+
150
+ protected appendAssumingCapacity(elem: A): this {
151
+ this.array[this.end] = elem;
152
+ this.end = this.end_plus(1);
153
+ return this;
154
+ }
155
+
156
+ private ensureSize(hint: number) {
157
+ if (hint > this.length && this.mustGrow(hint)) {
158
+ this.resize(hint);
159
+ }
160
+ }
161
+
162
+ private resize(len: number) {
163
+ const n = this.length;
164
+ const array2 = this.copySliceToArray(0, new Array(len), 0, n);
165
+ this.reset(array2, 0, n);
166
+ }
167
+
168
+ private reset(array: Array<A>, start: number, end: number) {
169
+ this.requireBounds(start, array.length);
170
+ this.requireBounds(end, array.length);
171
+ this.array = array;
172
+ this.start = start;
173
+ this.end = end;
174
+ }
175
+
176
+ private mustGrow(len: number) {
177
+ return len >= this.array.length;
178
+ }
179
+
180
+ protected start_plus(idx: number) {
181
+ return (this.start + idx) & (this.array.length - 1);
182
+ }
183
+
184
+ private start_minus(idx: number) {
185
+ return (this.start - idx) & (this.array.length - 1);
186
+ }
187
+
188
+ private end_plus(idx: number) {
189
+ return (this.end + idx) & (this.array.length - 1);
190
+ }
191
+
192
+ private end_minus(idx: number) {
193
+ return (this.end - idx) & (this.array.length - 1);
194
+ }
195
+
196
+ private _get(idx: number): A {
197
+ return this.array[this.start_plus(idx)]!;
198
+ }
199
+
200
+ private _set(idx: number, a: A): void {
201
+ this.array[this.start_plus(idx)] = a;
202
+ }
203
+
204
+ get length() {
205
+ return this.end_minus(this.start);
206
+ }
207
+
208
+ copySliceToArray(srcStart: number, dest: Array<A>, destStart: number, maxItems: number): Array<A> {
209
+ this.requireBounds(destStart, dest.length + 1);
210
+ const toCopy = Math.min(maxItems, Math.min(this.length - srcStart, dest.length - destStart));
211
+ if (toCopy > 0) {
212
+ this.requireBounds(srcStart);
213
+ const startIdx = this.start_plus(srcStart);
214
+ const block1 = Math.min(toCopy, this.array.length - startIdx);
215
+ copyArray(this.array, startIdx, dest, destStart, block1);
216
+ const block2 = toCopy - block1;
217
+ if (block2 > 0) copyArray(this.array, 0, dest, destStart + block1, block2);
218
+ }
219
+ return dest;
220
+ }
221
+
222
+ private shouldShrink(len: number) {
223
+ return this.array.length > STABLE_SIZE && this.array.length - len - (len >> 1) > len;
224
+ }
225
+ }
226
+
227
+ function copyArray<A>(src: Array<A>, srcPos: number, dest: Array<A>, destPos: number, length: number): void {
228
+ for (let i = srcPos, j = 0; j < length; i++, j++) {
229
+ dest[destPos + j] = src[i]!;
230
+ }
231
+ }
@@ -0,0 +1,14 @@
1
+ import { ArrayDeque } from "@fncts/base/collection/mutable/ArrayDeque";
2
+
3
+ /**
4
+ * @tsplus type fncts.MutableQueue
5
+ * @tsplus companion fncts.MutableQueue
6
+ */
7
+ export class Queue<A> extends ArrayDeque<A> {
8
+ enqueue(elem: A): this {
9
+ return this.addOne(elem);
10
+ }
11
+ dequeue(): A {
12
+ return this.removeHead();
13
+ }
14
+ }
@@ -1,6 +1,8 @@
1
1
  // codegen:start { preset: type-barrel, include: ./mutable/*.ts }
2
+ export type {} from "./mutable/ArrayDeque.js";
2
3
  export type {} from "./mutable/HashMap.js";
3
4
  export type {} from "./mutable/HashSet.js";
4
5
  export type {} from "./mutable/internal.js";
5
6
  export type {} from "./mutable/ListBuffer.js";
7
+ export type {} from "./mutable/Queue.js";
6
8
  // codegen:end
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @tsplus type fncts.InterruptiblePromise
3
+ * @tsplus companion fncts.InterruptiblePromiseOps
4
+ */
5
+ export interface InterruptiblePromise<A> extends Promise<A> {
6
+ interrupt: () => void;
7
+ }
8
+
9
+ /**
10
+ * @tsplus static fncts.InterruptiblePromiseOps __call
11
+ */
12
+ export function make<A>(
13
+ executor: (resolve: (value: A | PromiseLike<A>) => void, reject: (reason?: unknown) => void) => (() => void) | void,
14
+ ): InterruptiblePromise<A> {
15
+ const promise: InterruptiblePromise<A> = new Promise((resolve, reject) => {
16
+ const canceller = executor(resolve, reject);
17
+ promise.interrupt = () => {
18
+ canceller?.();
19
+ reject(new InterruptedException());
20
+ };
21
+ }) as InterruptiblePromise<A>;
22
+ return promise;
23
+ }
@@ -8,7 +8,7 @@ import { identity, tuple } from "../../data/function.js";
8
8
  export function absolve<W, S1, S2, R, E, E1, A>(
9
9
  fa: Pure<W, S1, S2, R, E, Either<E1, A>>,
10
10
  ): Pure<W, S1, S2, R, E | E1, A> {
11
- return fa.flatMap((ea) => ea.match(Pure.failNow, Pure.succeedNow));
11
+ return fa.flatMap((ea) => ea.match({ Left: Pure.failNow, Right: Pure.succeedNow }));
12
12
  }
13
13
 
14
14
  /**
@@ -350,7 +350,10 @@ export function matchPure<S5, S2, E, A, W1, S3, R1, E1, B, W2, S4, R2, E2, C>(
350
350
  onSuccess: (a: A) => Pure<W2, S2, S4, R2, E2, C>,
351
351
  ) {
352
352
  return <W, S1, R>(fa: Pure<W, S1, S2, R, E, A>): Pure<W | W1 | W2, S1 & S5, S3 | S4, R | R1 | R2, E1 | E2, B | C> => {
353
- return fa.matchCausePure((cause) => cause.failureOrCause.match(onFailure, Pure.failCauseNow), onSuccess);
353
+ return fa.matchCausePure(
354
+ (cause) => cause.failureOrCause.match({ Left: onFailure, Right: Pure.failCauseNow }),
355
+ onSuccess,
356
+ );
354
357
  };
355
358
  }
356
359
 
@@ -378,7 +381,7 @@ export function matchLogPure<W, S5, S2, E, A, W1, S3, R1, E1, B, W2, S4, R2, E2,
378
381
  ) {
379
382
  return <S1, R>(fa: Pure<W, S1, S2, R, E, A>): Pure<W | W1 | W2, S1 & S5, S3 | S4, R | R1 | R2, E1 | E2, B | C> => {
380
383
  return fa.matchLogCausePure(
381
- (ws, cause) => cause.failureOrCause.match((e) => onFailure(ws, e), Pure.failCauseNow),
384
+ (ws, cause) => cause.failureOrCause.match({ Left: (e) => onFailure(ws, e), Right: Pure.failCauseNow }),
382
385
  onSuccess,
383
386
  );
384
387
  };
@@ -428,7 +431,7 @@ export function modifyEither<S1, S2, E, A>(
428
431
  ): Pure<never, S1, S2, never, E, A> {
429
432
  return Pure.get<S1>()
430
433
  .map(f)
431
- .flatMap((r) => r.match(Pure.failNow, ([a, s2]) => Pure.succeedNow(a).mapState(() => s2)));
434
+ .flatMap((r) => r.match({ Left: Pure.failNow, Right: ([a, s2]) => Pure.succeedNow(a).mapState(() => s2) }));
432
435
  }
433
436
 
434
437
  /**
@@ -333,10 +333,10 @@ export function flipCauseEither<E, A>(self: Cause<Either<E, A>>): Either<Cause<E
333
333
  result = Either.left(c);
334
334
  break pushing;
335
335
  case CauseTag.Fail:
336
- result = c.value.match(
337
- (l) => Either.left(Cause.fail(l, Trace.none)),
338
- (r) => Either.right(r),
339
- );
336
+ result = c.value.match({
337
+ Left: (l) => Either.left(Cause.fail(l, Trace.none)),
338
+ Right: (r) => Either.right(r),
339
+ });
340
340
  break pushing;
341
341
  case CauseTag.Sequential:
342
342
  stack.push(new FCEStackFrameThenLeft(c));
@@ -886,10 +886,10 @@ function sequenceCauseEitherEval<E, A>(self: Cause<Either<E, A>>): Eval<Either<C
886
886
  }
887
887
  case CauseTag.Fail: {
888
888
  return Eval.now(
889
- self.value.match(
890
- (e) => Either.left(Cause.fail(e, Trace.none)),
891
- (a) => Either.right(a),
892
- ),
889
+ self.value.match({
890
+ Left: (e) => Either.left(Cause.fail(e, Trace.none)),
891
+ Right: (a) => Either.right(a),
892
+ }),
893
893
  );
894
894
  }
895
895
  case CauseTag.Halt: {
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ /** @tsplus type fncts.Date */
3
+ interface Date {}
4
+ /** @tsplus type fncts.DateOps */
5
+ interface DateConstructor {}
6
+ }
@@ -0,0 +1,3 @@
1
+ // codegen:start { preset: barrel, include: ./Date/*.ts }
2
+ export * from "./Date/definition.js";
3
+ // codegen:end
@@ -336,15 +336,15 @@ export function partitionMap<A, B, C>(f: (a: A) => Either<B, C>) {
336
336
  Initial: () => [Initial(), Initial()],
337
337
  Pending: () => [Pending(), Pending()],
338
338
  Refresh: (a) =>
339
- f(a).match(
340
- (b) => [Refresh(b), Initial()],
341
- (c) => [Initial(), Refresh(c)],
342
- ),
339
+ f(a).match({
340
+ Left: (b) => [Refresh(b), Initial()],
341
+ Right: (c) => [Initial(), Refresh(c)],
342
+ }),
343
343
  Replete: (a) =>
344
- f(a).match(
345
- (b) => [Replete(b), Initial()],
346
- (c) => [Initial(), Replete(c)],
347
- ),
344
+ f(a).match({
345
+ Left: (b) => [Replete(b), Initial()],
346
+ Right: (c) => [Initial(), Replete(c)],
347
+ }),
348
348
  });
349
349
  };
350
350
  }
@@ -303,16 +303,16 @@ export function partitionMap<A, B, C>(f: (a: A) => Either<B, C>) {
303
303
  Pending: () => [self.unsafeCoerce(), self.unsafeCoerce()],
304
304
  RefreshLeft: () => [self.unsafeCoerce(), self.unsafeCoerce()],
305
305
  RefreshRight: (a) =>
306
- f(a).match(
307
- (b) => [DatumEither.refreshRight(b), DatumEither.initial()],
308
- (c) => [DatumEither.initial(), DatumEither.refreshRight(c)],
309
- ),
306
+ f(a).match({
307
+ Left: (b) => [DatumEither.refreshRight(b), DatumEither.initial()],
308
+ Right: (c) => [DatumEither.initial(), DatumEither.refreshRight(c)],
309
+ }),
310
310
  RepleteLeft: () => [self.unsafeCoerce(), self.unsafeCoerce()],
311
311
  RepleteRight: (a) =>
312
- f(a).match(
313
- (b) => [DatumEither.repleteRight(b), DatumEither.initial()],
314
- (c) => [DatumEither.initial(), DatumEither.repleteRight(c)],
315
- ),
312
+ f(a).match({
313
+ Left: (b) => [DatumEither.repleteRight(b), DatumEither.initial()],
314
+ Right: (c) => [DatumEither.initial(), DatumEither.repleteRight(c)],
315
+ }),
316
316
  });
317
317
  };
318
318
  }