@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
@@ -97,20 +97,20 @@ export function foldMap<A, M>(f: (a: A) => M, /** @tsplus auto */ M: P.Monoid<M>
97
97
  * @tsplus getter fncts.Either getLeft
98
98
  */
99
99
  export function getLeft<E, A>(self: Either<E, A>): Maybe<E> {
100
- return self.match(
101
- (e) => Just(e),
102
- (_a) => Nothing(),
103
- );
100
+ return self.match({
101
+ Left: (e) => Just(e),
102
+ Right: (_a) => Nothing(),
103
+ });
104
104
  }
105
105
 
106
106
  /**
107
107
  * @tsplus getter fncts.Either getRight
108
108
  */
109
109
  export function getRight<E, A>(self: Either<E, A>): Maybe<A> {
110
- return self.match(
111
- (_e) => Nothing(),
112
- (a) => Just(a),
113
- );
110
+ return self.match({
111
+ Left: (_e) => Nothing(),
112
+ Right: (a) => Just(a),
113
+ });
114
114
  }
115
115
 
116
116
  /**
@@ -118,7 +118,7 @@ export function getRight<E, A>(self: Either<E, A>): Maybe<A> {
118
118
  */
119
119
  export function getOrElse<E, B>(orElse: (e: E) => B) {
120
120
  return <A>(self: Either<E, A>): A | B => {
121
- return self.match(orElse, identity);
121
+ return self.match({ Left: orElse, Right: identity });
122
122
  };
123
123
  }
124
124
 
@@ -172,7 +172,7 @@ export function mapLeft<E1, E2>(f: (e: E1) => E2) {
172
172
  * @tsplus getter fncts.Either value
173
173
  */
174
174
  export function merge<E, A>(self: Either<E, A>): E | A {
175
- return self.match(identity, identity);
175
+ return self.match({ Left: identity, Right: identity });
176
176
  }
177
177
 
178
178
  /**
@@ -201,10 +201,10 @@ export function _traverse<E, A>(self: Either<E, A>) {
201
201
  <K, Q, W, X, I, S, R, E1, B>(
202
202
  f: (a: A) => HKT.Kind<G, GC, K, Q, W, X, I, S, R, E1, B>,
203
203
  ): HKT.Kind<G, GC, K, Q, W, X, I, S, R, E1, Either<E, B>> =>
204
- self.match(
205
- (e) => G.pure(Left(e)),
206
- (a) => f(a).pipe(G.map((b) => Right(b))),
207
- );
204
+ self.match({
205
+ Left: (e) => G.pure(Left(e)),
206
+ Right: (a) => f(a).pipe(G.map((b) => Right(b))),
207
+ });
208
208
  }
209
209
 
210
210
  export const traverse_: P.Traversable<EitherF>["traverse"] = (A) => (f) => (self) => self.traverse(A)(f);
@@ -288,10 +288,10 @@ export function partition<E, A>(p: Predicate<A>, /** @tsplus auto */ M: P.Monoid
288
288
  * @tsplus getter fncts.Either toMaybe
289
289
  */
290
290
  export function toMaybe<E, A>(self: Either<E, A>): Maybe<A> {
291
- return self.match(
292
- () => Nothing(),
293
- (a) => Just(a),
294
- );
291
+ return self.match({
292
+ Left: () => Nothing(),
293
+ Right: (a) => Just(a),
294
+ });
295
295
  }
296
296
 
297
297
  // codegen:start { preset: barrel, include: api/*.ts }
@@ -3,14 +3,14 @@ import { EitherTag } from "./definition.js";
3
3
  /**
4
4
  * @tsplus pipeable fncts.Either match
5
5
  */
6
- export function match<E, A, B, C>(left: (e: E) => B, right: (a: A) => C) {
6
+ export function match<E, A, B, C>(cases: { Left: (e: E) => B; Right: (a: A) => C }) {
7
7
  return (self: Either<E, A>): B | C => {
8
8
  self.concrete();
9
9
  switch (self._tag) {
10
10
  case EitherTag.Left:
11
- return left(self.left);
11
+ return cases.Left(self.left);
12
12
  case EitherTag.Right:
13
- return right(self.right);
13
+ return cases.Right(self.right);
14
14
  }
15
15
  };
16
16
  }
@@ -20,18 +20,18 @@ export function getEq<E, A>(EE: P.Eq<E>, EA: P.Eq<A>): P.Eq<Either<E, A>> {
20
20
  return P.Eq({
21
21
  equals: (y) => (x) =>
22
22
  x === y ||
23
- x.match(
24
- (e1) =>
25
- y.match(
26
- (e2) => EE.equals(e2)(e1),
27
- () => false,
28
- ),
29
- (a1) =>
30
- y.match(
31
- () => false,
32
- (a2) => EA.equals(a2)(a1),
33
- ),
34
- ),
23
+ x.match({
24
+ Left: (e1) =>
25
+ y.match({
26
+ Left: (e2) => EE.equals(e2)(e1),
27
+ Right: () => false,
28
+ }),
29
+ Right: (a1) =>
30
+ y.match({
31
+ Left: () => false,
32
+ Right: (a2) => EA.equals(a2)(a1),
33
+ }),
34
+ }),
35
35
  });
36
36
  }
37
37
 
@@ -122,10 +122,10 @@ export function flatMap<F extends HKT, FC>(F: P.Monad<F, FC>) {
122
122
  >) =>
123
123
  F.flatMap(
124
124
  (either) =>
125
- either.match(
126
- (e) => F.pure(Either.left(e)),
127
- (a) => f(a),
128
- ) as HKT.Kind<
125
+ either.match({
126
+ Left: (e) => F.pure(Either.left(e)),
127
+ Right: (a) => f(a),
128
+ }) as HKT.Kind<
129
129
  F,
130
130
  FC,
131
131
  HKT.Intro<F, "K", K, K1>,
@@ -225,9 +225,9 @@ export function orElse<F>(F: P.Monad<HKT.F1<F>>) {
225
225
  that: Lazy<HKT.FK1<F, Either<E1, B>>>,
226
226
  ): ((self: HKT.FK1<F, Either<E, A>>) => HKT.FK1<F, Either<E | E1, A | B>>) =>
227
227
  F.flatMap((either) =>
228
- either.match(
229
- () => that(),
230
- () => F.pure(either),
231
- ),
228
+ either.match({
229
+ Left: () => that(),
230
+ Right: () => F.pure(either),
231
+ }),
232
232
  );
233
233
  }
@@ -18,7 +18,7 @@ export function fail<E = never, A = never>(e: E, __tsplusTrace?: string): Exit<E
18
18
  * @tsplus static fncts.ExitOps fromEither
19
19
  */
20
20
  export function fromEither<E = never, A = never>(e: Either<E, A>): Exit<E, A> {
21
- return e.match(fail, succeed);
21
+ return e.match({ Left: fail, Right: succeed });
22
22
  }
23
23
 
24
24
  /**
@@ -0,0 +1,17 @@
1
+ const globalStoreId = Symbol.for("fncts.GlobalStore");
2
+
3
+ if (!(globalStoreId in globalThis)) {
4
+ (globalThis as any)[globalStoreId] = new Map();
5
+ }
6
+
7
+ const globalStore = (globalThis as any)[globalStoreId] as Map<unknown, any>;
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+ export const globalValue = <A>(id: unknown, compute: () => A): A => {
13
+ if (!globalStore.has(id)) {
14
+ globalStore.set(id, compute());
15
+ }
16
+ return globalStore.get(id)!;
17
+ };
@@ -95,10 +95,10 @@ export function partitionMap<A, B, C>(f: (a: A) => Either<B, C>) {
95
95
  return (self: Maybe<A>): readonly [Maybe<B>, Maybe<C>] => {
96
96
  self.concrete();
97
97
  if (self._tag === MaybeTag.Just) {
98
- return f(self.value).match(
99
- (b) => [Just(b), Nothing()],
100
- (c) => [Nothing(), Just(c)],
101
- );
98
+ return f(self.value).match({
99
+ Left: (b) => [Just(b), Nothing()],
100
+ Right: (c) => [Nothing(), Just(c)],
101
+ });
102
102
  } else {
103
103
  return [Nothing(), Nothing()];
104
104
  }
package/_src/data.ts CHANGED
@@ -6,6 +6,7 @@ export type {} from "./data/Byte.js";
6
6
  export type {} from "./data/CaseClass.js";
7
7
  export type {} from "./data/Cause.js";
8
8
  export type {} from "./data/Const.js";
9
+ export type {} from "./data/Date.js";
9
10
  export type {} from "./data/DatumEither.js";
10
11
  export type {} from "./data/DecodeError.js";
11
12
  export type {} from "./data/Decoder.js";
@@ -21,6 +22,7 @@ export type {} from "./data/ExecutionStrategy.js";
21
22
  export type {} from "./data/Exit.js";
22
23
  export type {} from "./data/FiberId.js";
23
24
  export type {} from "./data/function.js";
25
+ export type {} from "./data/Global.js";
24
26
  export type {} from "./data/Guard.js";
25
27
  export type {} from "./data/Hash.js";
26
28
  export type {} from "./data/Hashable.js";
@@ -0,0 +1,12 @@
1
+ import type { Fold, FoldPartiallyApplied } from "@fncts/base/optics/Fold";
2
+
3
+ /**
4
+ * @tsplus pipeable global focus 4
5
+ */
6
+ export function focus<S, A>(fold: Fold<S, A>) {
7
+ return (self: S): FoldPartiallyApplied<A> => {
8
+ return {
9
+ foldMap: (M) => (f) => fold.foldMap(M)(f)(self),
10
+ };
11
+ };
12
+ }
@@ -1,8 +1,13 @@
1
1
  import type { Monoid } from "@fncts/base/typeclass";
2
+
2
3
  export interface foldMap<S, A> {
3
4
  <M>(M: Monoid<M>): (f: (a: A) => M) => (s: S) => M;
4
5
  }
5
6
 
7
+ export interface foldMapPartiallyApplied<A> {
8
+ <M>(M: Monoid<M>): (f: (a: A) => M) => M;
9
+ }
10
+
6
11
  /**
7
12
  * @tsplus type fncts.optics.Fold
8
13
  */
@@ -10,6 +15,10 @@ export interface Fold<S, A> {
10
15
  readonly foldMap: foldMap<S, A>;
11
16
  }
12
17
 
18
+ export interface FoldPartiallyApplied<A> {
19
+ readonly foldMap: foldMapPartiallyApplied<A>;
20
+ }
21
+
13
22
  /**
14
23
  * @tsplus type fncts.optics.FoldOps
15
24
  */
@@ -1,9 +1,13 @@
1
- import type { Fold } from "@fncts/base/optics/Fold";
1
+ import type { Fold, FoldPartiallyApplied } from "@fncts/base/optics/Fold";
2
2
 
3
3
  export interface get<S, A> {
4
4
  (s: S): A;
5
5
  }
6
6
 
7
+ export interface getPartiallyApplied<A> {
8
+ (): A;
9
+ }
10
+
7
11
  /**
8
12
  * @tsplus type fncts.optics.Getter
9
13
  */
@@ -11,6 +15,10 @@ export interface Getter<S, A> extends Fold<S, A> {
11
15
  readonly get: get<S, A>;
12
16
  }
13
17
 
18
+ export interface GetterPartiallyApplied<A> extends FoldPartiallyApplied<A> {
19
+ readonly get: getPartiallyApplied<A>;
20
+ }
21
+
14
22
  /**
15
23
  * @tsplus type fncts.optics.GetterOps
16
24
  */
@@ -2,7 +2,8 @@ import type { At } from "@fncts/base/optics/At";
2
2
  import type { Iso } from "@fncts/base/optics/Iso";
3
3
 
4
4
  import { Index } from "@fncts/base/optics/Index/definition";
5
- import { Prism } from "@fncts/base/optics/Prism";
5
+ import { Optional } from "@fncts/base/optics/Optional/definition";
6
+ import { Prism } from "@fncts/base/optics/Prism/definition";
6
7
 
7
8
  /**
8
9
  * @tsplus static fncts.optics.IndexOps fromAt
@@ -17,3 +18,16 @@ export function fromAt<T, J, B>(at: At<T, J, Maybe<B>>): Index<T, J, B> {
17
18
  export function fromIso<T, S>(iso: Iso<T, S>) {
18
19
  return <I, A>(index: Index<S, I, A>): Index<T, I, A> => Index({ index: (i) => iso.compose(index.index(i)) });
19
20
  }
21
+
22
+ /**
23
+ * @tsplus static fncts.optics.IndexOps array
24
+ */
25
+ export function array<A = never>(): Index<ReadonlyArray<A>, number, A> {
26
+ return Index({
27
+ index: (i) =>
28
+ Optional({
29
+ getOrModify: (s) => (i in s ? Either.right(s[i]!) : Either.left(s)),
30
+ set: (a) => (s) => s.updateAt(i, a),
31
+ }),
32
+ });
33
+ }
@@ -1,3 +1,7 @@
1
+ import type { PIsoPartiallyApplied } from "@fncts/base/optics/Iso/definition";
2
+ import type { PLens } from "@fncts/base/optics/Lens";
3
+ import type { PPrism } from "@fncts/base/optics/Prism";
4
+
1
5
  import { PIso } from "@fncts/base/optics/Iso/definition";
2
6
 
3
7
  /**
@@ -11,3 +15,15 @@ export function compose<A, B, C, D>(that: PIso<A, B, C, D>) {
11
15
  });
12
16
  };
13
17
  }
18
+
19
+ /**
20
+ * @tsplus pipeable global focus
21
+ */
22
+ export function focus<S, T, A, B>(iso: PIso<S, T, A, B>) {
23
+ return (self: S): PIsoPartiallyApplied<T, A, B> => {
24
+ return {
25
+ ...self.focus(iso as PLens<S, T, A, B>),
26
+ ...self.focus(iso as PPrism<S, T, A, B>),
27
+ };
28
+ };
29
+ }
@@ -1,5 +1,6 @@
1
1
  import type { get } from "@fncts/base/optics/Getter";
2
- import type { reverseGet } from "@fncts/base/optics/Prism";
2
+ import type { PLensPartiallyApplied } from "@fncts/base/optics/Lens";
3
+ import type { PPrismPartiallyApplied, reverseGet } from "@fncts/base/optics/Prism";
3
4
 
4
5
  import { PLens } from "@fncts/base/optics/Lens";
5
6
  import { PPrism } from "@fncts/base/optics/Prism";
@@ -11,6 +12,10 @@ export interface PIso<S, T, A, B> extends PLens<S, T, A, B>, PPrism<S, T, A, B>
11
12
  readonly reverse: () => PIso<B, A, T, S>;
12
13
  }
13
14
 
15
+ export interface PIsoPartiallyApplied<T, A, B>
16
+ extends PLensPartiallyApplied<T, A, B>,
17
+ PPrismPartiallyApplied<T, A, B> {}
18
+
14
19
  /**
15
20
  * @tsplus type fncts.optics.PIsoOps
16
21
  */
@@ -1,10 +1,24 @@
1
- import type { Optional } from "@fncts/base/optics/Optional";
1
+ import type { PLensPartiallyApplied } from "@fncts/base/optics/Lens/definition";
2
+ import type { Optional, POptional } from "@fncts/base/optics/Optional";
3
+ import type { PTraversal } from "@fncts/base/optics/Traversal";
2
4
  import type { AutoPath, Path } from "@fncts/typelevel/Object";
3
5
 
4
6
  import { identity } from "@fncts/base/data/function";
5
7
  import { Lens, PLens } from "@fncts/base/optics/Lens/definition";
6
8
  import { Prism } from "@fncts/base/optics/Prism";
7
9
 
10
+ /**
11
+ * @tsplus pipeable global focus
12
+ */
13
+ export function focus<S, T, A, B>(lens: PLens<S, T, A, B>) {
14
+ return (self: S): PLensPartiallyApplied<T, A, B> => {
15
+ return {
16
+ ...self.focus(lens as POptional<S, T, A, B>),
17
+ get: () => lens.get(self),
18
+ };
19
+ };
20
+ }
21
+
8
22
  /**
9
23
  * @tsplus pipeable fncts.optics.PLens component
10
24
  */
@@ -114,16 +128,14 @@ function nestPath<A>(p: ReadonlyNonEmptyArray<string>, a: A): Record<string, unk
114
128
  return out;
115
129
  }
116
130
 
117
- /**
118
- * @tsplus pipeable fncts.optics.Lens path
119
- */
120
- export function path<A extends Record<string, unknown>, P extends Array<string>>(path: readonly [...AutoPath<A, P>]) {
121
- return <S>(self: Lens<S, A>): Lens<S, Path<A, P>> => {
131
+ function anyPath(path: ReadonlyArray<string>) {
132
+ return (self: Lens<any, any>): Lens<any, any> => {
122
133
  return Lens({
123
- get: (s) => path.foldLeft<string, Record<string, unknown>>(self.get(s), (b, p) => b[p] as A) as Path<A, P>,
134
+ get: (s) =>
135
+ path.foldLeft<string, Record<string, unknown>>(self.get(s), (b, p) => b[p] as Record<string, unknown>),
124
136
  set: (a) => (s) => {
125
137
  const os = self.get(s);
126
- const oa = path.foldLeft(os, (b, p) => b[p as string] as A);
138
+ const oa = path.foldLeft(os, (b, p) => b[p as string] as Record<string, unknown>);
127
139
  if (a === oa) {
128
140
  return s;
129
141
  }
@@ -132,3 +144,19 @@ export function path<A extends Record<string, unknown>, P extends Array<string>>
132
144
  });
133
145
  };
134
146
  }
147
+
148
+ /**
149
+ * @tsplus pipeable fncts.optics.Lens path
150
+ */
151
+ export function path<A extends Record<string, unknown>, P extends Array<string>>(path: readonly [...AutoPath<A, P>]) {
152
+ return <S>(self: Lens<S, A>): Lens<S, Path<A, P>> => {
153
+ return anyPath(path)(self);
154
+ };
155
+ }
156
+
157
+ /**
158
+ * @tsplus static fncts.optics.LensOps fromPath
159
+ */
160
+ export function fromPath<S, P extends Array<string>>(path: readonly [...AutoPath<S, P>]): Lens<S, Path<S, P>> {
161
+ return anyPath(path)(Lens.id());
162
+ }
@@ -1,4 +1,5 @@
1
- import type { get } from "@fncts/base/optics/Getter";
1
+ import type { get, GetterPartiallyApplied } from "@fncts/base/optics/Getter";
2
+ import type { POptionalPartiallyApplied } from "@fncts/base/optics/Optional";
2
3
  import type { set } from "@fncts/base/optics/Setter";
3
4
 
4
5
  import { Getter } from "@fncts/base/optics/Getter";
@@ -9,6 +10,8 @@ import { POptional } from "@fncts/base/optics/Optional";
9
10
  */
10
11
  export interface PLens<S, T, A, B> extends POptional<S, T, A, B>, Getter<S, A> {}
11
12
 
13
+ export interface PLensPartiallyApplied<T, A, B> extends POptionalPartiallyApplied<T, A, B>, GetterPartiallyApplied<A> {}
14
+
12
15
  /**
13
16
  * @tsplus type fncts.optics.PLensOps
14
17
  */
@@ -0,0 +1,16 @@
1
+ import type { POptional, POptionalPartiallyApplied } from "@fncts/base/optics/Optional";
2
+ import type { PTraversal } from "@fncts/base/optics/Traversal";
3
+
4
+ /**
5
+ * @tsplus pipeable global focus 1
6
+ */
7
+ export function focus<S, T, A, B>(optional: POptional<S, T, A, B>) {
8
+ return (self: S): POptionalPartiallyApplied<T, A, B> => {
9
+ return {
10
+ ...self.focus(optional as PTraversal<S, T, A, B>),
11
+ getMaybe: () => optional.getMaybe(self),
12
+ modifyMaybe: (f) => optional.modifyMaybe(f)(self),
13
+ getOrModify: () => optional.getOrModify(self),
14
+ };
15
+ };
16
+ }
@@ -0,0 +1,10 @@
1
+ import type { Optional } from "@fncts/base/optics/Optional/definition";
2
+
3
+ import { Index } from "@fncts/base/optics/Index";
4
+
5
+ /**
6
+ * @tsplus static fncts.optics.OptionalOps index
7
+ */
8
+ export function index<A>(index: number): Optional<ReadonlyArray<A>, A> {
9
+ return Index.array<A>().index(index);
10
+ }
@@ -1,4 +1,5 @@
1
1
  import type { set } from "@fncts/base/optics/Setter";
2
+ import type { PTraversalPartiallyApplied } from "@fncts/base/optics/Traversal";
2
3
 
3
4
  import { pipe } from "@fncts/base/data/function";
4
5
  import { PTraversal } from "@fncts/base/optics/Traversal";
@@ -12,6 +13,12 @@ export interface POptional<S, T, A, B> extends PTraversal<S, T, A, B> {
12
13
  readonly modifyMaybe: modifyMaybe<S, T, A, B>;
13
14
  }
14
15
 
16
+ export interface POptionalPartiallyApplied<T, A, B> extends PTraversalPartiallyApplied<T, A, B> {
17
+ readonly getMaybe: getMaybePartiallyApplied<A>;
18
+ readonly getOrModify: getOrModifyPartiallyApplied<T, A>;
19
+ readonly modifyMaybe: modifyMaybePartiallyApplied<T, A, B>;
20
+ }
21
+
15
22
  export interface POptionalMin<S, T, A, B> {
16
23
  readonly getOrModify: getOrModify<S, T, A>;
17
24
  readonly set: set<S, T, B>;
@@ -35,10 +42,10 @@ export function makePOptional<S, T, A, B>(F: POptionalMin<S, T, A, B>): POptiona
35
42
  modifyMaybe: (f) => (s) => getMaybe(s).map((a) => pipe(s, F.set(f(a)))),
36
43
  ...PTraversal<S, T, A, B>({
37
44
  modifyA: (A) => (f) => (s) =>
38
- F.getOrModify(s).match(
39
- (t) => A.pure(t),
40
- (a) => f(a).pipe(A.map((b) => s.pipe(F.set(b)))),
41
- ),
45
+ F.getOrModify(s).match({
46
+ Left: (t) => A.pure(t),
47
+ Right: (a) => f(a).pipe(A.map((b) => s.pipe(F.set(b)))),
48
+ }),
42
49
  }),
43
50
  };
44
51
  }
@@ -81,3 +88,15 @@ export interface replaceMaybe_<S, T, B> {
81
88
  export interface replaceMaybe<S, T, B> {
82
89
  (b: B): (s: S) => Maybe<T>;
83
90
  }
91
+
92
+ export interface getMaybePartiallyApplied<A> {
93
+ (): Maybe<A>;
94
+ }
95
+
96
+ export interface getOrModifyPartiallyApplied<T, A> {
97
+ (): Either<T, A>;
98
+ }
99
+
100
+ export interface modifyMaybePartiallyApplied<T, A, B> {
101
+ (f: (a: A) => B): Maybe<T>;
102
+ }
@@ -1,6 +1,8 @@
1
1
  // codegen:start { preset: barrel, include: ./Optional/*.ts }
2
+ export * from "./Optional/api.js";
2
3
  export * from "./Optional/definition.js";
3
4
  // codegen:end
4
5
  // codegen:start { preset: barrel, include: ./Optional/api/*.ts }
5
6
  export * from "./Optional/api/compose.js";
7
+ export * from "./Optional/api/focus.js";
6
8
  // codegen:end
@@ -0,0 +1,14 @@
1
+ import type { POptional } from "@fncts/base/optics/Optional";
2
+ import type { PPrism, PPrismPartiallyApplied } from "@fncts/base/optics/Prism";
3
+
4
+ /**
5
+ * @tsplus pipeable global focus
6
+ */
7
+ export function focus<S, T, A, B>(prism: PPrism<S, T, A, B>) {
8
+ return (self: S): PPrismPartiallyApplied<T, A, B> => {
9
+ return {
10
+ ...self.focus(prism as POptional<S, T, A, B>),
11
+ reverseGet: prism.reverseGet,
12
+ };
13
+ };
14
+ }
@@ -1,4 +1,4 @@
1
- import type { getOrModify } from "@fncts/base/optics/Optional";
1
+ import type { getOrModify, POptionalPartiallyApplied } from "@fncts/base/optics/Optional";
2
2
 
3
3
  import { identity } from "@fncts/base/data/function";
4
4
  import { POptional } from "@fncts/base/optics/Optional";
@@ -10,6 +10,10 @@ export interface PPrism<S, T, A, B> extends POptional<S, T, A, B> {
10
10
  readonly reverseGet: reverseGet<T, B>;
11
11
  }
12
12
 
13
+ export interface PPrismPartiallyApplied<T, A, B> extends POptionalPartiallyApplied<T, A, B> {
14
+ readonly reverseGet: reverseGet<T, B>;
15
+ }
16
+
13
17
  /**
14
18
  * @tsplus type fncts.optics.PPrismOps
15
19
  */
@@ -30,7 +34,7 @@ export function makePPrism<S, T, A, B>(F: PPrismMin<S, T, A, B>): PPrism<S, T, A
30
34
  reverseGet: F.reverseGet,
31
35
  ...POptional({
32
36
  getOrModify: F.getOrModify,
33
- set: (b) => (s) => F.getOrModify(s).match(identity, () => F.reverseGet(b)),
37
+ set: (b) => (s) => F.getOrModify(s).match({ Left: identity, Right: () => F.reverseGet(b) }),
34
38
  }),
35
39
  };
36
40
  }
@@ -3,6 +3,7 @@ export * from "./Prism/definition.js";
3
3
  // codegen:end
4
4
  // codegen:start { preset: barrel, include: ./Prism/api/*.ts }
5
5
  export * from "./Prism/api/compose.js";
6
+ export * from "./Prism/api/focus.js";
6
7
  export * from "./Prism/api/fromNullable.js";
7
8
  export * from "./Prism/api/just.js";
8
9
  // codegen:end
@@ -0,0 +1,13 @@
1
+ import type { PSetter, PSetterPartiallyApplied } from "@fncts/base/optics/Setter";
2
+
3
+ /**
4
+ * @tsplus pipeable global focus 3
5
+ */
6
+ export function focus<S, T, A, B>(setter: PSetter<S, T, A, B>) {
7
+ return (self: S): PSetterPartiallyApplied<T, A, B> => {
8
+ return {
9
+ set: (b) => setter.set(b)(self),
10
+ modify: (f) => setter.modify(f)(self),
11
+ };
12
+ };
13
+ }
@@ -6,6 +6,11 @@ export interface PSetter<S, T, A, B> {
6
6
  readonly set: set<S, T, B>;
7
7
  }
8
8
 
9
+ export interface PSetterPartiallyApplied<T, A, B> {
10
+ readonly modify: modifyPartiallyApplied<T, A, B>;
11
+ readonly set: setPartiallyApplied<T, B>;
12
+ }
13
+
9
14
  /**
10
15
  * @tsplus type fncts.optics.PSetterOps
11
16
  */
@@ -44,3 +49,11 @@ export interface modify<S, T, A, B> {
44
49
  export interface set<S, T, B> {
45
50
  (b: B): (s: S) => T;
46
51
  }
52
+
53
+ export interface modifyPartiallyApplied<T, A, B> {
54
+ (f: (a: A) => B): T;
55
+ }
56
+
57
+ export interface setPartiallyApplied<T, B> {
58
+ (b: B): T;
59
+ }
@@ -0,0 +1,16 @@
1
+ import type { Fold } from "@fncts/base/optics/Fold";
2
+ import type { PSetter } from "@fncts/base/optics/Setter";
3
+ import type { PTraversal, PTraversalPartiallyApplied } from "@fncts/base/optics/Traversal";
4
+
5
+ /**
6
+ * @tsplus pipeable global focus 2
7
+ */
8
+ export function focus<S, T, A, B>(traversal: PTraversal<S, T, A, B>) {
9
+ return (self: S): PTraversalPartiallyApplied<T, A, B> => {
10
+ return {
11
+ ...self.focus(traversal as PSetter<S, T, A, B>),
12
+ ...self.focus(traversal as Fold<S, A>),
13
+ modifyA: (F) => (f) => traversal.modifyA(F)(f)(self),
14
+ };
15
+ };
16
+ }
@@ -1,3 +1,5 @@
1
+ import type { FoldPartiallyApplied } from "@fncts/base/optics/Fold";
2
+ import type { PSetterPartiallyApplied } from "@fncts/base/optics/Setter";
1
3
  import type { Applicative, Monoid } from "@fncts/base/typeclass";
2
4
 
3
5
  import { Fold } from "@fncts/base/optics/Fold";
@@ -14,6 +16,14 @@ export interface PTraversal<S, T, A, B> extends PSetter<S, T, A, B>, Fold<S, A>
14
16
  ) => (s: S) => HKT.Kind<F, FC, K, Q, W, X, I, _S, R, E, T>;
15
17
  }
16
18
 
19
+ export interface PTraversalPartiallyApplied<T, A, B> extends PSetterPartiallyApplied<T, A, B>, FoldPartiallyApplied<A> {
20
+ modifyA: <F extends HKT, FC = HKT.None>(
21
+ F: Applicative<F, FC>,
22
+ ) => <K, Q, W, X, I, _S, R, E>(
23
+ f: (a: A) => HKT.Kind<F, FC, K, Q, W, X, I, _S, R, E, B>,
24
+ ) => HKT.Kind<F, FC, K, Q, W, X, I, _S, R, E, T>;
25
+ }
26
+
17
27
  export interface PTraversalMin<S, T, A, B> {
18
28
  modifyA: <F extends HKT, FC = HKT.None>(
19
29
  F: Applicative<F, FC>,
@@ -3,5 +3,6 @@ export * from "./Traversal/definition.js";
3
3
  // codegen:end
4
4
  // codegen:start { preset: barrel, include: ./Traversal/api/*.ts }
5
5
  export * from "./Traversal/api/compose.js";
6
+ export * from "./Traversal/api/focus.js";
6
7
  export * from "./Traversal/api/fromTraversable.js";
7
8
  // codegen:end