functype 0.12.0 → 0.14.0

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.
package/README.md CHANGED
@@ -23,6 +23,7 @@ Functype is a lightweight functional programming library for TypeScript, drawing
23
23
  - **Either Type**: Express computation results with potential failures using `Left` and `Right`
24
24
  - **List, Set, Map**: Immutable collection types with functional operators
25
25
  - **Try Type**: Safely execute operations that might throw exceptions
26
+ - **Do-notation**: Scala-like for-comprehensions using JavaScript generators for monadic composition
26
27
  - **Task**: Handle synchronous and asynchronous operations with error handling
27
28
  - **Lazy**: Deferred computation with memoization
28
29
  - **Tuple**: Type-safe fixed-length arrays
@@ -189,6 +190,67 @@ const result = Lazy(() => 10)
189
190
  .get() // 30
190
191
  ```
191
192
 
193
+ ### Do-notation (Scala-like For-Comprehensions)
194
+
195
+ Functype provides generator-based Do-notation for monadic composition, similar to Scala's for-comprehensions:
196
+
197
+ ```typescript
198
+ import { Do, DoAsync, $ } from "functype"
199
+ import { Option, Right, Left, List, Try } from "functype"
200
+
201
+ // Chain multiple Option operations
202
+ const result = Do(function* () {
203
+ const x = yield* $(Option(5)) // Extract value from Option
204
+ const y = yield* $(Option(10)) // Extract value from another Option
205
+ const z = x + y // Regular computation
206
+ return z * 2 // Return final result
207
+ })
208
+ // result: Option<number> with value 30
209
+
210
+ // Mix different monad types (with Reshapeable)
211
+ const mixed = Do(function* () {
212
+ const a = yield* $(Option(5)) // From Option
213
+ const b = yield* $(Right<string, number>(10)) // From Either
214
+ const c = yield* $(List([15])) // From List
215
+ const d = yield* $(Try(() => 20)) // From Try
216
+ return a + b + c + d
217
+ })
218
+ // Convert result to desired type
219
+ const asOption = mixed.toOption() // Option<number> with value 50
220
+
221
+ // Error propagation - short-circuits on failure
222
+ const validation = Do(function* () {
223
+ const email = yield* $(validateEmail("user@example.com")) // Returns Option
224
+ const user = yield* $(fetchUser(email)) // Returns Either
225
+ const profile = yield* $(loadProfile(user.id)) // Returns Try
226
+ return profile
227
+ })
228
+ // If any step fails, the entire computation short-circuits
229
+
230
+ // List comprehensions (cartesian products)
231
+ const pairs = Do(function* () {
232
+ const x = yield* $(List([1, 2, 3]))
233
+ const y = yield* $(List([10, 20]))
234
+ return { x, y, product: x * y }
235
+ })
236
+ // pairs: List with 6 elements (all combinations)
237
+
238
+ // Async operations with DoAsync
239
+ const asyncResult = await DoAsync(async function* () {
240
+ const user = yield* $(await fetchUserAsync(userId)) // Async Option
241
+ const score = yield* $(await getScoreAsync(user.id)) // Async Either
242
+ const bonus = yield* $(await calculateBonus(score)) // Async Try
243
+ return score + bonus
244
+ })
245
+ ```
246
+
247
+ **Key Differences from Scala:**
248
+
249
+ - Uses `yield* $(monad)` instead of `x <- monad`
250
+ - No native guard syntax (use conditions with early return)
251
+ - Always returns the type of the first yielded monad
252
+ - Mixed types supported via Reshapeable interface
253
+
192
254
  ### Task
193
255
 
194
256
  Task v2 provides structured error handling with the **Ok/Err pattern**, returning `TaskOutcome<T>` for all operations:
@@ -1,4 +1,85 @@
1
- import { T as Type, a as Typeable, S as Serializable, F as Foldable, P as Pipe } from './Serializable-CK9upOU0.js';
1
+ import { T as Type, P as Pipe, a as Typeable, S as Serializable, F as Foldable } from './Typeable-CitTP1ay.js';
2
+
3
+ /**
4
+ * Protocol definitions for Do-notation
5
+ * Separated from main Do module to avoid circular dependencies
6
+ */
7
+ /**
8
+ * Protocol symbol for Do-notation unwrapping
9
+ * All monads that support Do-notation should implement this protocol
10
+ */
11
+ declare const DO_PROTOCOL: unique symbol;
12
+ /**
13
+ * Result type for Do-notation unwrapping
14
+ * Indicates whether unwrapping succeeded and provides the value or error
15
+ */
16
+ type DoResult<T> = {
17
+ ok: true;
18
+ value: T;
19
+ } | {
20
+ ok: false;
21
+ empty: true;
22
+ } | {
23
+ ok: false;
24
+ empty: false;
25
+ error: unknown;
26
+ };
27
+ /**
28
+ * Interface for types that support Do-notation
29
+ * Implementing this interface allows a type to be yielded in Do-comprehensions
30
+ */
31
+ interface DoProtocol<T> {
32
+ [DO_PROTOCOL](): DoResult<T>;
33
+ }
34
+
35
+ /**
36
+ * Extractable type class for data structures that can extract their values
37
+ * with various fallback strategies.
38
+ *
39
+ * This interface is implemented by Option, Either, and other types that
40
+ * wrap values and need safe extraction methods.
41
+ */
42
+ interface Extractable<T extends Type> {
43
+ /**
44
+ * Extracts the value unsafely
45
+ * @throws Error if the container is empty
46
+ * @returns The contained value
47
+ */
48
+ get(): T;
49
+ /**
50
+ * Returns the contained value or a default value
51
+ * @param defaultValue - The value to return if extraction fails
52
+ * @returns The contained value or defaultValue
53
+ */
54
+ getOrElse(defaultValue: T): T;
55
+ /**
56
+ * Returns the contained value or throws an error
57
+ * @param error - Optional error to throw (implementations may have defaults)
58
+ * @returns The contained value
59
+ * @throws The specified error if extraction fails
60
+ */
61
+ getOrThrow(error?: Error): T;
62
+ /**
63
+ * Returns this container if it has a value, otherwise returns the alternative
64
+ * @param alternative - The alternative container
65
+ * @returns This container or the alternative
66
+ */
67
+ orElse(alternative: Extractable<T>): Extractable<T>;
68
+ /**
69
+ * Returns the contained value or null
70
+ * @returns The contained value or null
71
+ */
72
+ orNull(): T | null;
73
+ /**
74
+ * Returns the contained value or undefined
75
+ * @returns The contained value or undefined
76
+ */
77
+ orUndefined(): T | undefined;
78
+ }
79
+ /**
80
+ * Type guard to check if a value implements ExtractableOption
81
+ */
82
+ declare function isExtractable<T extends Type>(value: unknown): value is Extractable<T>;
2
83
 
3
84
  /**
4
85
  * Universal operations that work on any container (single-value or collection).
@@ -144,6 +225,164 @@ interface Promisable<A extends Type> {
144
225
  toPromise(): Promise<A>;
145
226
  }
146
227
 
228
+ /**
229
+ * Possible types of Try instances
230
+ */
231
+ type TypeNames = "Success" | "Failure";
232
+ interface Try<T> extends FunctypeBase<T, TypeNames>, Extractable<T>, Pipe<T>, Promisable<T>, DoProtocol<T>, Reshapeable<T> {
233
+ readonly _tag: TypeNames;
234
+ readonly error: Error | undefined;
235
+ isSuccess(): this is Try<T> & {
236
+ readonly _tag: "Success";
237
+ error: undefined;
238
+ };
239
+ isFailure(): this is Try<T> & {
240
+ readonly _tag: "Failure";
241
+ error: Error;
242
+ };
243
+ get: () => T;
244
+ getOrElse: (defaultValue: T) => T;
245
+ getOrThrow: (error?: Error) => T;
246
+ orElse: (alternative: Try<T>) => Try<T>;
247
+ orNull: () => T | null;
248
+ orUndefined: () => T | undefined;
249
+ orThrow: (error: Error) => T;
250
+ toOption: () => Option<T>;
251
+ toEither: <E extends Type>(leftValue: E) => Either<E, T>;
252
+ toList: () => List<T>;
253
+ toTry: () => Try<T>;
254
+ map: <U>(f: (value: T) => U) => Try<U>;
255
+ ap: <U>(ff: Try<(value: T) => U>) => Try<U>;
256
+ flatMap: <U>(f: (value: T) => Try<U>) => Try<U>;
257
+ flatMapAsync: <U>(f: (value: T) => Promise<Try<U>>) => Promise<Try<U>>;
258
+ /**
259
+ * Pattern matches over the Try, applying onFailure if Failure and onSuccess if Success
260
+ * @param onFailure - Function to apply if the Try is Failure
261
+ * @param onSuccess - Function to apply if the Try is Success
262
+ * @returns The result of applying the appropriate function
263
+ */
264
+ fold: <U extends Type>(onFailure: (error: Error) => U, onSuccess: (value: T) => U) => U;
265
+ toString: () => string;
266
+ /**
267
+ * Pattern matches over the Try, applying a handler function based on the variant
268
+ * @param patterns - Object with handler functions for Success and Failure variants
269
+ * @returns The result of applying the matching handler function
270
+ */
271
+ match<R>(patterns: {
272
+ Success: (value: T) => R;
273
+ Failure: (error: Error) => R;
274
+ }): R;
275
+ toValue(): {
276
+ _tag: TypeNames;
277
+ value: T | Error;
278
+ };
279
+ }
280
+ declare const Try: (<T>(f: () => T) => Try<T>) & {
281
+ /**
282
+ * Creates a Try from JSON string
283
+ * @param json - The JSON string
284
+ * @returns Try instance
285
+ */
286
+ fromJSON: <T>(json: string) => Try<T>;
287
+ /**
288
+ * Creates a Try from YAML string
289
+ * @param yaml - The YAML string
290
+ * @returns Try instance
291
+ */
292
+ fromYAML: <T>(yaml: string) => Try<T>;
293
+ /**
294
+ * Creates a Try from binary string
295
+ * @param binary - The binary string
296
+ * @returns Try instance
297
+ */
298
+ fromBinary: <T>(binary: string) => Try<T>;
299
+ };
300
+
301
+ /**
302
+ * Interface for types that can be reshaped (converted) between different monadic containers.
303
+ * Provides standard conversion methods to transform between Option, Either, List, and Try types.
304
+ *
305
+ * @typeParam T - The type of the value contained in the monad
306
+ *
307
+ * @example
308
+ * // Convert Option to Either
309
+ * const opt = Option(5)
310
+ * const either = opt.toEither("None value") // Right(5)
311
+ *
312
+ * @example
313
+ * // Convert Either to Option
314
+ * const right = Right(10)
315
+ * const option = right.toOption() // Some(10)
316
+ *
317
+ * @example
318
+ * // Convert List to Try
319
+ * const list = List([1, 2, 3])
320
+ * const tryVal = list.toTry() // Success(1) - uses first element
321
+ *
322
+ * @example
323
+ * // Use with Do comprehensions
324
+ * const result = Do(function* () {
325
+ * const x = yield* $(Option(5))
326
+ * const y = yield* $(Right<string, number>(10))
327
+ * return x + y
328
+ * })
329
+ *
330
+ * // Convert to desired type for chaining
331
+ * const asOption = result.toOption()
332
+ * asOption.map(x => x * 2).getOrElse(0)
333
+ */
334
+ interface Reshapeable<T extends Type> {
335
+ /**
336
+ * Converts this monad to an Option.
337
+ *
338
+ * Conversion rules:
339
+ * - Option: returns self
340
+ * - Either: Right → Some, Left → None
341
+ * - List: non-empty → Some(head), empty → None
342
+ * - Try: Success → Some, Failure → None
343
+ *
344
+ * @returns An Option containing the value if present, None otherwise
345
+ */
346
+ toOption(): Option<T>;
347
+ /**
348
+ * Converts this monad to an Either.
349
+ *
350
+ * Conversion rules:
351
+ * - Option: Some → Right, None → Left(leftValue)
352
+ * - Either: returns self
353
+ * - List: non-empty → Right(head), empty → Left(leftValue)
354
+ * - Try: Success → Right, Failure → Left(error)
355
+ *
356
+ * @param leftValue - The value to use for the Left case when the source is empty/none/failure
357
+ * @returns An Either with the value as Right or the provided leftValue as Left
358
+ */
359
+ toEither<E extends Type>(leftValue: E): Either<E, T>;
360
+ /**
361
+ * Converts this monad to a List.
362
+ *
363
+ * Conversion rules:
364
+ * - Option: Some → List([value]), None → List([])
365
+ * - Either: Right → List([value]), Left → List([])
366
+ * - List: returns self
367
+ * - Try: Success → List([value]), Failure → List([])
368
+ *
369
+ * @returns A List containing the value(s) if present, empty List otherwise
370
+ */
371
+ toList(): List<T>;
372
+ /**
373
+ * Converts this monad to a Try.
374
+ *
375
+ * Conversion rules:
376
+ * - Option: Some → Success, None → Failure(Error("None"))
377
+ * - Either: Right → Success, Left → Failure(Error(leftValue))
378
+ * - List: non-empty → Success(head), empty → Failure(Error("Empty list"))
379
+ * - Try: returns self
380
+ *
381
+ * @returns A Try containing Success with the value or Failure with an appropriate error
382
+ */
383
+ toTry(): Try<T>;
384
+ }
385
+
147
386
  /**
148
387
  * Creates a Some variant of Option containing a value.
149
388
  * @param value - The value to wrap in Some
@@ -175,7 +414,7 @@ declare const OptionConstructor: <T extends Type>(value: T | null | undefined) =
175
414
  * It's used to handle potentially null or undefined values in a type-safe way.
176
415
  * @typeParam T - The type of the value contained in the Option
177
416
  */
178
- interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T> {
417
+ interface Option<T extends Type> extends Functype<T, "Some" | "None">, Promisable<T>, DoProtocol<T>, Reshapeable<T> {
179
418
  /** The contained value (undefined for None) */
180
419
  readonly value: T | undefined;
181
420
  /** Whether this Option contains no value */
@@ -368,7 +607,7 @@ declare const Option: (<T extends Type>(value: T | null | undefined) => Option<T
368
607
  fromBinary: <T>(binary: string) => Option<T>;
369
608
  };
370
609
 
371
- interface List<A> extends FunctypeCollection<A, "List"> {
610
+ interface List<A> extends FunctypeCollection<A, "List">, DoProtocol<A>, Reshapeable<A> {
372
611
  readonly length: number;
373
612
  readonly [Symbol.iterator]: () => Iterator<A>;
374
613
  map: <B>(f: (a: A) => B) => List<B>;
@@ -464,55 +703,6 @@ interface Collection<A> {
464
703
  toString(): string;
465
704
  }
466
705
 
467
- /**
468
- * Extractable type class for data structures that can extract their values
469
- * with various fallback strategies.
470
- *
471
- * This interface is implemented by Option, Either, and other types that
472
- * wrap values and need safe extraction methods.
473
- */
474
- interface Extractable<T extends Type> {
475
- /**
476
- * Extracts the value unsafely
477
- * @throws Error if the container is empty
478
- * @returns The contained value
479
- */
480
- get(): T;
481
- /**
482
- * Returns the contained value or a default value
483
- * @param defaultValue - The value to return if extraction fails
484
- * @returns The contained value or defaultValue
485
- */
486
- getOrElse(defaultValue: T): T;
487
- /**
488
- * Returns the contained value or throws an error
489
- * @param error - Optional error to throw (implementations may have defaults)
490
- * @returns The contained value
491
- * @throws The specified error if extraction fails
492
- */
493
- getOrThrow(error?: Error): T;
494
- /**
495
- * Returns this container if it has a value, otherwise returns the alternative
496
- * @param alternative - The alternative container
497
- * @returns This container or the alternative
498
- */
499
- orElse(alternative: Extractable<T>): Extractable<T>;
500
- /**
501
- * Returns the contained value or null
502
- * @returns The contained value or null
503
- */
504
- orNull(): T | null;
505
- /**
506
- * Returns the contained value or undefined
507
- * @returns The contained value or undefined
508
- */
509
- orUndefined(): T | undefined;
510
- }
511
- /**
512
- * Type guard to check if a value implements ExtractableOption
513
- */
514
- declare function isExtractable<T extends Type>(value: unknown): value is Extractable<T>;
515
-
516
706
  /**
517
707
  * Pattern matching interface for functional data types.
518
708
  *
@@ -628,7 +818,7 @@ declare const tryCatchAsync: <L extends Type, R extends Type>(f: () => Promise<R
628
818
  * @module Either
629
819
  * @category Core
630
820
  */
631
- interface Either<L extends Type, R extends Type> extends FunctypeBase<R, "Left" | "Right">, Promisable<R> {
821
+ interface Either<L extends Type, R extends Type> extends FunctypeBase<R, "Left" | "Right">, Promisable<R>, DoProtocol<R>, Reshapeable<R> {
632
822
  readonly _tag: "Left" | "Right";
633
823
  value: L | R;
634
824
  isLeft(): this is Either<L, R> & {
@@ -713,4 +903,4 @@ declare const Either: {
713
903
  fromBinary: <L extends Type, R extends Type>(binary: string) => Either<L, R>;
714
904
  };
715
905
 
716
- export { type Applicative as A, type Collection as C, Either as E, type FunctypeBase as F, List as L, type Matchable as M, None as N, Option as O, type Promisable as P, Right as R, Some as S, type Traversable as T, type Extractable as a, type TestEither as b, Left as c, isLeft as d, TypeCheckRight as e, TypeCheckLeft as f, tryCatchAsync as g, isExtractable as h, isRight as i, type Functype as j, type FunctypeCollection as k, MatchableUtils as l, OptionConstructor as m, Set as n, type CollectionOps as o, type ContainerOps as p, type AsyncMonad as q, type Functor as r, type Monad as s, tryCatch as t };
906
+ export { type Applicative as A, type Collection as C, DO_PROTOCOL as D, Either as E, type FunctypeBase as F, List as L, type Matchable as M, None as N, Option as O, type Promisable as P, Right as R, Some as S, Try as T, type DoResult as a, type Extractable as b, type Traversable as c, type DoProtocol as d, type TestEither as e, Left as f, isLeft as g, TypeCheckRight as h, isRight as i, TypeCheckLeft as j, tryCatchAsync as k, isExtractable as l, type Functype as m, type FunctypeCollection as n, MatchableUtils as o, OptionConstructor as p, Set as q, type TypeNames as r, type CollectionOps as s, tryCatch as t, type ContainerOps as u, type AsyncMonad as v, type Functor as w, type Monad as x, type Reshapeable as y };
@@ -0,0 +1,43 @@
1
+ import {a,b as b$1}from'./chunk-BQJB6CCW.mjs';import {a as a$1}from'./chunk-YBBRJTHY.mjs';import me from'safe-stable-stringify';var k=Symbol.for("functype.do.unwrap");var q=Set;var M=t=>{let e=new q(t),r={_tag:"Set",[Symbol.iterator]:()=>e[Symbol.iterator](),add:n=>M([...e,n]),remove:n=>{let o=new q(e);return o.delete(n),M(o)},contains:n=>e.has(n),has:n=>e.has(n),map:n=>M(Array.from(e).map(n)),ap:n=>{let o=new q;for(let a of e)for(let s of n)o.add(s(a));return M(o)},flatMap:n=>{let o=new q;for(let a of e)for(let s of n(a))o.add(s);return M(o)},flatMapAsync:async n=>{let o=new q;for(let a of e){let s=await n(a);for(let i of s)o.add(i);}return M(o)},fold:(n,o)=>{if(e.size===0)return n();let a=Array.from(e);if(a.length===0)return n();let s=a[0];return s===void 0?n():o(s)},foldLeft:n=>o=>{let a=n;for(let s of e)a=o(a,s);return a},foldRight:n=>o=>Array.from(e).reduceRight((s,i)=>o(i,s),n),get size(){return e.size},get isEmpty(){return e.size===0},reduce:n=>{let o=Array.from(e);if(o.length===0)throw new Error("Cannot reduce empty Set");return o.reduce(n)},reduceRight:n=>{let o=Array.from(e);if(o.length===0)throw new Error("Cannot reduceRight empty Set");return o.reduceRight(n)},count:n=>{let o=0;for(let a of e)n(a)&&o++;return o},find:n=>{for(let o of e)if(n(o))return f(o);return f(null)},exists:n=>{for(let o of e)if(n(o))return true;return false},forEach:n=>{e.forEach(n);},filter:n=>{let o=new q;for(let a of e)n(a)&&o.add(a);return M(o)},filterNot:n=>{let o=new q;for(let a of e)n(a)||o.add(a);return M(o)},drop:n=>M(Array.from(e).slice(n)),dropRight:n=>M(Array.from(e).slice(0,-n)),dropWhile:n=>{let o=Array.from(e),a=o.findIndex(s=>!n(s));return M(a===-1?[]:o.slice(a))},flatten:()=>{let n=new q;for(let o of e)if(Array.isArray(o))for(let a of o)n.add(a);else if(o&&typeof o=="object"&&Symbol.iterator in o)for(let a of o)n.add(a);else n.add(o);return M(n)},get head(){return Array.from(e)[0]},get headOption(){let n=Array.from(e)[0];return f(n)},toList:()=>m(Array.from(e)),toSet:()=>r,toArray:()=>Array.from(e),toString:()=>`Set(${Array.from(e).toString()})`,toValue:()=>({_tag:"Set",value:Array.from(e)}),pipe:n=>n(Array.from(e)),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Set",value:Array.from(e)}),toYAML:()=>`_tag: Set
2
+ value: ${JSON.stringify(Array.from(e))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Set",value:Array.from(e)})).toString("base64")})};return r},rt=t=>M(t),Me={fromJSON:t=>{let e=JSON.parse(t);return ne(e.value)},fromYAML:t=>{let r=t.split(`
3
+ `)[1]?.split(": ")[1];if(!r)return ne([]);let n=JSON.parse(r);return ne(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Me.fromJSON(e)}},ne=a(rt,Me);function x(t){let e=t;return {get(){return e},set(n){e=n;},update(n){e=n(e);},getAndSet(n){let o=e;return e=n,o},updateAndGet(n){return e=n(e),e},getAndUpdate(n){let o=e;return e=n(e),o},compareAndSet(n,o){return e===n?(e=o,true):false},modify(n){let[o,a]=n(e);return e=o,a}}}x.of=x;var ie=(t=0)=>{let e=x(t),r=t;return {get:()=>e.get(),set:n=>e.set(n),increment:()=>e.updateAndGet(n=>n+1),decrement:()=>e.updateAndGet(n=>n-1),reset:()=>e.set(r),compareAndSet:(n,o)=>e.compareAndSet(n,o)}};var Ae=()=>{let t=x([]);return {add:e=>t.update(r=>[...r,e]),addAll:e=>t.update(r=>[...r,...e]),build:()=>t.get(),clear:()=>t.set([]),size:()=>t.get().length}};var v=t=>{let e={_tag:"LazyList",[Symbol.iterator]:()=>t[Symbol.iterator](),map:r=>v((function*(){for(let n of t)yield r(n);})()),flatMap:r=>v((function*(){for(let n of t)yield*r(n);})()),filter:r=>v((function*(){for(let n of t)r(n)&&(yield n);})()),take:r=>v((function*(){let n=ie(0);for(let o of t){if(n.get()>=r)break;yield o,n.increment();}})()),drop:r=>v((function*(){let n=ie(0);for(let o of t)n.get()>=r&&(yield o),n.increment();})()),takeWhile:r=>v((function*(){for(let n of t){if(!r(n))break;yield n;}})()),dropWhile:r=>v((function*(){let n=x(true);for(let o of t)n.get()&&r(o)||(n.set(false),yield o);})()),concat:r=>v((function*(){yield*t,yield*r;})()),zip:r=>v((function*(){let n=t[Symbol.iterator](),o=r[Symbol.iterator]();for(;;){let a=n.next(),s=o.next();if(a.done||s.done)break;yield [a.value,s.value];}})()),toList:()=>m(Array.from(t)),toArray:()=>Array.from(t),forEach:r=>{for(let n of t)r(n);},reduce:(r,n)=>{let o=x(n);for(let a of t)o.set(r(o.get(),a));return o.get()},find:r=>{for(let n of t)if(r(n))return f(n);return f.none()},some:r=>{for(let n of t)if(r(n))return true;return false},every:r=>{for(let n of t)if(!r(n))return false;return true},count:()=>{let r=ie(0);for(let n of t)r.increment();return r.get()},first:()=>{let n=t[Symbol.iterator]().next();return n.done?f.none():f(n.value)},last:()=>{let r=x(void 0),n=x(false);for(let o of t)r.set(o),n.set(true);return n.get()?f(r.get()):f.none()},fold:(r,n)=>{let a=t[Symbol.iterator]().next();return a.done?r():n(a.value)},foldLeft:r=>n=>{let o=x(r);for(let a of t)o.set(n(o.get(),a));return o.get()},foldRight:r=>n=>Array.from(t).reduceRight((a,s)=>n(s,a),r),pipe:r=>r(e),serialize:()=>{let r=Array.from(t);return {toJSON:()=>JSON.stringify({_tag:"LazyList",value:r}),toYAML:()=>`_tag: LazyList
4
+ value: ${me(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"LazyList",value:r})).toString("base64")}},toString:()=>{let n=[],o=ie(0),a=x(false);for(let i of t)if(o.get()<10)n.push(i),o.increment();else {a.set(true);break}let s=n.map(i=>String(i)).join(", ");return a.get()?`LazyList(${s}, ...)`:`LazyList(${s})`}};return e},ot=t=>v(t),at={empty:()=>v([]),of:t=>v([t]),from:(...t)=>v(t),iterate:(t,e)=>v((function*(){let r=x(t);for(;;)yield r.get(),r.set(e(r.get()));})()),generate:t=>v((function*(){for(;;)yield t();})()),range:(t,e,r=1)=>v((function*(){if(r===0)throw new Error("Step cannot be zero");let n=x(t);if(r>0)for(;n.get()<e;)yield n.get(),n.set(n.get()+r);else for(;n.get()>e;)yield n.get(),n.set(n.get()+r);})()),repeat:(t,e)=>v((function*(){if(e===void 0)for(;;)yield t;else {let r=ie(0);for(;r.get()<e;)yield t,r.increment();}})()),cycle:t=>v((function*(){let e=Array.from(t);if(e.length!==0)for(;;)yield*e;})())},$t=a(ot,at);var de=t=>({_tag:"Success",error:void 0,isSuccess(){return true},isFailure(){return false},get:()=>t,getOrElse:e=>t,getOrThrow:e=>t,orElse:e=>de(t),orNull:()=>t,orUndefined:()=>t,orThrow:e=>t,toEither:e=>c(t),map:e=>P(()=>e(t)),ap:e=>e.map(r=>r(t)),flatMap:e=>e(t),flatMapAsync:async e=>e(t),fold:(e,r)=>r(t),match:e=>e.Success(t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),toString:()=>`Success(${me(t)})`,toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:"Success",value:t}),toOption:()=>U(t),toList:()=>m([t]),toTry:()=>de(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Success",value:t}),toYAML:()=>`_tag: Success
5
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Success",value:t})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?f(t):f(void 0),exists:e=>e(t),forEach:e=>e(t),[k](){return {ok:true,value:t}}}),$=t=>({_tag:"Failure",error:t,isSuccess(){return false},isFailure(){return true},get:()=>{throw t},getOrElse:e=>e,getOrThrow:e=>{throw e??t},orElse:e=>e,orNull:()=>null,orUndefined:()=>{},orThrow:e=>{throw e},toEither:e=>p(t),map:e=>$(t),ap:e=>$(t),flatMap:e=>$(t),flatMapAsync:e=>Promise.resolve($(t)),fold:(e,r)=>e(t),match:e=>e.Failure(t),foldLeft:e=>r=>e,foldRight:e=>r=>e,toString:()=>`Failure(${me(t)}))`,toPromise:()=>Promise.reject(t),toValue:()=>({_tag:"Failure",value:t}),toOption:()=>w(),toList:()=>m([]),toTry:()=>$(t),pipe:e=>{throw t},serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Failure",error:t.message,stack:t.stack}),toYAML:()=>`_tag: Failure
6
+ error: ${t.message}
7
+ stack: ${t.stack}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Failure",error:t.message,stack:t.stack})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:e=>false,reduce:e=>{throw new Error("Cannot reduce a Failure")},reduceRight:e=>{throw new Error("Cannot reduceRight a Failure")},count:e=>0,find:e=>f(null),exists:e=>false,forEach:e=>{},[k](){return {ok:false,empty:false,error:t}}}),st=t=>{try{return de(t())}catch(e){return $(e instanceof Error?e:new Error(String(e)))}},Ce={fromJSON:t=>{let e=JSON.parse(t);if(e._tag==="Success")return de(e.value);{let r=new Error(e.error);return e.stack&&(r.stack=e.stack),$(r)}},fromYAML:t=>{let e=t.split(`
8
+ `),r=e[0]?.split(": ")[1];if(!r)return $(new Error("Invalid YAML format for Try"));if(r==="Success"){let n=e[1]?.split(": ")[1];if(!n)return $(new Error("Invalid YAML format for Try Success"));let o=JSON.parse(n);return de(o)}else {let n=e[1]?.split(": ")[1];if(!n)return $(new Error("Invalid YAML format for Try Failure"));let o=e[2]?.split(": "),a=o&&o.length>1?o.slice(1).join(": "):void 0,s=new Error(n);return a&&(s.stack=a),$(s)}},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ce.fromJSON(e)}},P=a(st,Ce);function Le({_tag:t,impl:e}){return {...e,_tag:t}}function we(t,e){return !t||typeof t!="object"||!("_tag"in t)?false:e?t._tag===e:true}var O=t=>{let e=Array.from(t??[]),r={_tag:"List",[Symbol.iterator]:()=>e[Symbol.iterator](),get size(){return e.length},get length(){return e.length},map:n=>O(e.map(n)),ap:n=>O(e.flatMap(o=>Array.from(n).map(a=>a(o)))),flatMap:n=>O(e.flatMap(o=>Array.from(n(o)))),flatMapAsync:async n=>{let o=await Promise.all(e.map(async a=>await n(a)));return O(o.flatMap(a=>Array.from(a)))},forEach:n=>e.forEach(n),contains:n=>e.includes(n),count:n=>e.filter(n).length,exists:n=>e.some(n),filter:n=>O(e.filter(n)),filterNot:n=>O(e.filter(o=>!n(o))),filterType:n=>O(e.filter(o=>we(o,n))),find:(n,o)=>{let a=e.find(s=>n(s)&&(o?we(s,o):true));return f(a)},get head(){return e[0]},get headOption(){return e.length>0?f(e[0]):w()},get isEmpty(){return e.length===0},toArray:()=>[...e],reduce:n=>e.reduce(n),reduceRight:n=>e.reduceRight(n),fold:(n,o)=>{if(e.length===0)return n();let a=e[0];return o(a)},foldLeft:n=>o=>e.reduce(o,n),foldRight:n=>o=>e.reduceRight((a,s)=>o(s,a),n),match:n=>e.length===0?n.Empty():n.NonEmpty([...e]),remove:n=>O(e.filter(o=>o!==n)),removeAt:n=>n<0||n>=e.length?r:O([...e.slice(0,n),...e.slice(n+1)]),add:n=>O([...e,n]),get:n=>f(e[n]),concat:n=>O([...e,...n.toArray()]),drop:n=>O(e.slice(n)),dropRight:n=>O(e.slice(0,-n)),dropWhile:n=>O(e.slice(e.findIndex(o=>!n(o)))),flatten:()=>O(e.flatMap(n=>Array.isArray(n)?n:[n])),toList:()=>r,toSet:()=>ne(e),toOption:()=>e.length>0?f(e[0]):w(),toEither:n=>e.length>0?c(e[0]):p(n),toTry:()=>e.length>0?P(()=>e[0]):P(()=>{throw new Error("Empty list")}),toString:()=>`List(${me(e)})`,toValue:()=>({_tag:"List",value:e}),pipe:n=>n([...e]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"List",value:e}),toYAML:()=>`_tag: List
9
+ value: ${me(e)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"List",value:e})).toString("base64")}),[k](){return e.length===0?{ok:false,empty:true}:{ok:true,value:e[0]}}};return r},it=t=>O(t),Ve={fromJSON:t=>{let e=JSON.parse(t);return m(e.value)},fromYAML:t=>{let r=t.split(`
10
+ `)[1]?.split(": ")[1];if(!r)return m([]);let n=JSON.parse(r);return m(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ve.fromJSON(e)}},m=a(it,Ve);var ze=t=>({_tag:"Right",value:t,isLeft(){return false},isRight(){return true},get:()=>t,getOrElse:e=>t,getOrThrow:()=>t,orElse:e=>c(t),orNull:()=>t,orUndefined:()=>t,map:e=>c(e(t)),ap:e=>e._tag==="Right"?c(e.value(t)):p(e.value),mapAsync:e=>e(t).then(r=>c(r)).catch(r=>Promise.resolve(p(r))),merge:e=>e.isLeft()?p(e.value):c([t,e.value]),flatMap:e=>e(t),flatMapAsync:e=>e(t).catch(r=>p(r)),toOption:()=>U(t),toList:()=>m([t]),toEither:e=>c(t),toTry:()=>P(()=>t),toJSON(){return {_tag:"Right",value:t}},toString:()=>`Right(${me(t)})`,*[Symbol.iterator](){yield t;},*yield(){yield t;},traverse:e=>{let r=e(t);return r.isLeft()?p(r.value):c([r.value])},*lazyMap(e){yield c(e(t));},tap:e=>(e(t),c(t)),tapLeft:e=>c(t),mapLeft:e=>c(t),bimap:(e,r)=>c(r(t)),fold:(e,r)=>r(t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),match:e=>e.Right(t),swap:()=>p(t),toPromise:()=>Promise.resolve(t),toValue:()=>({_tag:"Right",value:t}),pipeEither:(e,r)=>r(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Right",value:t}),toYAML:()=>`_tag: Right
11
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Right",value:t})).toString("base64")}),get size(){return 1},get isEmpty(){return false},contains:e=>t===e,reduce:e=>t,reduceRight:e=>t,count:e=>e(t)?1:0,find:e=>e(t)?U(t):w(),exists:e=>e(t),forEach:e=>e(t),[k](){return {ok:true,value:t}}}),De=t=>({_tag:"Left",value:t,isLeft(){return true},isRight(){return false},get:()=>{throw new Error(`Cannot call get() on Left(${me(t)})`)},getOrElse:e=>e,getOrThrow:e=>{throw e??t},orElse:e=>e,orNull:()=>null,orUndefined:()=>{},map:e=>p(t),ap:e=>p(t),mapAsync:e=>Promise.resolve(p(t)),merge:e=>p(t),flatMap:e=>p(t),flatMapAsync:e=>Promise.resolve(p(t)),toOption:()=>w(),toList:()=>m(),toEither:e=>p(e),toTry:()=>P(()=>{throw new Error(String(t))}),toJSON(){return {_tag:"Left",value:t}},toString:()=>`Left(${me(t)})`,*[Symbol.iterator](){},*yield(){},traverse:e=>p(t),*lazyMap(e){yield p(t);},tap:e=>p(t),tapLeft:e=>(e(t),p(t)),mapLeft:e=>p(e(t)),bimap:(e,r)=>p(e(t)),fold:(e,r)=>e(t),foldLeft:e=>r=>e,foldRight:e=>r=>e,match:e=>e.Left(t),swap:()=>c(t),toPromise:()=>Promise.reject(t),toValue:()=>({_tag:"Left",value:t}),pipeEither:(e,r)=>e(t),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Left",value:t}),toYAML:()=>`_tag: Left
12
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Left",value:t})).toString("base64")}),get size(){return 0},get isEmpty(){return true},contains:e=>false,reduce:e=>{throw new Error("Cannot reduce a Left")},reduceRight:e=>{throw new Error("Cannot reduceRight a Left")},count:e=>0,find:e=>w(),exists:e=>false,forEach:e=>{},[k](){return {ok:false,empty:false,error:t}}}),c=t=>ze(t),p=t=>De(t),fr=t=>t.isRight(),dr=t=>t.isLeft(),mr=(t,e)=>{try{return c(t())}catch(r){return p(e(r))}},ut=t=>ze(t);console.assert(ut);var lt=t=>De(t);console.assert(lt);var yr=async(t,e)=>{try{let r=await t();return c(r)}catch(r){return p(e(r))}},Ie={sequence:t=>t.reduce((e,r)=>e.isLeft()?e:r.isLeft()?p(r.value):e.map(n=>[...n,r.value]),c([])),traverse:(t,e)=>Ie.sequence(t.map(e)),fromNullable:(t,e)=>t==null?p(e):c(t),fromPredicate:(t,e,r)=>e(t)?c(t):p(r),ap:(t,e)=>t.flatMap(r=>e.map(r)),fromPromise:async(t,e)=>{try{let r=await t;return c(r)}catch(r){return p(e(r))}},fromJSON:t=>{let e=JSON.parse(t);return e._tag==="Right"?c(e.value):p(e.value)},fromYAML:t=>{let e=t.split(`
13
+ `),r=e[0]?.split(": ")[1],n=e[1]?.split(": ")[1];if(!r||!n)throw new Error("Invalid YAML format for Either");let o=JSON.parse(n);return r==="Right"?c(o):p(o)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ie.fromJSON(e)}};function I(t,e){return {brand:t,validate:e,of:r=>e(r)?f(a$1(t,r)):f.none(),from:r=>e(r)?c(a$1(t,r)):p(`Invalid ${t}: validation failed`),unsafeOf:r=>{if(!e(r))throw new Error(`Invalid ${t}: validation failed`);return a$1(t,r)},is:r=>{try{return e(r)}catch{return false}},unwrap:r=>r,refine:(r,n)=>I(r,o=>e(o)&&n(o))}}var pt=I("PositiveNumber",t=>t>0),Ar=I("NonNegativeNumber",t=>t>=0),Lr=I("IntegerNumber",t=>Number.isInteger(t)),kr=pt.refine("PositiveInteger",t=>Number.isInteger(t)),xr=I("NonEmptyString",t=>t.length>0),br=I("EmailAddress",t=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)),wr=I("UrlString",t=>{try{return new URL(t),!0}catch{return !1}}),Ur=I("UUID",t=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)),Sr=I("ISO8601Date",t=>!isNaN(Date.parse(t))&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(t));function vr(t,e,r){return I(t,n=>n>=e&&n<=r)}function Or(t,e,r){return I(t,n=>n.length>=e&&n.length<=r)}function Br(t,e){return I(t,r=>e.test(r))}var Ue=t=>{let e=n=>typeof n=="function"?n():n,r={when:(n,o)=>t.resolved?r:n?Ue({resolved:true,value:e(o)}):r,elseWhen:(n,o)=>t.resolved?r:n?Ue({resolved:true,value:e(o)}):r,else:n=>t.resolved?t.value:e(n),getOrThrow:()=>{if(!t.resolved)throw new Error("Conditional expression has no matching condition");return t.value}};return r},Ke=()=>Ue({resolved:false}),ct={of:()=>Ke(),match:t=>e=>{let r=e[t];if(r===void 0)throw new Error(`No case defined for value: ${String(t)}`);return typeof r=="function"?r():r},lazy:()=>{let t={resolved:false},e={when:(r,n)=>(t.resolved||r()&&(t.resolved=true,t.value=n()),e),elseWhen:(r,n)=>(t.resolved||r()&&(t.resolved=true,t.value=n()),e),else:r=>t.resolved?t.value:r()};return e}},Nr=a(Ke,ct);var ue=(t,e)=>e===t?true:typeof e=="function"?e(t):e&&typeof e=="object"&&"_"in e?e._(t):typeof e=="object"&&e!==null&&typeof t=="object"&&t!==null?Object.entries(e).every(([r,n])=>{let o=t[r];return ue(o,n)}):false,oe=t=>{let e=(o,a)=>typeof o=="function"?o(a):o,r=()=>{for(let{pattern:o,result:a}of t.patterns)if(ue(t.value,o))return {matched:true,result:e(a,t.value)};return {matched:false}},n={case:(o,a)=>{if(t.resolved)return n;let s={...t,patterns:[...t.patterns,{pattern:o,result:a}]};return ue(t.value,o)?oe({...s,resolved:true,result:e(a,t.value)}):oe(s)},caseValue:(o,a)=>{if(t.resolved)return n;if(t.value===o){let s=typeof a=="function"?a():a;return oe({...t,resolved:true,result:s})}return n},caseValues:(o,a)=>{if(t.resolved)return n;if(o.includes(t.value)){let s=typeof a=="function"?a():a;return oe({...t,resolved:true,result:s})}return n},when:(o,a)=>n.case(o,a),caseAny:(o,a)=>{if(t.resolved)return n;for(let s of o)if(ue(t.value,s))return oe({...t,resolved:true,result:e(a,t.value),patterns:[...t.patterns,{pattern:s,result:a}]});return oe({...t,patterns:[...t.patterns,...o.map(s=>({pattern:s,result:a}))]})},default:o=>t.resolved?t.result:e(o,t.value),exhaustive:()=>{let o=r();if(!o.matched)throw new Error(`Non-exhaustive match. No pattern matched value: ${JSON.stringify(t.value)}`);return o.result},getOrThrow:o=>{let a=r();if(!a.matched)throw new Error(o??`No matching pattern for value: ${JSON.stringify(t.value)}`);return a.result},toOption:()=>{let o=r();return o.matched?f(o.result):f.none()}};return n},Tt=t=>oe({value:t,resolved:false,patterns:[]}),ft={exhaustive:t=>e=>{let r=t[e];if(r===void 0)throw new Error(`No case defined for value: ${String(e)}`);return r},partial:t=>({withDefault:e=>r=>{let n=t[r];return n!==void 0?typeof n=="function"?n(r):n:typeof e=="function"?e(r):e}}),withGuards:t=>({withDefault:e=>r=>{for(let[n,o]of t)if(n(r))return typeof o=="function"?o(r):o;return typeof e=="function"?e(r):e}}),struct:()=>{let t=[],e={case:(r,n)=>(t.push({pattern:r,handler:n}),e),build:()=>r=>{for(let{pattern:n,handler:o}of t)if(ue(r,n))return o(r);throw new Error(`No matching pattern for value: ${JSON.stringify(r)}`)}};return e},builder:()=>{let t=[],e,r={case:(n,o)=>(t.push({pattern:n,result:o}),r),when:(n,o)=>(t.push({pattern:n,result:o}),r),default:n=>(e=n,{build:()=>o=>{for(let{pattern:a,result:s}of t)if(ue(o,a))return typeof s=="function"?s(o):s;if(e!==void 0)return typeof e=="function"?e(o):e;throw new Error(`No matching pattern for value: ${JSON.stringify(o)}`)}})};return r}},Vr=a(Tt,ft);function $e(t,e){return {...Le({_tag:t,impl:e}),toString(){return `${t}()`},[k](){if("isSome"in e&&"isNone"in e){if(typeof e.isSome=="function"&&e.isSome()&&"get"in e&&typeof e.get=="function")return {ok:true,value:e.get()};if(typeof e.isNone=="function"&&e.isNone())return {ok:false,empty:true}}if("isLeft"in e&&"isRight"in e){if(typeof e.isRight=="function"&&e.isRight()&&"value"in e)return {ok:true,value:e.value};if(typeof e.isLeft=="function"&&e.isLeft()&&"value"in e)return {ok:false,empty:false,error:e.value}}if("isSuccess"in e&&"isFailure"in e){if(typeof e.isSuccess=="function"&&e.isSuccess()&&"get"in e&&typeof e.get=="function")return {ok:true,value:e.get()};if(typeof e.isFailure=="function"&&e.isFailure()&&"getError"in e&&typeof e.getError=="function")return {ok:false,empty:false,error:e.getError()}}if("isEmpty"in e&&"head"in e){if(typeof e.isEmpty=="function"&&e.isEmpty())return {ok:false,empty:true};if(typeof e.head=="function")return {ok:true,value:e.head()};if("head"in e)return {ok:true,value:e.head}}return {ok:true,value:e}}}}function Je(t){if(!t||typeof t!="object"||!("_tag"in t))return "unknown";switch(t._tag){case "Some":case "None":return "Option";case "Left":case "Right":return "Either";case "List":return "List";case "Success":case "Failure":return "Try";default:return "unknown"}}var ee={Option:{of:t=>f(t),empty:()=>f.none()},Either:{of:t=>c(t),empty:t=>p(t)},List:{of:t=>m([t]),empty:()=>m([])},Try:{of:t=>P(()=>t),empty:t=>P(()=>{throw t??new Error("Try failed")})}};function Yr(t){let e=t(),r=null;function n(o){let a=e.next(o);if(a.done)return r&&r in ee?ee[r]?.of(a.value):m([a.value]);let s=a.value;if(!r&&s&&typeof s=="object"&&"_tag"in s&&(r=Je(s),r==="List"))return dt(t);if(s&&typeof s=="object"&&k in s){let i=s[k]();if(!i.ok){if(!r||!(r in ee))return m([]);let u=ee[r];if("empty"in i&&!i.empty&&"error"in i){if(r==="Either")return u?.empty(i.error);if(r==="Try")return u?.empty(i.error instanceof Error?i.error:new Error(String(i.error)))}return u?.empty()}return n(i.value)}throw new Error("Do-notation error: All yielded values must be monadic. Use yield* $(Option(value)), yield* $(Right(value)), etc. Raw values should be assigned directly without yielding.")}return n()}function dt(t){function e(o){if(!o||typeof o!="object"||!(k in o))return [o];let a=o;if("toArray"in a&&typeof a.toArray=="function"){let i=a.toArray();return i.length===0?[]:i}let s=a[k]();return s.ok?[s.value]:[]}function r(o){let a=t(),s=[],i=[],u=0;function l(d){let y=a.next(d);if(y.done){s.push(y.value);return}if(u<o.length){let R=o[u];i.push(R),u++,l(R);return}let A=e(y.value);if(A.length!==0)if(A.length>1){let R=A.flatMap(E=>{let F=[...i,E];return r(F)});s.push(...R);}else i.push(A[0]),u++,l(A[0]);}return l(void 0),s}let n=r([]);return m(n)}async function qr(t){let e=t(),r=null;async function n(o){let a=await e.next(o);if(a.done)return r&&r in ee?ee[r]?.of(a.value):m([a.value]);let s=await Promise.resolve(a.value);if(!r&&s&&typeof s=="object"&&"_tag"in s&&(r=Je(s)),s&&typeof s=="object"&&k in s){let i=s[k]();if(!i.ok){if(!r||!(r in ee))return m([]);let u=ee[r];if("empty"in i&&!i.empty&&"error"in i){if(r==="Either")return u?.empty(i.error);if(r==="Try")return u?.empty(i.error instanceof Error?i.error:new Error(String(i.error)))}return u?.empty()}return n(i.value)}return n(s)}return n()}function Qr(t){return t!==null&&typeof t=="object"&&k in t}function Hr(t){let e=t[k]();if(e.ok)return e.value;throw "error"in e?e.error:new Error("Cannot unwrap empty monad")}function*Zr(t){return yield t}var Xr=(t="Cannot unwrap None in Do-notation")=>{let e=new Error(t),r=Object.create(Error.prototype);return r.message=e.message,r.stack=e.stack,r.name="NoneError",r},en=(t,e="Cannot unwrap Left in Do-notation")=>{let r=new Error(e),n=Object.create(Error.prototype);return n.message=r.message,n.stack=r.stack,n.name="LeftError",n.value=t,n},tn=(t="Cannot unwrap empty List in Do-notation")=>{let e=new Error(t),r=Object.create(Error.prototype);return r.message=e.message,r.stack=e.stack,r.name="EmptyListError",r},rn=(t,e="Cannot unwrap Failure in Do-notation")=>{let r=new Error(e),n=Object.create(Error.prototype);return n.message=r.message,n.stack=r.stack,n.name="FailureError",n.cause=t,n};var ke="Throwable",Q=class t extends Error{constructor(r,n){super(r,{cause:n?.cause});this._tag=ke;this.name=n?.taskInfo?.name??ke,Object.defineProperties(this,{_tag:{value:ke,writable:false,configurable:false},data:{value:n?.data,writable:false,configurable:false},taskInfo:{value:n?.taskInfo,writable:false,configurable:false},name:{value:n?.taskInfo?.name??ke,writable:false,configurable:false}}),n?.cause&&Object.defineProperty(this,"cause",{value:n.cause,writable:false,configurable:false}),n?.stack?this.stack=n.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}static apply(r,n,o){if(r instanceof Error){let u=new t(r.message,{data:n,cause:r.cause??void 0,stack:r.stack??void 0,taskInfo:o});for(let l of Object.keys(r))if(!(l in u)){let d=u,y=r;d[l]=y[l];}return u}if(r&&typeof r=="object"){let u=r,l=typeof u.message=="string"?u.message:typeof u.error=="string"?u.error:`Object error: ${JSON.stringify(u,Object.getOwnPropertyNames(u).filter(y=>u[y]!==void 0))}`,d=new t(l,{data:n??u,taskInfo:o});for(let y of Object.keys(u))if(!(y in d)){let A=d;A[y]=u[y];}return d}if(typeof r=="function"){let u=r.name??"anonymous function",l=r.toString().substring(0,100)+(r.toString().length>100?"...":"");return new t(`Function error: ${u}`,{data:n??{functionType:typeof r,functionName:u,functionString:l},taskInfo:o})}let a=typeof r,s=r===null?"null":r===void 0?"undefined":String(r);if(a==="number"){let u=r,l=Number.isNaN(u)?"Number error: NaN":Number.isFinite(u)?`Number error: ${u}`:`Number error: ${u>0?"Infinity":"-Infinity"}`;return new t(l,{data:n??{errorType:a,errorValue:u,originalError:r},taskInfo:o})}if(a==="bigint")return new t(`BigInt error: ${r}n`,{data:n??{errorType:a,errorValue:String(r),originalError:r},taskInfo:o});if(a==="boolean")return new t(`Boolean error: ${r}`,{data:n??{errorType:a,errorValue:r,originalError:r},taskInfo:o});if(a==="symbol"){let u=r.description??"unnamed symbol";return new t(`Symbol error: Symbol(${u})`,{data:n??{errorType:a,symbolDescription:u,originalError:r},taskInfo:o})}let i=typeof r=="string"?r:`${a.charAt(0).toUpperCase()+a.slice(1)} error: ${s}`;return new t(i,{data:n??{errorType:a,errorValue:s,originalError:r},taskInfo:o})}};var b=t=>{let e=new Promise((r,n)=>{try{t(r,n);}catch(o){n(o);}});return {_tag:"FPromise",map:r=>b((n,o)=>{e.then(a=>{try{n(r(a));}catch(s){o(s);}}).catch(o);}),flatMap:r=>b((n,o)=>{e.then(a=>{try{let s=r(a);"_tag"in s&&s._tag==="FPromise"?s.then(n,o):Promise.resolve(s).then(n,o);}catch(s){o(s);}}).catch(o);}),flatMapAsync:async r=>{let n=await e,o=r(n);return o instanceof Promise?o:new Promise((a,s)=>{o.then(a,s);})},tap:r=>b((n,o)=>{e.then(a=>{try{r(a),n(a);}catch(s){o(s);}}).catch(o);}),mapError:r=>b((n,o)=>{e.then(n).catch(a=>{try{let s={originalError:a,stack:a instanceof Error?a.stack:void 0,timestamp:Date.now()};o(r(a,s));}catch(s){o(s);}});}),tapError:r=>b((n,o)=>{e.then(n).catch(a=>{try{r(a),o(a);}catch(s){o(s);}});}),recover:r=>b(n=>{e.then(n).catch(()=>n(r));}),recoverWith:r=>b(n=>{e.then(n).catch(o=>{try{n(r(o));}catch{n(null);}});}),recoverWithF:r=>b((n,o)=>{e.then(n).catch(a=>{try{r(a).then(n,o);}catch(s){o(s);}});}),filterError:(r,n)=>b((o,a)=>{e.then(o).catch(s=>{if(r(s))try{n(s).then(o,a);}catch(i){a(i);}else a(s);});}),logError:r=>b((n,o)=>{e.then(n).catch(a=>{try{let s={originalError:a,stack:a instanceof Error?a.stack:void 0,timestamp:Date.now()};r(a,s);}catch{}finally{o(a);}});}),then:(r,n)=>e.then(r,n),toPromise:()=>e,toEither:async()=>{try{let r=await e;return c(r)}catch(r){return p(r)}},fold:(r,n)=>b((o,a)=>{e.then(s=>{try{o(n(s));}catch(i){a(i);}}).catch(s=>{try{o(r(s));}catch(i){a(i);}});})}},mt={resolve:t=>b(e=>e(t)),reject:t=>b((e,r)=>r(t)),from:t=>b((e,r)=>{t.then(e).catch(r);}),fromEither:t=>t.isRight()?b(e=>e(t.value)):b((e,r)=>r(t.value)),all:t=>b((e,r)=>{Promise.all(t.map(n=>n instanceof Promise?n:Promise.resolve(n))).then(e).catch(r);}),allSettled:t=>b(e=>{let r=[],n=0;if(t.length===0){e([]);return}t.forEach((o,a)=>{Promise.resolve(o).then(s=>{r[a]=c(s),n++,n===t.length&&e(r);}).catch(s=>{r[a]=p(s),n++,n===t.length&&e(r);});});}),race:t=>b((e,r)=>{Promise.race(t).then(e,r);}),any:t=>b((e,r)=>{if(typeof Promise.any=="function")Promise.any(t).then(e,r);else {let n=0,o=[];if(t.length===0){r(new AggregateError([],"All promises were rejected"));return}t.forEach((a,s)=>{Promise.resolve(a).then(e).catch(i=>{o[s]=i,n++,n===t.length&&r(new AggregateError(o,"All promises were rejected"));});});}}),retryWithBackoff:(t,e)=>{let{maxRetries:r,baseDelay:n=100,shouldRetry:o=()=>true}=e;return b((a,s)=>{let i=0,u=()=>{t().toPromise().then(a).catch(l=>{if(i++,i<=r&&o(l,i)){let d=n*Math.pow(2,i-1);setTimeout(u,d);}else s(l);});};u();})}},Se=a(b,mt);function yt(t){return t instanceof Error&&typeof t=="object"&&true&&t._tag==="Throwable"}var z=(t,e)=>{if(t.isRight())return H(t.get(),e);if(t.isLeft())return ye(t,void 0,e);throw new Error("Unrecognized task outcome")},ye=(t,e,r)=>{let n={name:r?.name??"Task",description:r?.description??""},o=Q.apply(t,e,n),a=p(o),{isLeft:s,isRight:i,...u}=a;return {...u,_tag:"TaskFailure",_meta:n,error:o,map:l=>{let d=a.map(l);return z(d,r)},flatMap:l=>{let d=a.flatMap(l);return z(d,r)},ap:l=>{let d=a.ap(l);return z(d,r)},merge:l=>{let d=a.merge(l);return z(d,r)},mapAsync:async l=>{let d=await a.mapAsync(l);return z(d,r)},flatMapAsync:async l=>{let d=await a.flatMapAsync(l);return z(d,r)},isSuccess(){return false},isFailure(){return true},mapError:l=>ye(l(o),e,r),recover:l=>H(l,r),recoverWith:l=>H(l(o),r)}},H=(t,e)=>{let r={name:e?.name??"Task",description:e?.description??""},n=c(t),{isLeft:o,isRight:a,...s}=n;return {...s,_tag:"TaskSuccess",_meta:r,map:i=>{let u=n.map(i);return z(u,e)},flatMap:i=>{let u=n.flatMap(i);return z(u,e)},ap:i=>{let u=n.ap(i);return z(u,e)},merge:i=>{let u=n.merge(i);return z(u,e)},mapAsync:async i=>{let u=await n.mapAsync(i);return z(u,e)},flatMapAsync:async i=>{let u=await n.flatMapAsync(i);return z(u,e)},isSuccess(){return true},isFailure(){return false},mapError:i=>H(t,e),recover:i=>H(t,e),recoverWith:i=>H(t,e)}},Oe=(t,e)=>H(t,e),N=(t,e,r)=>ye(t,e,r),ve=()=>{let t=new AbortController,e=Ae();return {token:{get isCancelled(){return t.signal.aborted},get signal(){return t.signal},onCancel(n){t.signal.aborted?n():e.add(n);}},cancel(){t.signal.aborted||(t.abort(),e.build().forEach(n=>{try{n();}catch(o){console.error("Error in cancellation callback:",o);}}));}}},gt=t=>{let e=t?.name??"Task",r=t?.description??"",n={Async:(o,a=u=>u,s=()=>{},i)=>Se((u,l)=>{(async()=>{let d=x(false),y=x(null),A=x(()=>{});if(i){if(i.isCancelled){try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}u(N(new Error("Task was cancelled before execution started"),void 0,{name:e,description:r}));return}let R=()=>{d.set(true),y.set(new Error("Task was cancelled during execution"));};i.onCancel(R),A.set(()=>{});}try{let R=await o();try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}if(d.get()){y.get()?u(N(y.get(),void 0,{name:e,description:r})):u(N(new Error("Task was cancelled during execution"),void 0,{name:e,description:r}));return}if(R&&typeof R=="object"&&"_tag"in R){let E=R;E._tag==="TaskSuccess"||E._tag==="TaskFailure"?u(E):u(Oe(R,{name:e,description:r}));}else u(Oe(R,{name:e,description:r}));}catch(R){try{await s();}catch(E){u(N(E,void 0,{name:e,description:r}));return}if(d.get()){y.get()?u(N(y.get(),void 0,{name:e,description:r})):u(N(new Error("Task was cancelled during execution"),void 0,{name:e,description:r}));return}try{if(R instanceof Error&&yt(R)){let E=new Error(`${e}: ${R.message}`),F=Q.apply(E,void 0,{name:e,description:r});Object.defineProperty(F,"cause",{value:R,writable:!1,configurable:!1}),Promise.resolve().then(()=>{try{a(R);}catch(X){console.error("Error in error handler:",X);}}),u(N(F,void 0,{name:e,description:r}));}else {let E=await a(R);if(E&&typeof E=="object"&&"_tag"in E){let F=E;F._tag==="TaskSuccess"||F._tag==="TaskFailure"?u(F):u(N(E,void 0,{name:e,description:r}));}else u(N(E,void 0,{name:e,description:r}));}}catch(E){u(N(E,void 0,{name:e,description:r}));}}finally{A.get()();}})().catch(d=>u(N(d,void 0,{name:e,description:r})));}),Sync:(o,a=i=>i,s=()=>{})=>{try{return H(o(),{name:e,description:r})}catch(i){return ye(a(i),void 0,{name:e,description:r})}finally{s();}},AsyncWithProgress:(o,a,s=l=>l,i=()=>{},u)=>{let l=d=>{let y=Math.max(0,Math.min(100,d));y<=100&&a(y);};return n.Async(()=>o(l),s,i,u)}};return {...$e("Task",n),_type:"Task"}},je={success:(t,e)=>H(t,e),fail:(t,e,r)=>ye(t,e,r),ok:(t,e)=>Oe(t,e),err:(t,e,r)=>N(t,e,r),getErrorChain:t=>{if(!t)return [];let e=Ae();e.add(t);let r=x(t);for(;r.get()&&r.get().cause;){let{cause:n}=r.get();if(n)e.add(n),r.set(n);else break;if(e.size()>100)break}return e.build()},formatErrorChain:(t,e)=>{let r=je.getErrorChain(t),n=e?.separator??`
14
+ `;return r.map((o,a)=>{if(!o)return `${a>0?"\u21B3 ":""}Unknown error`;let{taskInfo:s}=o,i=e?.includeTasks&&s?.name?`[${s.name}] `:"",u=o.message??"No message",l=x(`${a>0?"\u21B3 ":""}${i}${u}`);return e?.includeStackTrace&&o.stack&&l.set(`${l.get()}
15
+ ${o.stack.split(`
16
+ `).slice(1).join(`
17
+ `)}`),l.get()}).join(n)},fromPromise:(t,e)=>(...r)=>J(e??{name:"PromiseTask",description:"Task from Promise"}).Async(()=>t(...r),o=>o),toPromise:t=>new Promise((e,r)=>{t.isSuccess()?e(t.get()):r(t.error);}),race:(t,e,r)=>{let n=r?.name??"TaskRace",o=r?.description??"Race between multiple tasks";return J({name:n,description:o}).Async(async()=>{let s=Ae();t.forEach(u=>s.add(u));let i=x(void 0);if(typeof e=="number"&&e>0){let u=Se((l,d)=>{i.set(setTimeout(()=>{d(new Error(`Task race timed out after ${e}ms`));},e));});s.add(u);}try{return await new Promise((u,l)=>{s.build().forEach(d=>{d.then(y=>{if(y&&typeof y=="object"&&"_tag"in y){let A=y;A._tag==="TaskSuccess"?u(A.get()):A._tag==="TaskFailure"?l(A.error):u(y);}else u(y);},y=>l(y));});})}finally{i.get()&&clearTimeout(i.get());}},s=>s)},fromNodeCallback:(t,e)=>{let r=e?.name??"NodeCallbackTask",n=e?.description??"Task from Node.js callback function",o={name:r,description:n};return (...a)=>J(o).Async(()=>new Promise((s,i)=>{try{t(...a,(u,l)=>{u?i(u):s(l);});}catch(u){i(u);}}),s=>s)},createCancellationTokenSource:ve,cancellable:(t,e)=>{let r=ve();return {task:J(e).Async(()=>t(r.token),o=>o,()=>{},r.token),cancel:()=>r.cancel()}},withProgress:(t,e=()=>{},r)=>{let n=ve(),o=x(0),a=i=>{o.set(Math.max(0,Math.min(100,i))),e(o.get());};return {task:J(r).Async(()=>t(a,n.token),i=>i,()=>{},n.token),cancel:()=>n.cancel(),currentProgress:()=>o.get()}}},J=a(gt,je);var We={includeTasks:true,includeStackTrace:false,separator:`
18
+ `,includeData:false,maxStackFrames:3,title:"Error",colors:false};function Ge(t){let e=new WeakSet;return JSON.stringify(t,(r,n)=>{if(typeof n=="bigint")return `${n.toString()}n`;if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular Reference]";e.add(n);}return r==="stack"&&typeof n=="string"?xe(n):n},2)}function xe(t){if(t===void 0||t==="")return "";let e=t.split(`
19
+ `),r=e[0],n=e.slice(1).map(o=>o.trim());return [r,...n].join(`
20
+ `)}function An(t,e){let r={...We,...e},n=t instanceof Error?t:Q.apply(t),o=J?.getErrorChain?J.getErrorChain(n):[n],a=r.colors?`\x1B[31m${r.title}:\x1B[0m ${n.message}`:`${r.title}: ${n.message}`,s=o.map((u,l)=>{let d=" ".repeat(l),y=l>0?"\u21B3 ":"",{taskInfo:A}=u,R=r.includeTasks&&A?.name?r.colors?`\x1B[36m[${A.name}]\x1B[0m `:`[${A.name}] `:"",E=`${d}${y}${R}${u.message}`;if(r.includeStackTrace&&u.stack){let X=xe(u.stack).split(`
21
+ `).slice(1),ae=r.maxStackFrames??We.maxStackFrames??3,he=X.slice(0,ae).map(Ee=>`${d} ${r.colors?"\x1B[90m":""}${Ee}${r.colors?"\x1B[0m":""}`).join(`
22
+ `);E+=`
23
+ ${he}`,X.length>ae&&(E+=`
24
+ ${d} ${r.colors?"\x1B[90m":""}...${X.length-ae} more stack frames${r.colors?"\x1B[0m":""}`);}return E}).join(r.separator),i=`${a}
25
+
26
+ ${s}`;if(r.includeData){let{data:u}=n;if(u){let l=r.colors?`
27
+
28
+ \x1B[33mContext:\x1B[0m
29
+ ${Ge(u)}`:`
30
+
31
+ Context:
32
+ ${Ge(u)}`;i+=l;}}return i}function Ln(){return function(e){if(!e)return e;let r=e instanceof Error?e:new Error(String(e)),n={message:r.message,name:r.name||"Error",stack:r.stack?xe(r.stack):void 0};if(r.taskInfo&&(n.taskInfo=r.taskInfo),r.data&&(n.data=r.data),typeof J?.getErrorChain=="function")try{let o=J.getErrorChain(r);o.length>1&&(n.errorChain=J.formatErrorChain(r,{includeTasks:!0}),n.structuredErrorChain=o.map(a=>({message:a.message,name:a.name,taskInfo:a.taskInfo,stack:a.stack?xe(a.stack):void 0})));}catch{}return Object.getOwnPropertyNames(r).forEach(o=>{if(!n[o]){let a=r[o];n[o]=a;}}),n}}var xn=t=>{let e=new Error(t);return e.name="ParseError",e};var j=(t,e,r,n)=>{let o=Q.apply(e,r,{name:t,description:e});return Object.assign(o,{code:t,message:e,status:ht(t),context:r,timestamp:new Date().toISOString(),traceId:n?.traceId})},ht=t=>({VALIDATION_FAILED:400,BAD_REQUEST:400,AUTH_REQUIRED:401,PERMISSION_DENIED:403,NOT_FOUND:404,TIMEOUT:408,CONFLICT:409,RATE_LIMITED:429,INTERNAL_ERROR:500,NETWORK_ERROR:503})[t],Et={validation:(t,e,r)=>j("VALIDATION_FAILED",`Validation failed: ${t} ${r}`,{field:t,value:e,rule:r}),network:(t,e,r)=>j("NETWORK_ERROR",`Network error: ${e} ${t}${r?` (${r})`:""}`,{url:t,method:e,statusCode:r}),auth:(t,e)=>j("AUTH_REQUIRED",`Authentication required: ${t}${e?` (role: ${e})`:""}`,{resource:t,requiredRole:e}),notFound:(t,e)=>j("NOT_FOUND",`Not found: ${t} with id ${e}`,{resource:t,id:e}),permission:(t,e,r)=>j("PERMISSION_DENIED",`Permission denied: cannot ${t} ${e}`,{action:t,resource:e,userId:r}),rateLimit:(t,e,r)=>j("RATE_LIMITED",`Rate limit exceeded: ${t} requests per ${e}`,{limit:t,window:e,retryAfter:r}),internal:t=>j("INTERNAL_ERROR",`Internal server error: ${t}`,{errorId:t,timestamp:new Date().toISOString()}),badRequest:(t,e)=>j("BAD_REQUEST",`Bad request: ${t}`,{reason:t,expected:e}),conflict:(t,e)=>j("CONFLICT",`Conflict: ${t} already exists with value ${e}`,{resource:t,conflictingValue:e}),timeout:(t,e)=>j("TIMEOUT",`Request timeout: ${e} exceeded ${t}ms`,{duration:t,operation:e}),isTypedError:t=>typeof t=="object"&&t!==null&&"code"in t&&"message"in t&&"status"in t&&"context"in t&&"_tag"in t&&t._tag==="Throwable",hasCode:(t,e)=>t.code===e},S=Object.assign(j,Et);var C={rule:t=>e=>{if(t==="email")return typeof e!="string"||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?p(S.validation("value",e,"must be a valid email")):c(e);if(t==="url")try{return new URL(String(e)),c(e)}catch{return p(S.validation("value",e,"must be a valid URL"))}if(t==="uuid")return typeof e!="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)?p(S.validation("value",e,"must be a valid UUID")):c(e);if(t==="required")return e==null||e===""?p(S.validation("value",e,"is required")):c(e);if(t==="numeric")return typeof e!="number"&&!/^\d+$/.test(String(e))?p(S.validation("value",e,"must be numeric")):c(e);if(t==="alpha")return typeof e!="string"||!/^[a-zA-Z]+$/.test(e)?p(S.validation("value",e,"must contain only letters")):c(e);if(t==="alphanumeric")return typeof e!="string"||!/^[a-zA-Z0-9]+$/.test(e)?p(S.validation("value",e,"must be alphanumeric")):c(e);if(t.startsWith("min:")){let r=Number(t.split(":")[1]),n=Number(e);return isNaN(n)||n<r?p(S.validation("value",e,`must be at least ${r}`)):c(e)}if(t.startsWith("max:")){let r=Number(t.split(":")[1]),n=Number(e);return isNaN(n)||n>r?p(S.validation("value",e,`must be at most ${r}`)):c(e)}if(t.startsWith("minLength:")){let r=Number(t.split(":")[1]);return String(e).length<r?p(S.validation("value",e,`must be at least ${r} characters`)):c(e)}if(t.startsWith("maxLength:")){let r=Number(t.split(":")[1]);return String(e).length>r?p(S.validation("value",e,`must be at most ${r} characters`)):c(e)}if(t.startsWith("pattern:")){let r=t.substring(8);return new RegExp(r).test(String(e))?c(e):p(S.validation("value",e,`must match pattern ${r}`))}if(t.startsWith("in:")){let r=t.substring(3).split(",");return r.includes(String(e))?c(e):p(S.validation("value",e,`must be one of: ${r.join(", ")}`))}if(t.startsWith("notIn:")){let r=t.substring(6).split(",");return r.includes(String(e))?p(S.validation("value",e,`must not be one of: ${r.join(", ")}`)):c(e)}if(t==="date"){let r=new Date(String(e));return isNaN(r.getTime())?p(S.validation("value",e,"must be a valid date")):c(e)}if(t==="future"){let r=new Date(String(e));return isNaN(r.getTime())||r<=new Date?p(S.validation("value",e,"must be a future date")):c(e)}if(t==="past"){let r=new Date(String(e));return isNaN(r.getTime())||r>=new Date?p(S.validation("value",e,"must be a past date")):c(e)}return c(e)},combine:(...t)=>e=>{for(let r of t){let n=r(e);if(n.isLeft())return n}return c(e)},custom:(t,e)=>r=>t(r)?c(r):p(S.validation("value",r,e)),form:(t,e)=>{let r=[],n={};for(let[o,a]of Object.entries(t)){let s=e[o],i=a(s);if(i.isLeft()){let u=i.fold(d=>d,()=>{throw new Error("Should not be left")}),l=S.validation(o,s,u.context.rule);r.push(l);}else n[o]=i.get();}return r.length>0?p(m(r)):c(n)}},Rt={...C,validators:{email:C.rule("email"),url:C.rule("url"),uuid:C.rule("uuid"),required:C.rule("required"),numeric:C.rule("numeric"),positiveNumber:C.combine(C.rule("numeric"),C.rule("min:0")),nonEmptyString:C.combine(C.rule("required"),C.custom(t=>typeof t=="string"&&t.trim().length>0,"must not be empty"))}},Bn=Object.assign(C.rule,Rt);function At(t){return t!=null&&typeof t=="object"&&"getOrElse"in t&&typeof t.getOrElse=="function"&&"getOrThrow"in t&&typeof t.getOrThrow=="function"&&"get"in t&&typeof t.get=="function"&&"orElse"in t&&typeof t.orElse=="function"&&"orNull"in t&&typeof t.orNull=="function"&&"orUndefined"in t&&typeof t.orUndefined=="function"}var In={toOption:t=>t.fold(()=>w(),e=>U(e)),toList:t=>t.fold(()=>m([]),e=>m([e])),toEither:(t,e)=>t.fold(()=>p(e),r=>c(r)),isEmpty:t=>t.fold(()=>true,()=>false),size:t=>t.fold(()=>0,()=>1)};var te=t=>t!==null&&typeof t=="object"&&(t._tag==="Some"||t._tag==="None"),Y=t=>t!==null&&typeof t=="object"&&t._tag==="List",le=t=>t!==null&&typeof t=="object"&&(t._tag==="Left"||t._tag==="Right"),pe=t=>t!==null&&typeof t=="object"&&(t._tag==="Success"||t._tag==="Failure"),W=()=>{let t=(s,i)=>{if(te(s))return s.map(u=>i(u));if(Y(s))return s.map(u=>i(u));if(le(s))return s.map(u=>i(u));if(pe(s))return s.map(u=>i(u));throw new Error(`Unsupported functor type: ${JSON.stringify(s)}`)},e=s=>{if(te(s))return s.get();if(Y(s)){let i=s.toArray();if(i.length>0&&Y(i[0])){let u=[];for(let l of i)Y(l)&&u.push(...l.toArray());return m(u)}return s.flatten()}if(le(s))return s.isRight()?s.fold(()=>null,i=>i):s;if(pe(s))return s.isSuccess()?s.get():s;throw new Error(`Unsupported functor type for flatten: ${JSON.stringify(s)}`)},r=(s,i)=>{if(te(s))return s.flatMap(u=>i(u));if(Y(s))return s.flatMap(u=>i(u));if(le(s))return s.flatMap(u=>i(u));if(pe(s))return s.flatMap(u=>i(u));throw new Error(`Unsupported functor type for flatMap: ${JSON.stringify(s)}`)},n=(s,i)=>{if(te(s)&&te(i))return s.flatMap(u=>i.map(l=>u(l)));if(Y(s)&&Y(i))return s.flatMap(u=>i.map(l=>u(l)));if(le(s)&&le(i))return s.flatMap(u=>i.map(l=>u(l)));if(pe(s)&&pe(i))return s.flatMap(u=>i.map(l=>u(l)));throw new Error(`Unsupported functor type for ap: ${JSON.stringify(s)}`)},o=s=>{if(te(s)){let i=s;if(i.isEmpty)return m([f.none()]);let u=i.get();if(Y(u))return u.map(l=>f(l));throw new Error("Unsupported inner container type for sequence")}if(Y(s)){let u=s.toArray();if(u.length===0)return f.none();let l=u[0];if(te(l)){for(let y of u)if(y.isEmpty)return f.none();let d=u.map(y=>y.get());return f(m(d))}throw new Error("Unsupported inner container type for sequence")}throw new Error(`Unsupported outer container type for sequence: ${JSON.stringify(s)}`)};return {_tag:"HKT",map:t,flatten:e,flatMap:r,ap:n,sequence:o,traverse:(s,i)=>o(t(s,u=>i(u))),_type:"HKT"}},ce=W();W.map=(t,e)=>ce.map(t,e);W.flatten=t=>ce.flatten(t);W.flatMap=(t,e)=>ce.flatMap(t,e);W.ap=(t,e)=>ce.ap(t,e);W.sequence=t=>ce.sequence(t);W.traverse=(t,e)=>ce.traverse(t,e);W.isOption=te;W.isList=Y;W.isEither=le;W.isTry=pe;function Jn(t){return {id:t,isSame:r=>r.id===t}}var re=t=>{let e=false,r,n,o=false,a=()=>{if(!e)try{r=t(),e=!0;}catch(i){throw n=i,o=true,e=true,i}if(o)throw n;return r};return {_tag:"Lazy",get isEvaluated(){return e},get:a,getOrElse:i=>{try{return a()}catch{return i}},getOrNull:()=>{try{return a()}catch{return null}},orNull:()=>{try{return a()}catch{return null}},getOrThrow:i=>{try{return a()}catch(u){throw i??u}},orElse:i=>D(()=>{try{return a()}catch{return i.get()}}),orUndefined:()=>{try{return a()}catch{return}},map:i=>D(()=>i(a())),ap:i=>D(()=>i.get()(a())),mapAsync:async i=>{let u=a(),l=await i(u);return D(()=>l)},flatMap:i=>D(()=>i(a()).get()),flatMapAsync:async i=>{let u=a(),l=await i(u);return D(()=>l.get())},filter:i=>D(()=>{let u=a();return i(u)?U(u):w}),recover:i=>D(()=>{try{return a()}catch(u){return i(u)}}),recoverWith:i=>D(()=>{try{return a()}catch(u){return i(u).get()}}),toOption:()=>{try{return U(a())}catch{return w}},toEither:()=>{try{return c(a())}catch(i){return p(i)}},toEitherWith:i=>{try{return c(a())}catch(u){return p(i(u))}},toTry:()=>P(()=>a()),tap:i=>D(()=>{let u=a();return i(u),u}),tapError:i=>D(()=>{try{return a()}catch(u){throw i(u),u}}),fold:i=>i(a()),foldWith:(i,u)=>{try{return u(a())}catch(l){return i(l)}},foldLeft:i=>u=>u(i,a()),foldRight:i=>u=>u(a(),i),match:i=>i.Lazy(a()),toString:()=>e&&!o?`Lazy(${me(r)})`:e&&o?`Lazy(<error: ${n instanceof Error?n.message:String(n)}>)`:"Lazy(<not evaluated>)",toValue:()=>e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false},get size(){try{return a(),1}catch{return 0}},get isEmpty(){try{return a(),!1}catch{return true}},contains:i=>{try{return a()===i}catch{return false}},reduce:i=>a(),reduceRight:i=>a(),count:i=>{try{return i(a())?1:0}catch{return 0}},find:i=>{try{let u=a();return i(u)?U(u):w}catch{return w}},exists:i=>{try{return i(a())}catch{return false}},forEach:i=>{try{i(a());}catch{}},pipe:i=>i(a()),serialize:()=>({toJSON:()=>JSON.stringify(e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false}),toYAML:()=>e&&!o?`_tag: Lazy
33
+ evaluated: true
34
+ value: ${me(r)}`:`_tag: Lazy
35
+ evaluated: false`,toBinary:()=>Buffer.from(JSON.stringify(e&&!o?{_tag:"Lazy",evaluated:true,value:r}:{_tag:"Lazy",evaluated:false})).toString("base64")}),typeable:"Lazy"}},Lt={of:t=>re(t),fromValue:t=>re(()=>t),fromOption:(t,e)=>re(()=>t._tag==="Some"?t.value:e()),fromTry:t=>re(()=>t.get()),fromEither:t=>re(()=>t.fold(e=>{throw e},e=>e)),fromPromise:t=>re(()=>{throw new Error("Promise not yet resolved. Use await on the promise before creating Lazy.")}),fail:t=>re(()=>{throw t})},D=a(re,Lt);var ge=Map;var Z=t=>{let r={values:new ge(t)},n=()=>Array.from(r.values.entries()).map(([T,h])=>b$1([T,h])),o=T=>Z(new ge(r.values).set(T.toArray()[0],T.toArray()[1]).entries()),a=T=>{let h=new ge(r.values);return h.delete(T)?Z(h.entries()):Z(r.values.entries())},s=T=>{let h=T.toArray();return r.values.get(h[0])===h[1]},i=()=>r.values.size,u=T=>Z(Array.from(r.values.entries()).map(([h,V])=>[h,T(V)])),l=T=>{let h=Z(r.values.entries()).toList();return Z(h.flatMap(T).toArray())},d=T=>{let h=[];for(let[V,se]of r.values.entries()){let fe=T.get(V);fe._tag==="Some"&&fe.value&&h.push([V,fe.value(se)]);}return Z(h)},y=async T=>{let h=new ge;for(let[V,se]of r.values.entries()){let fe=await T(se);for(let Xe of fe.toList()){let[et,tt]=Xe.toArray();h.set(et,tt);}}return Z(h.entries())},A=T=>m(n()).reduce(T),R=T=>m(n()).reduceRight(T),E=T=>h=>m(n()).foldLeft(T)(h),F=T=>h=>m(n()).foldRight(T)(h),X=T=>f(r.values.get(T)),ae=(T,h)=>f(r.values.get(T)).getOrElse(h),Te=()=>r.values.size===0,he=(T,h)=>f(r.values.get(T)).orElse(h),Ee=(T,h)=>{if(Te())return T();let V=n();if(V.length===0)return T();let se=V[0];return se===void 0?T():h(se)},_e=()=>m(n()),g=()=>ne(n()),B=()=>`Map(${n().toString()})`,_=T=>Te()?T.Empty():T.NonEmpty(n());return {_tag:"Map",[Symbol.iterator]:()=>r.values.entries(),add:o,remove:a,contains:s,get size(){return i()},map:u,ap:d,flatMap:l,flatMapAsync:y,reduce:A,reduceRight:R,foldLeft:E,foldRight:F,fold:Ee,match:_,get:X,getOrElse:ae,get isEmpty(){return Te()},orElse:he,toList:_e,toSet:g,toString:B,toValue:()=>({_tag:"Map",value:Array.from(r.values.entries())}),pipe:T=>T(Array.from(r.values.entries())),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())}),toYAML:()=>`_tag: Map
36
+ value: ${JSON.stringify(Array.from(r.values.entries()))}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Map",value:Array.from(r.values.entries())})).toString("base64")})}},kt=t=>Z(t),qe={fromJSON:t=>{let e=JSON.parse(t);return Be(e.value)},fromYAML:t=>{let r=t.split(`
37
+ `)[1]?.split(": ")[1];if(!r)return Be([]);let n=JSON.parse(r);return Be(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return qe.fromJSON(e)}},Be=a(kt,qe);var xt={default:t=>e=>t(e),when:(t,e)=>r=>t(r)?e(r):void 0};var K=(t=[])=>{let e="Stack",r=[...t],n=()=>r.length,o=()=>r.length===0;return {_tag:e,get size(){return n()},get isEmpty(){return o()},contains:g=>r.includes(g),reduce:g=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduce(g)},reduceRight:g=>{if(r.length===0)throw new Error("Cannot reduce an empty stack");return r.reduceRight(g)},push:g=>K([...r,g]),pop:()=>{if(o())return [K([]),f(null)];let g=[...r],B=g.pop();return [K(g),f(B)]},peek:()=>o()?f(null):f(r[r.length-1]),map:g=>K(r.map(g)),flatMap:g=>o()?K([]):r.reduce((B,_)=>g(_).toArray().reduce((h,V)=>h.push(V),B),K([])),ap:g=>{let B=[];return r.forEach(_=>{g.toArray().forEach(T=>{B.push(T(_));});}),K(B)},flatMapAsync:async g=>o()?K([]):(await Promise.all(r.map(async _=>await g(_)))).reduce((_,T)=>T.toArray().reduce((h,V)=>h.push(V),_),K([])),toList:()=>m(r),toArray:()=>[...r],toString:()=>`Stack(${r.join(", ")})`,fold:(g,B)=>{if(o())return g();let _=r[r.length-1];return _!==void 0?B(_):g()},foldLeft:g=>B=>r.reduce(B,g),foldRight:g=>B=>r.reduceRight((_,T)=>B(T,_),g),match:g=>o()?g.Empty():g.NonEmpty([...r]),toValue:()=>({_tag:"Stack",value:r}),pipe:g=>g([...r]),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Stack",value:r}),toYAML:()=>`_tag: Stack
38
+ value: ${JSON.stringify(r)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Stack",value:r})).toString("base64")})}},bt=(t=[])=>K(t),Qe={empty:()=>K([]),of:t=>K([t]),fromJSON:t=>{let e=JSON.parse(t);return Pe(e.value)},fromYAML:t=>{let r=t.split(`
39
+ `)[1]?.split(": ")[1];if(!r)return Pe([]);let n=JSON.parse(r);return Pe(n)},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Qe.fromJSON(e)}},Pe=a(bt,Qe);function Eo(t){let e=Le({_tag:t._tag,impl:t.impl});return {...e,toValue:()=>({_tag:e._tag,value:t.value})}}var U=t=>({_tag:"Some",value:t,isEmpty:false,isSome(){return true},isNone(){return false},get:()=>t,getOrElse:()=>t,getOrThrow:()=>t,orElse:e=>U(t),orNull:()=>t,orUndefined:()=>t,map:e=>U(e(t)),ap:e=>e._tag==="Some"&&e.value?U(e.value(t)):G,filter(e){return e(t)?U(t):G},count:e=>e(t)?1:0,find:e=>e(t)?U(t):G,exists:e=>e(t),forEach:e=>e(t),fold:(e,r)=>r(t),match:e=>e.Some(t),flatMap:e=>e(t),flatMapAsync:async e=>await e(t),reduce:e=>e(void 0,t),reduceRight:e=>e(void 0,t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),toList:()=>m([t]),contains:e=>e===t,size:1,toOption:()=>U(t),toEither:e=>c(t),toTry:()=>P(()=>t),toPromise:()=>Promise.resolve(t),toString:()=>`Some(${me(t)})`,toValue:()=>({_tag:"Some",value:t}),pipe:e=>e(t),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"Some",value:t}),toYAML:()=>`_tag: Some
40
+ value: ${me(t)}`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"Some",value:t})).toString("base64")}),[k](){return {ok:true,value:t}}}),G={_tag:"None",value:void 0,isEmpty:true,isSome(){return false},isNone(){return true},get:()=>{throw new Error("Cannot call get() on None")},getOrElse:t=>t,getOrThrow(t){throw t},orElse:t=>t,orNull:()=>null,orUndefined:()=>{},map:t=>G,ap:t=>G,filter(t){return G},count:t=>0,find:t=>G,exists:t=>false,forEach:t=>{},flatMap:t=>G,flatMapAsync:t=>Promise.resolve(G),reduce:()=>{},reduceRight:()=>{},fold:(t,e)=>t(),match:t=>t.None(),foldLeft:t=>()=>t,foldRight:t=>()=>t,toList:()=>m([]),contains:()=>false,size:0,toOption:()=>G,toEither:t=>p(t),toTry:()=>P(()=>{throw new Error("None")}),toPromise:()=>Promise.reject(new Error("Cannot convert None to Promise")),toString:()=>"None",toValue:()=>({_tag:"None",value:void 0}),pipe:t=>t(void 0),serialize:()=>({toJSON:()=>JSON.stringify({_tag:"None",value:null}),toYAML:()=>`_tag: None
41
+ value: null`,toBinary:()=>Buffer.from(JSON.stringify({_tag:"None",value:null})).toString("base64")}),[k](){return {ok:false,empty:true}}},w=()=>G,wt=t=>t!=null?U(t):w(),Ze={from:t=>f(t),none:()=>w(),fromJSON:t=>{let e=JSON.parse(t);return e._tag==="Some"?U(e.value):w()},fromYAML:t=>{let e=t.split(`
42
+ `),r=e[0]?.split(": ")[1],n=e[1]?.split(": ")[1];if(!r||!n)return w();let o=n==="null"?null:JSON.parse(n);return r==="Some"?U(o):w()},fromBinary:t=>{let e=Buffer.from(t,"base64").toString();return Ze.fromJSON(e)}},f=a(wt,Ze);export{Oe as $,xr as A,br as B,wr as C,Ur as D,Sr as E,vr as F,Or as G,Br as H,Nr as I,Vr as J,$e as K,Yr as L,qr as M,Qr as N,Hr as O,Zr as P,Xr as Q,en as R,tn as S,rn as T,ke as U,Q as V,mt as W,Se as X,yt as Y,ye as Z,H as _,k as a,N as aa,U as b,ve as ba,w as c,J as ca,wt as d,Ge as da,f as e,xe as ea,ne as f,An as fa,x as g,Ln as ga,$t as h,xn as ha,P as i,S as ia,Le as j,Bn as ja,we as k,At as ka,m as l,In as la,c as m,W as ma,p as n,Jn as na,fr as o,D as oa,dr as p,ge as pa,mr as q,Be as qa,ut as r,xt as ra,lt as s,Pe as sa,yr as t,Eo as ta,Ie as u,I as v,pt as w,Ar as x,Lr as y,kr as z};//# sourceMappingURL=chunk-7VZBQDNM.mjs.map
43
+ //# sourceMappingURL=chunk-7VZBQDNM.mjs.map