fp-pack 0.5.0 → 0.7.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.
Files changed (82) hide show
  1. package/README.md +17 -15
  2. package/dist/fp-pack.umd.js +1 -1
  3. package/dist/fp-pack.umd.js.map +1 -1
  4. package/dist/implement/async/pipeAsync.d.ts +11 -0
  5. package/dist/implement/async/pipeAsync.d.ts.map +1 -1
  6. package/dist/implement/async/pipeAsync.mjs.map +1 -1
  7. package/dist/implement/async/pipeAsyncSideEffect.d.ts +11 -0
  8. package/dist/implement/async/pipeAsyncSideEffect.d.ts.map +1 -1
  9. package/dist/implement/async/pipeAsyncSideEffect.mjs.map +1 -1
  10. package/dist/implement/composition/compose.d.ts +25 -9
  11. package/dist/implement/composition/compose.d.ts.map +1 -1
  12. package/dist/implement/composition/compose.mjs.map +1 -1
  13. package/dist/implement/composition/compose.type-test.d.ts +35 -0
  14. package/dist/implement/composition/compose.type-test.d.ts.map +1 -0
  15. package/dist/implement/composition/compose.util.type-test.d.ts +31 -0
  16. package/dist/implement/composition/compose.util.type-test.d.ts.map +1 -0
  17. package/dist/implement/composition/curry.d.ts +5 -5
  18. package/dist/implement/composition/curry.d.ts.map +1 -1
  19. package/dist/implement/composition/curry.mjs.map +1 -1
  20. package/dist/implement/composition/index.d.ts +4 -0
  21. package/dist/implement/composition/index.d.ts.map +1 -1
  22. package/dist/implement/composition/pipe.d.ts +3 -0
  23. package/dist/implement/composition/pipe.d.ts.map +1 -1
  24. package/dist/implement/composition/pipe.mjs.map +1 -1
  25. package/dist/implement/composition/pipe.type-test.d.ts +117 -1
  26. package/dist/implement/composition/pipe.type-test.d.ts.map +1 -1
  27. package/dist/implement/composition/pipe.util.type-test.d.ts +75 -0
  28. package/dist/implement/composition/pipe.util.type-test.d.ts.map +1 -0
  29. package/dist/implement/composition/sideEffect.d.ts +1 -1
  30. package/dist/implement/composition/sideEffect.d.ts.map +1 -1
  31. package/dist/implement/composition/sideEffect.mjs.map +1 -1
  32. package/dist/implement/composition/tap0.d.ts +6 -0
  33. package/dist/implement/composition/tap0.d.ts.map +1 -0
  34. package/dist/implement/composition/tap0.mjs +9 -0
  35. package/dist/implement/composition/tap0.mjs.map +1 -0
  36. package/dist/implement/object/assocPath.d.ts +2 -1
  37. package/dist/implement/object/assocPath.d.ts.map +1 -1
  38. package/dist/implement/object/assocPath.mjs.map +1 -1
  39. package/dist/implement/object/dissocPath.d.ts +2 -1
  40. package/dist/implement/object/dissocPath.d.ts.map +1 -1
  41. package/dist/implement/object/dissocPath.mjs.map +1 -1
  42. package/dist/implement/object/index.d.ts +1 -0
  43. package/dist/implement/object/index.d.ts.map +1 -1
  44. package/dist/implement/object/path.d.ts +4 -2
  45. package/dist/implement/object/path.d.ts.map +1 -1
  46. package/dist/implement/object/path.mjs.map +1 -1
  47. package/dist/implement/object/pathKey.d.ts +2 -0
  48. package/dist/implement/object/pathKey.d.ts.map +1 -0
  49. package/dist/implement/object/pathOr.d.ts +5 -3
  50. package/dist/implement/object/pathOr.d.ts.map +1 -1
  51. package/dist/implement/object/pathOr.mjs.map +1 -1
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.mjs +230 -228
  55. package/dist/index.mjs.map +1 -1
  56. package/dist/skills/fp-pack/SKILL.md +19 -16
  57. package/dist/skills/fp-pack.md +19 -16
  58. package/dist/stream/index.d.ts +1 -0
  59. package/dist/stream/index.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/implement/async/pipeAsync.ts +71 -0
  62. package/src/implement/async/pipeAsyncSideEffect.ts +74 -0
  63. package/src/implement/composition/compose.test.ts +14 -0
  64. package/src/implement/composition/compose.ts +133 -21
  65. package/src/implement/composition/compose.type-test.ts +109 -0
  66. package/src/implement/composition/compose.util.type-test.ts +128 -0
  67. package/src/implement/composition/curry.ts +5 -5
  68. package/src/implement/composition/index.ts +4 -0
  69. package/src/implement/composition/pipe.ts +4 -0
  70. package/src/implement/composition/pipe.type-test.ts +269 -1
  71. package/src/implement/composition/pipe.util.type-test.ts +256 -0
  72. package/src/implement/composition/sideEffect.ts +1 -1
  73. package/src/implement/composition/tap0.test.ts +16 -0
  74. package/src/implement/composition/tap0.ts +10 -0
  75. package/src/implement/object/assocPath.ts +2 -2
  76. package/src/implement/object/dissocPath.ts +2 -2
  77. package/src/implement/object/index.ts +1 -0
  78. package/src/implement/object/path.ts +5 -3
  79. package/src/implement/object/pathKey.ts +1 -0
  80. package/src/implement/object/pathOr.ts +6 -4
  81. package/src/index.ts +3 -0
  82. package/src/stream/index.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fp-pack.umd.js","sources":["../src/implement/composition/pipe.ts","../src/implement/composition/sideEffect.ts","../src/implement/composition/pipeSideEffect.ts","../src/implement/composition/pipeSideEffectStrict.ts","../src/implement/composition/compose.ts","../src/implement/composition/curry.ts","../src/implement/composition/partial.ts","../src/implement/composition/flip.ts","../src/implement/composition/complement.ts","../src/implement/composition/identity.ts","../src/implement/composition/constant.ts","../src/implement/composition/from.ts","../src/implement/composition/tap.ts","../src/implement/composition/once.ts","../src/implement/composition/memoize.ts","../src/implement/control/ifElse.ts","../src/implement/control/when.ts","../src/implement/control/unless.ts","../src/implement/control/cond.ts","../src/implement/control/tryCatch.ts","../src/implement/control/guard.ts","../src/implement/array/map.ts","../src/implement/array/filter.ts","../src/implement/array/reduce.ts","../src/implement/array/flatMap.ts","../src/implement/array/find.ts","../src/implement/array/some.ts","../src/implement/array/every.ts","../src/implement/array/take.ts","../src/implement/array/drop.ts","../src/implement/array/dropWhile.ts","../src/implement/array/chunk.ts","../src/implement/array/zip.ts","../src/implement/array/zipWith.ts","../src/implement/array/unzip.ts","../src/implement/array/uniq.ts","../src/implement/array/uniqBy.ts","../src/implement/array/sortBy.ts","../src/implement/array/sort.ts","../src/implement/array/groupBy.ts","../src/implement/array/zipIndex.ts","../src/implement/array/takeWhile.ts","../src/implement/array/scan.ts","../src/implement/array/concat.ts","../src/implement/array/append.ts","../src/implement/array/prepend.ts","../src/implement/array/flatten.ts","../src/implement/array/head.ts","../src/implement/array/tail.ts","../src/implement/array/last.ts","../src/implement/array/init.ts","../src/implement/array/range.ts","../src/implement/array/partition.ts","../src/implement/array/flattenDeep.ts","../src/implement/object/prop.ts","../src/implement/object/propStrict.ts","../src/implement/object/propOr.ts","../src/implement/object/path.ts","../src/implement/object/pathOr.ts","../src/implement/object/pick.ts","../src/implement/object/omit.ts","../src/implement/object/assoc.ts","../src/implement/object/assocPath.ts","../src/implement/object/dissoc.ts","../src/implement/object/dissocPath.ts","../src/implement/object/merge.ts","../src/implement/object/mergeDeep.ts","../src/implement/object/mergeAll.ts","../src/implement/object/keys.ts","../src/implement/object/values.ts","../src/implement/object/entries.ts","../src/implement/object/mapValues.ts","../src/implement/object/evolve.ts","../src/implement/object/has.ts","../src/implement/object/hasPath.ts","../src/implement/equality/equals.ts","../src/implement/equality/isNil.ts","../src/implement/equality/isEmpty.ts","../src/implement/equality/isType.ts","../src/implement/equality/gt.ts","../src/implement/equality/gte.ts","../src/implement/equality/lt.ts","../src/implement/equality/lte.ts","../src/implement/equality/clamp.ts","../src/implement/equality/includes.ts","../src/implement/math/add.ts","../src/implement/math/sub.ts","../src/implement/math/mul.ts","../src/implement/math/div.ts","../src/implement/math/sum.ts","../src/implement/math/mean.ts","../src/implement/math/min.ts","../src/implement/math/max.ts","../src/implement/math/round.ts","../src/implement/math/floor.ts","../src/implement/math/ceil.ts","../src/implement/math/randomInt.ts","../src/implement/string/trim.ts","../src/implement/string/split.ts","../src/implement/string/join.ts","../src/implement/string/replace.ts","../src/implement/string/toUpper.ts","../src/implement/string/toLower.ts","../src/implement/string/startsWith.ts","../src/implement/string/endsWith.ts","../src/implement/string/match.ts","../src/implement/async/pipeAsync.ts","../src/implement/async/pipeAsyncSideEffect.ts","../src/implement/async/pipeAsyncSideEffectStrict.ts","../src/implement/async/delay.ts","../src/implement/async/timeout.ts","../src/implement/async/retry.ts","../src/implement/async/debounce.ts","../src/implement/async/debounceLeading.ts","../src/implement/async/debounceLeadingTrailing.ts","../src/implement/async/throttle.ts","../src/implement/nullable/maybe.ts","../src/implement/nullable/mapMaybe.ts","../src/implement/nullable/getOrElse.ts","../src/implement/nullable/result.ts","../src/implement/nullable/fold.ts","../src/implement/debug/assert.ts","../src/implement/debug/invariant.ts","../src/implement/debug/log.ts"],"sourcesContent":["type UnaryFn<A, R> = (a: A) => R;\ntype ZeroFn<R> = () => R;\ntype PipeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<infer A, any>, ...UnaryFn<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? R\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<R, any>, ...UnaryFn<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Pipe<Fns extends UnaryFn<any, any>[]> = (input: PipeInput<Fns>) => PipeOutput<Fns>;\n\nfunction pipe<R>(ab: ZeroFn<R>): () => R;\nfunction pipe<B, R>(ab: ZeroFn<B>, bc: UnaryFn<B, R>): () => R;\nfunction pipe<B, C, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): () => R;\nfunction pipe<B, C, D, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, D>, de: UnaryFn<D, R>): () => R;\nfunction pipe<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): () => R;\nfunction pipe<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): () => R;\nfunction pipe<A, R>(ab: UnaryFn<A, R>): (a: A) => R;\nfunction pipe<A, B, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, R>): (a: A) => R;\nfunction pipe<A, B, C, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): (a: A) => R;\nfunction pipe<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): (a: A) => R;\n\nfunction pipe<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): Pipe<Fns>;\nfunction pipe(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction pipe(...funcs: Array<(input: any) => any>) {\n return (init: any) => {\n return funcs.reduce((acc, fn) => fn(acc), init);\n };\n}\n\nexport default pipe;\n","/**\n * SideEffect - side effect container (never auto-executed)\n */\nexport class SideEffect<T = unknown> {\n readonly effect: () => T;\n readonly label?: string;\n\n constructor(effect: () => T, label?: string) {\n this.effect = effect;\n this.label = label;\n }\n\n static of<T>(effect: () => T, label?: string): SideEffect<T> {\n return new SideEffect(effect, label);\n }\n}\n\ntype MatchHandlers<T, RValue, REffect> = {\n value: (value: T) => RValue;\n effect: (sideEffect: SideEffect) => REffect;\n};\n\nexport function matchSideEffect<T, RValue, REffect = any>(\n result: T | SideEffect,\n handlers: MatchHandlers<T, RValue, REffect>\n): RValue | REffect {\n if (result instanceof SideEffect) {\n return handlers.effect(result);\n }\n return handlers.value(result as T);\n}\n\nexport function runPipeResult<T, R=any>(result: T | SideEffect<R>): T | R {\n if (isSideEffect(result)) {\n return result.effect() as R;\n }\n return result as T;\n}\n\nexport function isSideEffect(value: unknown): value is SideEffect<any> {\n return value instanceof SideEffect;\n}\n\nexport default SideEffect;\n","import type { FromFn } from './from';\nimport SideEffect, { isSideEffect } from './sideEffect';\n\ntype MaybeSideEffect<T> = T | SideEffect<any>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype UnaryFn<A, R> = (a: A) => MaybeSideEffect<R>;\ntype ZeroFn<R> = () => MaybeSideEffect<R>;\ntype PipeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<infer A, any>, ...UnaryFn<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? MaybeSideEffect<R>\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Resolve<T> = T extends infer R ? R : never;\ntype PipeSideEffect<Fns extends UnaryFn<any, any>[]> = (\n input: PipeInput<Fns> | SideEffect<any>\n) => Resolve<PipeOutput<Fns>>;\ntype PipeSideEffectFrom<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]> = (\n input?: PipeInput<Fns> | SideEffect<any>\n) => Resolve<PipeOutput<Fns>>;\n\nfunction pipeSideEffect<R>(ab: ZeroFn<R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, R>(ab: ZeroFn<B>, bc: UnaryFn<B, R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffectFrom<Fns>;\nfunction pipeSideEffect<A, R>(ab: UnaryFn<A, R>): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\n\nfunction pipeSideEffect<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffect<Fns>;\nfunction pipeSideEffect(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction pipeSideEffect(...funcs: Array<(input: any) => any>) {\n return (init: any) => {\n let acc = init;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeSideEffect;\n","import type { FromFn } from './from';\nimport SideEffect, { isSideEffect } from './sideEffect';\n\ntype AnyFn = (...args: any[]) => any;\ntype MaybeSideEffect<T, E> = T | SideEffect<E>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype UnaryFn<A, R> = (a: A) => R;\ntype ZeroFn<R> = () => R;\n\ntype EffectOfReturn<R> = R extends SideEffect<infer E> ? E : never;\ntype EffectOfFn<F> = F extends (...args: any[]) => infer R ? EffectOfReturn<R> : never;\ntype EffectsOf<Fns extends AnyFn[]> = EffectOfFn<Fns[number]>;\n\ntype PipeValueOutputUnary<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? NonSideEffect<R>\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : never;\n\ntype PipeValueOutputStrict<Fns extends [AnyFn, ...AnyFn[]]> =\n Fns extends [ZeroFn<infer R>]\n ? NonSideEffect<R>\n : Fns extends [ZeroFn<infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Fns>\n : never;\n\ntype PipeInputStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? never\n : Fns extends [UnaryFn<infer A, any>, ...AnyFn[]]\n ? A\n : never;\n\ntype Resolve<T> = T extends infer R ? R : never;\n\ntype PipeSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input: PipeInputStrict<Fns>): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>;\n <EIn>(\n input: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;\n};\ntype PipeSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input?: PipeInputStrict<Fns>): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>;\n <EIn>(\n input?: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;\n};\n\ntype PipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? () => Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>\n : PipeSideEffectStrictUnary<Fns>;\n\nfunction pipeSideEffectStrict<R>(ab: ZeroFn<R>): PipeSideEffectStrict<[ZeroFn<R>]>;\nfunction pipeSideEffectStrict<B, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, R>\n): PipeSideEffectStrict<[ZeroFn<B>, UnaryFn<NonSideEffect<B>, R>]>;\nfunction pipeSideEffectStrict<B, C, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, R>\n): PipeSideEffectStrict<[ZeroFn<B>, UnaryFn<NonSideEffect<B>, C>, UnaryFn<NonSideEffect<C>, R>]>;\nfunction pipeSideEffectStrict<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, J>,\n jk: UnaryFn<NonSideEffect<J>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, J>,\n UnaryFn<NonSideEffect<J>, R>\n]>;\nfunction pipeSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(\n ...funcs: Fns\n): PipeSideEffectStrictUnaryOptional<Fns>;\nfunction pipeSideEffectStrict<A, R>(ab: UnaryFn<A, R>): PipeSideEffectStrict<[UnaryFn<A, R>]>;\nfunction pipeSideEffectStrict<A, B, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, R>\n): PipeSideEffectStrict<[UnaryFn<A, B>, UnaryFn<NonSideEffect<B>, R>]>;\nfunction pipeSideEffectStrict<A, B, C, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, R>\n): PipeSideEffectStrict<[UnaryFn<A, B>, UnaryFn<NonSideEffect<B>, C>, UnaryFn<NonSideEffect<C>, R>]>;\nfunction pipeSideEffectStrict<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, J>,\n jk: UnaryFn<NonSideEffect<J>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, J>,\n UnaryFn<NonSideEffect<J>, R>\n]>;\n\nfunction pipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeSideEffectStrict<Fns>;\nfunction pipeSideEffectStrict(...funcs: Array<(input: any) => any>) {\n return (init?: any) => {\n let acc = init;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeSideEffectStrict;\n","/**\n * compose - 함수를 우→좌로 합성\n */\n\ntype UnaryFn<A, R> = (a: A) => R;\ntype ComposeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [...UnaryFn<any, any>[], UnaryFn<infer A, any>]\n ? A\n : never;\ntype ComposeChain<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<infer A, infer R>]\n ? UnaryFn<A, R>\n : Fns extends [UnaryFn<infer A, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<R, any>, ...UnaryFn<any, any>[]]\n ? ComposeChain<Rest> extends UnaryFn<any, infer NextR>\n ? UnaryFn<A, NextR>\n : never\n : never\n : never;\ntype Compose<Fns extends UnaryFn<any, any>[]> = (input: ComposeInput<Fns>) => ComposeChain<Fns> extends UnaryFn<\n any,\n infer R\n>\n ? R\n : never;\n\nfunction compose<A, R>(ab: UnaryFn<A, R>): (a: A) => R;\nfunction compose<A, B, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, R>): (a: A) => R;\nfunction compose<A, B, C, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): (a: A) => R;\nfunction compose<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): (a: A) => R;\n\nfunction compose<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): Compose<Fns>;\nfunction compose(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction compose(...funcs: Array<(input: any) => any>) {\n return (value: any) => funcs.reduceRight((acc, fn) => fn(acc), value);\n}\n\nexport default compose;\n","/**\n * Curry function with stable TypeScript types.\n * Supports functions with 2-5 parameters and keeps data-last call order.\n */\n\ntype Curry2<Fn> = Fn extends (a: infer A, b: infer B) => infer R\n ? {\n (...args: [A]): (b: B) => R;\n (...args: [A, B]): R;\n }\n : never;\n\ntype Curry3<Fn> = Fn extends (a: infer A, b: infer B, c: infer C) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => R;\n (...args: [A, B]): (c: C) => R;\n (...args: [A, B, C]): R;\n }\n : never;\n\ntype Curry4<Fn> = Fn extends (a: infer A, b: infer B, c: infer C, d: infer D) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => (d: D) => R;\n (...args: [A, B]): (c: C) => (d: D) => R;\n (...args: [A, B, C]): (d: D) => R;\n (...args: [A, B, C, D]): R;\n }\n : never;\n\ntype Curry5<Fn> = Fn extends (a: infer A, b: infer B, c: infer C, d: infer D, e: infer E) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => (d: D) => (e: E) => R;\n (...args: [A, B]): (c: C) => (d: D) => (e: E) => R;\n (...args: [A, B, C]): (d: D) => (e: E) => R;\n (...args: [A, B, C, D]): (e: E) => R;\n (...args: [A, B, C, D, E]): R;\n }\n : never;\n\ntype CurryVariadic<Fn extends (...args: any[]) => any> = Fn extends (...args: infer P) => infer R\n ? <T extends any[]>(\n ...args: T\n ) => T extends P ? R : P extends [...T, ...infer Rest] ? CurryVariadic<(...args: Rest) => R> : never\n : never;\n\ntype CurryByArity<Fn extends (...args: any[]) => any> = Parameters<Fn>['length'] extends 2\n ? Curry2<Fn>\n : Parameters<Fn>['length'] extends 3\n ? Curry3<Fn>\n : Parameters<Fn>['length'] extends 4\n ? Curry4<Fn>\n : Parameters<Fn>['length'] extends 5\n ? Curry5<Fn>\n : CurryVariadic<Fn>;\n\ntype Curried<Fn extends (...args: any[]) => any> = CurryByArity<Fn>;\n\nfunction curry<Fn extends (...args: any[]) => any>(fn: Fn): Curried<Fn>;\n\n// Implementation\nfunction curry(fn: (...args: any[]) => any, ...args: any[]): any {\n const curried = (accumulated: any[]) => {\n return accumulated.length >= fn.length\n ? fn(...accumulated)\n : (...nextArgs: any[]) => curried([...accumulated, ...nextArgs]);\n };\n\n return args.length === 0 ? curried([]) : curried(args);\n}\n\nexport default curry;\n","/**\n * partial - 인자를 미리 고정한 함수 생성\n */\nfunction partial<Args extends any[], Rest extends any[], R>(\n fn: (...args: [...Args, ...Rest]) => R,\n ...preset: Args\n): (...rest: Rest) => R {\n return function partiallyApplied(this: unknown, ...rest: Rest) {\n const all = [...preset, ...rest] as [...Args, ...Rest];\n return fn.apply(this as any, all);\n };\n}\n\nexport default partial;\n","/**\n * flip - 함수 인자 순서를 뒤집음\n */\nfunction flip<A, B, R>(fn: (a: A, b: B) => R): (b: B, a: A) => R;\nfunction flip<A, B, C, R>(fn: (a: A, b: B, c: C) => R): (c: C, b: B, a: A) => R;\nfunction flip<A, B, C, D, R>(fn: (a: A, b: B, c: C, d: D) => R): (d: D, c: C, b: B, a: A) => R;\nfunction flip<A, B, C, D, E, R>(fn: (a: A, b: B, c: C, d: D, e: E) => R): (e: E, d: D, c: C, b: B, a: A) => R;\nfunction flip<R>(fn: (...args: any[]) => R): (...reversed: any[]) => R;\nfunction flip<R>(fn: (...args: any[]) => R) {\n return function flipped(this: unknown, ...args: any[]) {\n const reversed = [...args].reverse();\n return fn.apply(this, reversed);\n };\n}\n\nexport default flip;\n","/**\n * complement - 조건 함수 반전\n */\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean): (...args: T) => boolean;\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean, ...args: T): boolean;\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean, ...args: T) {\n if (args.length === 0) {\n return (...nextArgs: T) => !predicate(...nextArgs);\n }\n return !predicate(...args);\n}\n\nexport default complement;\n","/**\n * identity (id) - 입력을 그대로 반환\n */\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport default identity;\n","/**\n * constant (always) - 항상 같은 값을 반환\n */\nfunction constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport default constant;\n","/**\n * from - 입력을 무시하고 고정 값을 반환\n */\nexport type FromFn<T> = {\n <I>(_input: I): T;\n readonly __from: true;\n};\n\nfunction from<T>(value: T): FromFn<T> {\n const fn = (_input: unknown) => value;\n Object.defineProperty(fn, '__from', { value: true });\n return fn as FromFn<T>;\n}\n\nexport default from;\n","/**\n * tap - 값을 그대로 흘리며 side-effect 실행\n */\nfunction tap<T>(fn: (value: T) => void): (value: T) => T {\n return (value: T) => {\n fn(value);\n return value;\n };\n}\n\nexport default tap;\n","/**\n * once - 한 번만 실행되는 함수\n */\ntype AnyFn = (...args: any[]) => any;\n\nfunction once<T extends AnyFn>(fn: T): T {\n let called = false;\n let value: any;\n\n const wrapped = function (this: any, ...args: any[]) {\n if (!called) {\n called = true;\n value = fn.apply(this, args);\n }\n return value;\n };\n\n return wrapped as T;\n}\n\nexport default once;\n","/**\n * memoize - 동일 입력에 대해 결과 캐싱\n */\ntype AnyFn = (...args: any[]) => any;\n\nfunction memoize<T extends AnyFn>(fn: T): T {\n const cache = new Map<any, any>();\n const RESULT = Symbol('result');\n\n const memoized = function (this: any, ...args: any[]) {\n let node = cache;\n for (const arg of args) {\n if (!node.has(arg)) {\n node.set(arg, new Map());\n }\n node = node.get(arg);\n }\n\n if (node.has(RESULT)) {\n return node.get(RESULT);\n }\n\n const value = fn.apply(this, args);\n node.set(RESULT, value);\n return value;\n };\n\n return memoized as T;\n}\n\nexport default memoize;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\n\ntype IfElse = {\n <T, RTrue, RFalse>(\n ...args: [predicate: (value: T) => boolean]\n ): (onTrue: (value: T) => RTrue) => (onFalse: (value: T) => RFalse) => (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [predicate: (value: NoInfer<T>) => boolean, onTrue: (value: T) => RTrue]\n ): (onFalse: (value: T) => RFalse) => (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [\n predicate: (value: NoInfer<T>) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse\n ]\n ): (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [\n predicate: (value: NoInfer<T>) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse,\n value: T\n ]\n ): RTrue | RFalse;\n};\n\n/**\n * ifElse - 조건에 따라 다른 함수 실행\n */\nfunction ifElse<T, RTrue, RFalse>(\n predicate: (value: T) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse,\n value: T\n): RTrue | RFalse {\n return predicate(value) ? onTrue(value) : onFalse(value);\n}\n\nconst curriedIfElse = curry(ifElse) as IfElse;\nexport default curriedIfElse;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\ntype Widen<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T;\n\ntype When = {\n <T>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => Widen<T>\n ) => (value: Widen<T>) => Widen<T>;\n <T, R>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => R\n ) => (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => Widen<T>]\n ): (value: Widen<T>) => Widen<T>;\n <T, R>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => R]\n ): (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => Widen<T>,\n value: Widen<T>\n ]\n ): Widen<T>;\n <T, R>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => R,\n value: Widen<T>\n ]\n ): Widen<T> | R;\n};\n\n/**\n * when - 조건이 true일 때만 적용\n */\nfunction when<T>(\n predicate: (value: T) => boolean,\n fn: (value: T) => T,\n value: T\n): T {\n return predicate(value) ? fn(value) : value;\n}\n\nconst curriedWhen = curry(when) as When;\nexport default curriedWhen;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\ntype Widen<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T;\n\ntype Unless = {\n <T>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => Widen<T>\n ) => (value: Widen<T>) => Widen<T>;\n <T, R>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => R\n ) => (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => Widen<T>]\n ): (value: Widen<T>) => Widen<T>;\n <T, R>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => R]\n ): (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => Widen<T>,\n value: Widen<T>\n ]\n ): Widen<T>;\n <T, R>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => R,\n value: Widen<T>\n ]\n ): Widen<T> | R;\n};\n\n/**\n * unless - 조건이 false일 때만 적용\n */\nfunction unless<T>(\n predicate: (value: T) => boolean,\n fn: (value: T) => T,\n value: T\n): T {\n return predicate(value) ? value : fn(value);\n}\n\nconst curriedUnless = curry(unless) as Unless;\nexport default curriedUnless;\n","/**\n * cond - 다중 조건 분기 (switch 대체)\n */\nfunction cond<T, R>(\n conditions: Array<[(value: T) => boolean, (value: T) => R]>\n): (value: T) => R | undefined {\n return (value: T) => {\n for (const [predicate, handler] of conditions) {\n if (predicate(value)) {\n return handler(value);\n }\n }\n return undefined;\n };\n}\n\nexport default cond;\n","import curry from '../composition/curry';\n\ntype TryCatch = {\n <T, R>(...args: [tryFn: (value: T) => R]): (\n catchFn: (error: Error, value: T) => R\n ) => (value: T) => R;\n <T, R>(\n ...args: [tryFn: (value: T) => R, catchFn: (error: Error, value: T) => R]\n ): (value: T) => R;\n <T, R>(\n ...args: [\n tryFn: (value: T) => R,\n catchFn: (error: Error, value: T) => R,\n value: T\n ]\n ): R;\n};\n\n/**\n * tryCatch - 예외를 함수형으로 처리\n */\nfunction tryCatch<T, R>(\n tryFn: (value: T) => R,\n catchFn: (error: Error, value: T) => R,\n value: T\n): R {\n try {\n return tryFn(value);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n return catchFn(error, value);\n }\n}\n\nconst curriedTryCatch = curry(tryCatch) as TryCatch;\nexport default curriedTryCatch;\n","import curry from '../composition/curry';\n\ntype Guard = {\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean]\n ): (defaultValue: U) => (value: T) => T;\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean, defaultValue: U]\n ): (value: T) => T;\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean, defaultValue: U, value: T]\n ): T;\n};\n\n/**\n * guard - 조건 불만족 시 early return\n */\nfunction guard<T, U extends T>(\n predicate: (value: T) => boolean,\n defaultValue: U,\n value: T\n): T {\n return predicate(value) ? value : defaultValue;\n}\n\nconst curriedGuard = curry(guard) as Guard;\nexport default curriedGuard;\n","import curry from '../composition/curry';\n\ntype Map = {\n <T, R>(...args: [fn: (value: T) => R]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (value: T) => R, arr: T[]]): R[];\n};\n\n/**\n * map - 요소 변환\n */\nfunction map<T, R>(fn: (value: T) => R, arr: T[]): R[] {\n return arr.map(fn);\n}\n\nconst curriedMap = curry(map) as Map;\nexport default curriedMap;\n","import curry from '../composition/curry';\n\ntype Filter = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * filter - 조건 필터링\n */\nfunction filter<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n return arr.filter(predicate);\n}\n\nconst curriedFilter = curry(filter) as Filter;\nexport default curriedFilter;\n","import curry from '../composition/curry';\n\ntype Reduce = {\n <T, R>(...args: [fn: (acc: R, value: T) => R]): (initial: R) => (arr: T[]) => R;\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R]): (arr: T[]) => R;\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R, arr: T[]]): R;\n};\n\n/**\n * reduce - 누적 연산\n */\nfunction reduce<T, R>(\n fn: (acc: R, value: T) => R,\n initial: R,\n arr: T[]\n): R {\n return arr.reduce(fn, initial);\n}\n\nconst curriedReduce = curry(reduce) as Reduce;\nexport default curriedReduce;\n","import curry from '../composition/curry';\n\ntype FlatMap = {\n <T, R>(...args: [fn: (value: T) => R[]]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (value: T) => R[], arr: T[]]): R[];\n};\n\n/**\n * flatMap - map 후 flatten\n */\nfunction flatMap<T, R>(fn: (value: T) => R[], arr: T[]): R[] {\n return arr.flatMap(fn);\n}\n\nconst curriedFlatMap = curry(flatMap) as FlatMap;\nexport default curriedFlatMap;\n","import curry from '../composition/curry';\n\ntype Find = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T | undefined;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T | undefined;\n};\n\n/**\n * find - 조건 만족 첫 요소\n */\nfunction find<T>(predicate: (value: T) => boolean, arr: T[]): T | undefined {\n return arr.find(predicate);\n}\n\nconst curriedFind = curry(find) as Find;\nexport default curriedFind;\n","import curry from '../composition/curry';\n\ntype Some = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => boolean;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): boolean;\n};\n\n/**\n * some - 조건 검사 (하나라도 만족)\n */\nfunction some<T>(predicate: (value: T) => boolean, arr: T[]): boolean {\n for (let i = 0; i < arr.length; i++) {\n if (predicate(arr[i])) return true;\n }\n return false;\n}\n\nconst curriedSome = curry(some) as Some;\nexport default curriedSome;\n","import curry from '../composition/curry';\n\ntype Every = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => boolean;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): boolean;\n};\n\n/**\n * every - 조건 검사 (모두 만족)\n */\nfunction every<T>(predicate: (value: T) => boolean, arr: T[]): boolean {\n return arr.every(predicate);\n}\n\nconst curriedEvery = curry(every) as Every;\nexport default curriedEvery;\n","import curry from '../composition/curry';\n\ntype Take = {\n (n: number): <T>(arr: T[]) => T[];\n <T>(...args: [n: number, arr: T[]]): T[];\n};\n\n/**\n * take - 앞에서 n개 선택\n */\nfunction take<T>(n: number, arr: T[]): T[] {\n if (n <= 0) return [];\n if (n >= arr.length) return [...arr];\n return arr.slice(0, n);\n}\n\nconst curriedTake = curry(take) as Take;\nexport default curriedTake;\n","import curry from '../composition/curry';\n\ntype Drop = {\n (n: number): <T>(arr: T[]) => T[];\n <T>(...args: [n: number, arr: T[]]): T[];\n};\n\n/**\n * drop - 앞에서 n개 제외\n */\nfunction drop<T>(n: number, arr: T[]): T[] {\n const count = Math.floor(n);\n if (!Number.isFinite(count) || count <= 0) {\n return arr;\n }\n return arr.slice(count);\n}\n\nconst curriedDrop = curry(drop) as Drop;\nexport default curriedDrop;\n","import curry from '../composition/curry';\n\ntype DropWhile = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * dropWhile - 조건이 유지되는 동안 앞에서 제외\n */\nfunction dropWhile<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n const result: T[] = [];\n let dropping = true;\n for (const item of arr) {\n if (dropping && !predicate(item)) {\n dropping = false;\n }\n if (!dropping) {\n result.push(item);\n }\n }\n return result;\n}\n\nconst curriedDropWhile = curry(dropWhile) as DropWhile;\nexport default curriedDropWhile;\n","import curry from '../composition/curry';\n\ntype Chunk = {\n (size: number): <T>(arr: T[]) => T[][];\n <T>(...args: [size: number, arr: T[]]): T[][];\n};\n\n/**\n * chunk - 배열을 일정 크기로 분할\n */\nfunction chunk<T>(size: number, arr: T[]): T[][] {\n const chunkSize = Math.floor(size);\n if (!Number.isFinite(chunkSize) || chunkSize <= 0) {\n return [];\n }\n\n const result: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n result.push(arr.slice(i, i + chunkSize));\n }\n return result;\n}\n\nconst curriedChunk = curry(chunk) as Chunk;\nexport default curriedChunk;\n","import curry from '../composition/curry';\n\ntype Zip = {\n <U>(...args: [arr2: U[]]): <T>(arr1: T[]) => Array<[T, U]>;\n <T, U>(...args: [arr2: U[], arr1: T[]]): Array<[T, U]>;\n};\n\n/**\n * zip - 배열 병합\n */\nfunction zip<T, U>(arr2: U[], arr1: T[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n\n for (let i = 0; i < length; i += 1) {\n result.push([arr1[i], arr2[i]]);\n }\n\n return result;\n}\n\nconst curriedZip = curry(zip) as Zip;\nexport default curriedZip;\n","import curry from '../composition/curry';\n\ntype ZipWith = {\n <A, B, R>(...args: [fn: (a: A, b: B) => R]): (other: B[]) => (arr: A[]) => R[];\n <A, B, R>(...args: [fn: (a: A, b: B) => R, other: B[]]): (arr: A[]) => R[];\n <A, B, R>(...args: [fn: (a: A, b: B) => R, other: B[], arr: A[]]): R[];\n};\n\n/**\n * zipWith - 두 배열을 함수로 결합\n */\nfunction zipWith<A, B, R>(fn: (a: A, b: B) => R, other: B[], arr: A[]): R[] {\n const length = Math.min(arr.length, other.length);\n const result: R[] = [];\n for (let i = 0; i < length; i += 1) {\n result.push(fn(arr[i], other[i]));\n }\n return result;\n}\n\nconst curriedZipWith = curry(zipWith) as ZipWith;\nexport default curriedZipWith;\n","/**\n * unzip - 배열 분리\n */\nfunction unzip<T, U>(arr: Array<[T, U]>): [T[], U[]] {\n const left: T[] = [];\n const right: U[] = [];\n\n for (const [a, b] of arr) {\n left.push(a);\n right.push(b);\n }\n\n return [left, right];\n}\n\nexport default unzip;\n","/**\n * uniq - 중복 제거\n */\nfunction uniq<T>(arr: T[]): T[] {\n const seen = new Set<T>();\n const result: T[] = [];\n for (const item of arr) {\n if (!seen.has(item)) {\n seen.add(item);\n result.push(item);\n }\n }\n return result;\n}\n\nexport default uniq;\n","import curry from '../composition/curry';\n\ntype UniqBy = {\n <T>(...args: [fn: (value: T) => any]): (arr: T[]) => T[];\n <T>(...args: [fn: (value: T) => any, arr: T[]]): T[];\n};\n\n/**\n * uniqBy - 기준 함수로 중복 제거\n */\nfunction uniqBy<T>(fn: (value: T) => any, arr: T[]): T[] {\n const seen = new Set<any>();\n const result: T[] = [];\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return result;\n}\n\nconst curriedUniqBy = curry(uniqBy) as UniqBy;\nexport default curriedUniqBy;\n","import curry from '../composition/curry';\n\ntype SortBy = {\n <T>(...args: [fn: (value: T) => any]): (arr: T[]) => T[];\n <T>(...args: [fn: (value: T) => any, arr: T[]]): T[];\n};\n\n/**\n * sortBy - 기준 함수로 정렬\n */\nfunction sortBy<T>(fn: (value: T) => any, arr: T[]): T[] {\n return [...arr].sort((a, b) => {\n const aKey = fn(a);\n const bKey = fn(b);\n if (aKey < bKey) return -1;\n if (aKey > bKey) return 1;\n return 0;\n });\n}\n\nconst curriedSortBy = curry(sortBy) as SortBy;\nexport default curriedSortBy;\n","import curry from '../composition/curry';\n\ntype Sort = {\n <T>(...args: [compare: (a: T, b: T) => number]): (arr: T[]) => T[];\n <T>(...args: [compare: (a: T, b: T) => number, arr: T[]]): T[];\n};\n\n/**\n * sort - 비교 함수로 정렬 (불변)\n */\nfunction sort<T>(compare: (a: T, b: T) => number, arr: T[]): T[] {\n return [...arr].sort(compare);\n}\n\nconst curriedSort = curry(sort) as Sort;\nexport default curriedSort;\n","import curry from '../composition/curry';\n\ntype GroupBy = {\n <T>(...args: [fn: (value: T) => string]): (arr: T[]) => Record<string, T[]>;\n <T>(...args: [fn: (value: T) => string, arr: T[]]): Record<string, T[]>;\n};\n\n/**\n * groupBy - 키 기준 그룹화\n */\nfunction groupBy<T>(fn: (value: T) => string, arr: T[]): Record<string, T[]> {\n return arr.reduce<Record<string, T[]>>((acc, item) => {\n const key = fn(item);\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(item);\n return acc;\n }, {});\n}\n\nconst curriedGroupBy = curry(groupBy) as GroupBy;\nexport default curriedGroupBy;\n","/**\n * zipIndex - 인덱스와 값을 쌍으로 묶기\n */\nfunction zipIndex<T>(arr: T[]): Array<[number, T]> {\n return arr.map((value, index) => [index, value]);\n}\n\nexport default zipIndex;\n","import curry from '../composition/curry';\n\ntype TakeWhile = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * takeWhile - 조건이 유지되는 동안 앞에서 가져오기\n */\nfunction takeWhile<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n const result: T[] = [];\n for (const item of arr) {\n if (!predicate(item)) {\n break;\n }\n result.push(item);\n }\n return result;\n}\n\nconst curriedTakeWhile = curry(takeWhile) as TakeWhile;\nexport default curriedTakeWhile;\n","import curry from '../composition/curry';\n\ntype Scan = {\n <T, R>(...args: [fn: (acc: R, value: T) => R]): (initial: R) => (arr: T[]) => R[];\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R, arr: T[]]): R[];\n};\n\n/**\n * scan - 누적 중간값을 배열로 반환\n */\nfunction scan<T, R>(fn: (acc: R, value: T) => R, initial: R, arr: T[]): R[] {\n const result: R[] = [];\n let acc = initial;\n for (const item of arr) {\n acc = fn(acc, item);\n result.push(acc);\n }\n return result;\n}\n\nconst curriedScan = curry(scan) as Scan;\nexport default curriedScan;\n","import curry from '../composition/curry';\n\ntype Concat = {\n <T>(...args: [other: T[]]): (arr: T[]) => T[];\n <T>(...args: [other: T[], arr: T[]]): T[];\n};\n\n/**\n * concat - 두 배열 연결\n */\nfunction concat<T>(other: T[], arr: T[]): T[] {\n return [...arr, ...other];\n}\n\nconst curriedConcat = curry(concat) as Concat;\nexport default curriedConcat;\n","import curry from '../composition/curry';\n\ntype Append = {\n <T>(...args: [value: T]): (arr: T[]) => T[];\n <T>(...args: [value: T, arr: T[]]): T[];\n};\n\n/**\n * append - 배열 끝에 값 추가\n */\nfunction append<T>(value: T, arr: T[]): T[] {\n return [...arr, value];\n}\n\nconst curriedAppend = curry(append) as Append;\nexport default curriedAppend;\n","import curry from '../composition/curry';\n\ntype Prepend = {\n <T>(...args: [value: T]): (arr: T[]) => T[];\n <T>(...args: [value: T, arr: T[]]): T[];\n};\n\n/**\n * prepend - 배열 앞에 값 추가\n */\nfunction prepend<T>(value: T, arr: T[]): T[] {\n return [value, ...arr];\n}\n\nconst curriedPrepend = curry(prepend) as Prepend;\nexport default curriedPrepend;\n","/**\n * flatten - 1단계 배열 평탄화\n */\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.flat();\n}\n\nexport default flatten;\n","/**\n * head - 첫 요소 가져오기\n */\nfunction head<T>(arr: T[]): T | undefined {\n return arr[0];\n}\n\nexport default head;\n","/**\n * tail - 첫 요소 제외\n */\nfunction tail<T>(arr: T[]): T[] {\n return arr.slice(1);\n}\n\nexport default tail;\n","/**\n * last - 마지막 요소 가져오기\n */\nfunction last<T>(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}\n\nexport default last;\n","/**\n * init - 마지막 요소 제외\n */\nfunction init<T>(arr: T[]): T[] {\n if (arr.length <= 1) return [];\n return arr.slice(0, -1);\n}\n\nexport default init;\n","/**\n * range - 숫자 범위 생성 (end 제외)\n */\nfunction range(start: number, end: number): number[] {\n if (!Number.isFinite(start) || !Number.isFinite(end)) return [];\n if (start === end) return [];\n\n const step = start < end ? 1 : -1;\n const result: number[] = [];\n\n for (let value = start; step > 0 ? value < end : value > end; value += step) {\n result.push(value);\n }\n\n return result;\n}\n\nexport default range;\n","import curry from '../composition/curry';\n\ntype Partition = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => [T[], T[]];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): [T[], T[]];\n};\n\n/**\n * partition - 조건에 따라 분리\n */\nfunction partition<T>(predicate: (value: T) => boolean, arr: T[]): [T[], T[]] {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for (const item of arr) {\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n\n return [truthy, falsy];\n}\n\nconst curriedPartition = curry(partition) as Partition;\nexport default curriedPartition;\n","/**\n * flattenDeep - 깊은 배열 평탄화\n */\nfunction flattenDeep<T>(arr: any[]): T[] {\n const result: T[] = [];\n\n const walk = (items: any[]) => {\n for (const item of items) {\n if (Array.isArray(item)) {\n walk(item);\n } else {\n result.push(item);\n }\n }\n };\n\n walk(arr);\n return result;\n}\n\nexport default flattenDeep;\n","import curry from '../composition/curry';\n\ntype Prop = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => T[K] | undefined;\n <T, K extends keyof T = keyof T>(...args: [key: K, obj: T]): T[K] | undefined;\n};\n\n/**\n * prop - 안전한 프로퍼티 접근\n */\nfunction prop<T, K extends keyof T = keyof T>(key: K, obj: T): T[K] | undefined {\n return obj?.[key];\n}\n\nconst curriedProp = curry(prop) as Prop;\nexport default curriedProp;\n","import curry from '../composition/curry';\n\ntype PropStrict = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => NonNullable<T[K]>;\n <T, K extends keyof T>(...args: [key: K, obj: T]): NonNullable<T[K]>;\n};\n\n/**\n * propStrict - strict property access (throws on null/undefined)\n */\nfunction propStrict<T, K extends keyof T = keyof T>(key: K, obj: T): NonNullable<T[K]> {\n const value = obj?.[key];\n if (value == null) {\n throw new Error(`propStrict: \"${String(key)}\" is null or undefined`);\n }\n return value as NonNullable<T[K]>;\n}\n\nconst curriedPropStrict = curry(propStrict) as unknown as PropStrict;\nexport default curriedPropStrict;\n","import curry from '../composition/curry';\n\ntype PropOr = {\n <D>(...args: [defaultValue: D]): <K extends PropertyKey>(\n key: K\n ) => <T extends Record<K, unknown>>(obj: T) => T[K] | D;\n <D, K extends PropertyKey>(\n ...args: [defaultValue: D, key: K]\n ): <T extends Record<K, unknown>>(obj: T) => T[K] | D;\n <T, K extends keyof T, D>(...args: [defaultValue: D, key: K, obj: T]): T[K] | D;\n};\n\n/**\n * propOr - 기본값이 있는 프로퍼티 접근\n */\nfunction propOr<T, K extends keyof T, D>(defaultValue: D, key: K, obj: T): T[K] | D {\n const value = obj?.[key];\n return value == null ? defaultValue : value;\n}\n\nconst curriedPropOr = curry(propOr) as PropOr;\nexport default curriedPropOr;\n","import curry from '../composition/curry';\n\ntype Path = {\n (pathArray: string[]): <T>(obj: any) => T | undefined;\n <T>(...args: [pathArray: string[], obj: any]): T | undefined;\n};\n\n/**\n * path - 안전한 깊은 프로퍼티 접근\n */\nfunction path<T>(pathArray: string[], obj: any): T | undefined {\n return pathArray.reduce((current, key) => (current == null ? undefined : current[key]), obj) as T | undefined;\n}\n\nconst curriedPath = curry(path) as Path;\nexport default curriedPath;\n","import curry from '../composition/curry';\n\ntype PathOr = {\n <D>(...args: [defaultValue: D]): <T>(pathArray: string[]) => (obj: any) => T | D;\n <D>(...args: [defaultValue: D, pathArray: string[]]): <T>(obj: any) => T | D;\n <T, D>(...args: [defaultValue: D, pathArray: string[], obj: any]): T | D;\n};\n\n/**\n * pathOr - 기본값이 있는 깊은 프로퍼티 접근\n */\nfunction pathOr<T, D>(defaultValue: D, pathArray: string[], obj: any): T | D {\n const value = pathArray.reduce((current, key) => (current == null ? undefined : current[key]), obj) as T | undefined;\n return value == null ? defaultValue : value;\n}\n\nconst curriedPathOr = curry(pathOr) as PathOr;\nexport default curriedPathOr;\n","import curry from '../composition/curry';\n\ntype PickFn = {\n <K extends PropertyKey>(...args: [keys: K[]]): <T extends Record<K, unknown>>(obj: T) => Pick<T, K>;\n <T extends object, K extends keyof T = keyof T>(...args: [keys: K[], obj: T]): Pick<T, K>;\n};\n\n/**\n * pick - 일부 속성 선택\n */\nfunction pick<T extends object, K extends keyof T = keyof T>(keys: K[], obj: T): Pick<T, K> {\n const result = {} as Pick<T, K>;\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\nconst curriedPick = curry(pick) as PickFn;\nexport default curriedPick;\n","import curry from '../composition/curry';\n\ntype OmitFn = {\n <K extends PropertyKey>(...args: [keys: K[]]): <T extends Record<K, unknown>>(obj: T) => Omit<T, K>;\n <T extends object, K extends keyof T = keyof T>(...args: [keys: K[], obj: T]): Omit<T, K>;\n};\n\n/**\n * omit - 일부 속성 제거\n */\nfunction omit<T, K extends keyof T = keyof T>(keys: K[], obj: T): Omit<T, K> {\n const result = { ...(obj as object) } as T;\n for (const key of keys) {\n delete (result as Record<PropertyKey, unknown>)[key];\n }\n return result as Omit<T, K>;\n}\n\nconst curriedOmit = curry(omit) as OmitFn;\nexport default curriedOmit;\n","import curry from '../composition/curry';\n\ntype AssocKey = string | number | symbol;\n\ntype AssocValue<T, K extends AssocKey, V> = K extends keyof T\n ? (T[K] extends V ? T : Omit<T, K> & Record<K, V>)\n : T & Record<K, V>;\n\ntype AssocResult<T, K extends AssocKey, V> =\n T extends readonly (infer U)[]\n ? K extends number | `${number}`\n ? Array<V | U>\n : AssocValue<T, K, V>\n : AssocValue<T, K, V>;\n\ntype Assoc = {\n <K extends AssocKey>(...args: [key: K]): <V>(value: V) => <T>(obj: T) => AssocResult<T, K, V>;\n <K extends AssocKey, V>(...args: [key: K, value: V]): <T>(obj: T) => AssocResult<T, K, V>;\n <T, K extends AssocKey, V>(...args: [key: K, value: V, obj: T]): AssocResult<T, K, V>;\n};\n\n/**\n * assoc - 불변 객체 속성 설정\n */\nfunction assoc<T, K extends AssocKey, V>(key: K, value: V, obj: T): AssocResult<T, K, V> {\n if (Array.isArray(obj)) {\n const result = obj.slice();\n (result as any)[key] = value;\n return result as AssocResult<T, K, V>;\n }\n\n if (obj && typeof obj === 'object') {\n return {\n ...(obj as object),\n [key]: value,\n } as AssocResult<T, K, V>;\n }\n\n return { [key]: value } as AssocResult<T, K, V>;\n}\n\nconst curriedAssoc = curry(assoc) as Assoc;\nexport default curriedAssoc;\n","import curry from '../composition/curry';\n\ntype PathKey = string | number | symbol;\n\nconst isIndexKey = (key: PathKey): key is number | `${number}` => {\n if (typeof key === 'number') {\n return Number.isInteger(key);\n }\n if (typeof key === 'string') {\n return /^-?\\d+$/.test(key);\n }\n return false;\n};\n\nconst normalizeIndex = (key: number | `${number}`, length: number) => {\n const raw = typeof key === 'number' ? key : Number(key);\n if (Number.isNaN(raw)) {\n return -1;\n }\n if (raw < 0) {\n return Math.max(length + raw, 0);\n }\n return raw;\n};\n\nconst isObjectLike = (value: unknown): value is Record<PropertyKey, unknown> =>\n value !== null && typeof value === 'object';\n\ntype AssocPath = {\n <T = unknown>(\n ...args: [pathArray: PathKey[]]\n ): (value: unknown) => (obj: unknown) => T;\n <T = unknown>(...args: [pathArray: PathKey[], value: unknown]): (obj: unknown) => T;\n <T = unknown>(...args: [pathArray: PathKey[], value: unknown, obj: unknown]): T;\n};\n\n/**\n * assocPath - 경로 기반 값 설정 (불변)\n */\nfunction assocPath<T = unknown>(pathArray: PathKey[], value: unknown, obj: unknown): T {\n if (pathArray.length === 0) {\n return value as T;\n }\n\n const [key, ...rest] = pathArray;\n const useArray = isIndexKey(key);\n const base = Array.isArray(obj) ? obj.slice() : isObjectLike(obj) ? { ...(obj as object) } : useArray ? [] : {};\n\n if (Array.isArray(base) && isIndexKey(key)) {\n const index = normalizeIndex(key, base.length);\n const current = (base as unknown[])[index];\n const nextValue = rest.length === 0 ? value : assocPath(rest, value, current);\n (base as unknown[])[index] = nextValue;\n return base as T;\n }\n\n const current = isObjectLike(base) ? (base as Record<PropertyKey, unknown>)[key] : undefined;\n const nextValue = rest.length === 0 ? value : assocPath(rest, value, current);\n (base as Record<PropertyKey, unknown>)[key] = nextValue;\n return base as T;\n}\n\nconst curriedAssocPath = curry(assocPath) as AssocPath;\nexport default curriedAssocPath;\n","/**\n * dissoc - 불변 객체 속성 제거\n */\nfunction dissoc<T>(key: number, obj: readonly T[]): T[];\nfunction dissoc<T, K extends keyof T>(key: K, obj: T): Omit<T, K>;\nfunction dissoc<T, K extends keyof T>(key: K, obj: T): Omit<T, K> {\n if (Array.isArray(obj)) {\n const result = obj.slice();\n const index = typeof key === 'number' ? key : Number.isNaN(Number(key)) ? -1 : Number(key);\n if (index >= 0 && index < result.length) {\n result.splice(index, 1);\n } else {\n delete (result as unknown as Record<PropertyKey, unknown>)[key as unknown as PropertyKey];\n }\n return result as unknown as Omit<T, K>;\n }\n\n if (obj && typeof obj === 'object') {\n const { [key]: _removed, ...rest } = obj as Record<PropertyKey, unknown>;\n return rest as Omit<T, K>;\n }\n\n return obj as Omit<T, K>;\n}\n\nexport default dissoc;\n","import curry from '../composition/curry';\n\ntype PathKey = string | number | symbol;\n\nconst isIndexKey = (key: PathKey): key is number | `${number}` => {\n if (typeof key === 'number') {\n return Number.isInteger(key);\n }\n if (typeof key === 'string') {\n return /^-?\\d+$/.test(key);\n }\n return false;\n};\n\nconst normalizeIndex = (key: number | `${number}`, length: number) => {\n const raw = typeof key === 'number' ? key : Number(key);\n if (Number.isNaN(raw)) {\n return -1;\n }\n if (raw < 0) {\n return length + raw;\n }\n return raw;\n};\n\nconst isObjectLike = (value: unknown): value is Record<PropertyKey, unknown> =>\n value !== null && typeof value === 'object';\n\ntype DissocPath = {\n <T = unknown>(...args: [pathArray: PathKey[]]): (obj: T) => T;\n <T = unknown>(...args: [pathArray: PathKey[], obj: T]): T;\n};\n\n/**\n * dissocPath - 경로 기반 값 제거 (불변)\n */\nfunction dissocPath<T = unknown>(pathArray: PathKey[], obj: T): T {\n if (pathArray.length === 0) {\n return obj;\n }\n\n if (!isObjectLike(obj)) {\n return obj;\n }\n\n const [key, ...rest] = pathArray;\n\n if (Array.isArray(obj) && isIndexKey(key)) {\n const index = normalizeIndex(key, obj.length);\n if (index < 0 || index >= obj.length) {\n return obj;\n }\n\n const result = obj.slice();\n if (rest.length === 0) {\n result.splice(index, 1);\n return result as unknown as T;\n }\n\n const nextValue = dissocPath(rest, result[index]);\n result[index] = nextValue;\n return result as unknown as T;\n }\n\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n return obj;\n }\n\n if (rest.length === 0) {\n const { [key]: _removed, ...restObj } = obj as Record<PropertyKey, unknown>;\n return restObj as T;\n }\n\n const result = { ...(obj as object) } as Record<PropertyKey, unknown>;\n result[key] = dissocPath(rest, result[key]);\n return result as T;\n}\n\nconst curriedDissocPath = curry(dissocPath) as DissocPath;\nexport default curriedDissocPath;\n","import curry from '../composition/curry';\n\ntype Merge = {\n <T>(...args: [obj1: T]): <U>(obj2: U) => T & U;\n <T, U>(...args: [obj1: T, obj2: U]): T & U;\n};\n\n/**\n * merge - 객체 병합 (얕은 병합)\n */\nfunction merge<T, U>(obj1: T, obj2: U): T & U {\n return {\n ...(obj1 as object),\n ...(obj2 as object),\n } as T & U;\n}\n\nconst curriedMerge = curry(merge) as Merge;\nexport default curriedMerge;\n","import curry from '../composition/curry';\n\ntype MergeDeep = {\n <T>(...args: [obj1: T]): <U>(obj2: U) => T & U;\n <T, U>(...args: [obj1: T, obj2: U]): T & U;\n};\n\n/**\n * mergeDeep - 깊은 객체 병합\n */\nfunction mergeDeep<T, U>(obj1: T, obj2: U): T & U {\n const isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n const mergeObjects = (left: Record<string, unknown>, right: Record<string, unknown>) => {\n const result: Record<string, unknown> = { ...left };\n\n for (const [key, value] of Object.entries(right)) {\n const existing = result[key];\n if (isPlainObject(existing) && isPlainObject(value)) {\n result[key] = mergeObjects(existing, value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n };\n\n if (isPlainObject(obj1) && isPlainObject(obj2)) {\n return mergeObjects(obj1, obj2) as T & U;\n }\n\n return {\n ...(obj1 as object),\n ...(obj2 as object),\n } as T & U;\n}\n\nconst curriedMergeDeep = curry(mergeDeep) as MergeDeep;\nexport default curriedMergeDeep;\n","/**\n * mergeAll - 객체 배열 병합 (얕은 병합)\n */\nfunction mergeAll<T extends object>(objects: T[]): T {\n const merged = objects.reduce<Record<string, unknown>>(\n (acc, obj) => ({ ...acc, ...(obj as Record<string, unknown>) }),\n {}\n );\n return merged as T;\n}\n\nexport default mergeAll;\n","/**\n * keys - 객체 키 배열\n */\nfunction keys<T extends object>(obj: T): Array<keyof T> {\n return Object.keys(obj) as Array<keyof T>;\n}\n\nexport default keys;\n","/**\n * values - 객체 값 배열\n */\nfunction values<T extends object>(obj: T): Array<T[keyof T]> {\n return Object.values(obj) as Array<T[keyof T]>;\n}\n\nexport default values;\n","/**\n * entries - 객체 엔트리 배열\n */\nfunction entries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]> {\n return Object.entries(obj) as Array<[keyof T, T[keyof T]]>;\n}\n\nexport default entries;\n","/**\n * mapValues - 값만 변환\n */\nfunction mapValues<T extends object, R>(\n fn: (value: T[keyof T]) => R\n): (obj: T) => Record<keyof T, R> {\n return (obj: T) => {\n const result: Record<keyof T, R> = {} as Record<keyof T, R>;\n for (const [key, value] of Object.entries(obj) as Array<[keyof T, T[keyof T]]>) {\n result[key] = fn(value);\n }\n return result;\n };\n}\n\nexport default mapValues;\n","import curry from '../composition/curry';\n\ntype Evolve = {\n (\n transformations: Partial<Record<PropertyKey, (value: any) => any>>\n ): <T extends object>(obj: T) => T;\n <T extends object>(\n transformations: Partial<{ [K in keyof T]: (value: T[K]) => any }>,\n obj: T\n ): T;\n};\n\n/**\n * evolve - 구조 기반 변환\n */\nfunction evolve<T extends object>(\n transformations: Partial<{ [K in keyof T]: (value: T[K]) => any }>,\n obj: T\n): T {\n const result = { ...(obj as object) } as T;\n for (const key of Object.keys(transformations) as Array<keyof T>) {\n const transformer = transformations[key];\n if (typeof transformer === 'function') {\n result[key] = transformer(obj[key]);\n }\n }\n return result;\n}\n\nconst curriedEvolve = curry(evolve) as Evolve;\nexport default curriedEvolve;\n","import curry from '../composition/curry';\n\ntype Has = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => boolean;\n <T extends object>(...args: [key: keyof T, obj: T]): boolean;\n};\n\n/**\n * has - 속성 존재 확인\n */\nfunction has<T extends object>(key: keyof T, obj: T): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nconst curriedHas = curry(has) as Has;\nexport default curriedHas;\n","/**\n * hasPath - 깊은 경로 존재 확인\n */\nfunction hasPath(pathArray: string[]): (obj: any) => boolean {\n return (obj: any) => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null || !Object.prototype.hasOwnProperty.call(current, key)) {\n return false;\n }\n current = current[key];\n }\n return true;\n };\n}\n\nexport default hasPath;\n","import curry from '../composition/curry';\n\n/** equals - 깊은 비교 */\nfunction equals(a: any, b: any): boolean {\n return deepEqual(a, b, new WeakMap());\n}\n\nfunction deepEqual(a: any, b: any, seen: WeakMap<object, object>): boolean {\n if (a === b) return true;\n\n // Handle NaN\n if (typeof a === 'number' && typeof b === 'number') {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n // Prevent circular reference issues\n if (seen.has(a)) return seen.get(a) === b;\n seen.set(a, b);\n\n // Date\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n // Map\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n const bEntries = Array.from(b.entries());\n for (const [aKey, aVal] of a.entries()) {\n let found = false;\n for (let i = 0; i < bEntries.length; i++) {\n const [bKey, bVal] = bEntries[i];\n if (deepEqual(aKey, bKey, seen) && deepEqual(aVal, bVal, seen)) {\n bEntries.splice(i, 1);\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n // Set\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n const bValues = Array.from(b.values());\n for (const aVal of a.values()) {\n let found = false;\n for (let i = 0; i < bValues.length; i++) {\n if (deepEqual(aVal, bValues[i], seen)) {\n bValues.splice(i, 1);\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n // Array\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], seen)) return false;\n }\n return true;\n }\n\n // Object (including symbol keys)\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n\nexport default curry(equals);\n","/** isNil - null or undefined 체크 */\nfunction isNil(value: any): boolean {\n return value === null || value === undefined;\n}\nexport default isNil;\n","/** isEmpty - 비어있는지 검사 */\nfunction isEmpty(value: any): boolean {\n if (value == null) return true;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n}\nexport default isEmpty;\n","/** isType - 타입 체크 유틸 */\nfunction isType(type: string): (value: any) => boolean {\n const target = type.toLowerCase();\n return (value: any) => {\n if (value === null) return target === 'null';\n if (value === undefined) return target === 'undefined';\n const actual = typeof value;\n if (actual !== 'object') return actual === target;\n const tag = Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); // e.g., 'array', 'date'\n return tag === target;\n };\n}\nexport default isType;\n","/** gt - 초과 비교 */\nfunction gt(a: number): (b: number) => boolean {\n return (b: number) => b > a;\n}\nexport default gt;\n","/** gte - 이상 비교 */\nfunction gte(a: number): (b: number) => boolean {\n return (b: number) => b >= a;\n}\nexport default gte;\n","/** lt - 미만 비교 */\nfunction lt(a: number): (b: number) => boolean {\n return (b: number) => b < a;\n}\nexport default lt;\n","/** lte - 이하 비교 */\nfunction lte(a: number): (b: number) => boolean {\n return (b: number) => b <= a;\n}\nexport default lte;\n","import curry from '../composition/curry';\n\n/** clamp - 범위 제한 */\nfunction clamp(min: number, max: number, value: number): number {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n}\nexport default curry(clamp);\n","/** includes - 동등성 기반 포함 여부 (문자열 또는 배열) */\nimport equals from './equals';\n\nfunction includes(search: string, target: string): boolean;\nfunction includes<T>(search: T, target: T[]): boolean;\nfunction includes(search: any, target: any): boolean {\n if (typeof target === 'string' && typeof search === 'string') {\n return target.includes(search);\n }\n\n if (Array.isArray(target)) {\n for (let i = 0; i < target.length; i++) {\n if (equals(target[i], search)) return true;\n }\n return false;\n }\n\n return false;\n}\n\nexport default includes;\n","import curry from '../composition/curry';\n\n/** add - 덧셈 */\nfunction add(a: number, b: number): number {\n return a + b;\n}\nexport default curry(add);\n","import curry from '../composition/curry';\n\n/** sub - 뺄셈 */\nfunction sub(a: number, b: number): number {\n return a - b;\n}\nexport default curry(sub);\n","import curry from '../composition/curry';\n\n/** mul - 곱셈 */\nfunction mul(a: number, b: number): number {\n return a * b;\n}\nexport default curry(mul);\n","import curry from '../composition/curry';\n\n/** div - 나눗셈 */\nfunction div(a: number, b: number): number {\n return a / b;\n}\nexport default curry(div);\n","/** sum - 합계 */\nfunction sum(arr: number[]): number {\n return arr.reduce((total, value) => total + value, 0);\n}\nexport default sum;\n","/** mean - 평균 */\nfunction mean(arr: number[]): number {\n if (arr.length === 0) return NaN;\n const total = arr.reduce((acc, value) => acc + value, 0);\n return total / arr.length;\n}\nexport default mean;\n","/** min - 최소값 */\nfunction min(arr: number[]): number {\n if (arr.length === 0) return Infinity;\n return Math.min(...arr);\n}\nexport default min;\n","/** max - 최대값 */\nfunction max(arr: number[]): number {\n if (arr.length === 0) return -Infinity;\n return Math.max(...arr);\n}\nexport default max;\n","/** round - 반올림 */\nfunction round(value: number): number {\n return Math.round(value);\n}\nexport default round;\n","/** floor - 내림 */\nfunction floor(value: number): number {\n return Math.floor(value);\n}\nexport default floor;\n","/** ceil - 올림 */\nfunction ceil(value: number): number {\n return Math.ceil(value);\n}\nexport default ceil;\n","import curry from '../composition/curry';\n\n/** randomInt - 범위 랜덤 정수 */\nfunction randomInt(min: number, max: number): number {\n const lower = Math.ceil(min);\n const upper = Math.floor(max);\n\n if (upper < lower) {\n return lower;\n }\n\n return Math.floor(Math.random() * (upper - lower + 1)) + lower;\n}\nexport default curry(randomInt);\n","/** trim - 공백 제거 */\nfunction trim(str: string): string {\n return str.trim();\n}\nexport default trim;\n","import curry from '../composition/curry';\n\n/** split - 문자열 분할 */\nfunction split(separator: string, str: string): string[] {\n return str.split(separator);\n}\nexport default curry(split);\n","import curry from '../composition/curry';\n\n/** join - 배열 결합 */\nfunction join(separator: string, arr: string[]): string {\n return arr.join(separator);\n}\nexport default curry(join);\n","import curry from '../composition/curry';\n\n/** replace - 부분 치환 */\nfunction replace(pattern: string | RegExp, replacement: string, str: string): string {\n return str.replace(pattern, replacement);\n}\nexport default curry(replace);\n","/** toUpper - 대문자 변환 */\nfunction toUpper(str: string): string {\n return str.toUpperCase();\n}\nexport default toUpper;\n","/** toLower - 소문자 변환 */\nfunction toLower(str: string): string {\n return str.toLowerCase();\n}\nexport default toLower;\n","/** startsWith - 시작 문자열/배열 확인 */\nfunction startsWith(prefix: string, str: string): boolean;\nfunction startsWith<T>(prefix: T[], arr: T[]): boolean;\nfunction startsWith(prefix: string | any[], target: string | any[]): boolean {\n if (typeof target === 'string' && typeof prefix === 'string') {\n return target.startsWith(prefix);\n }\n\n if (Array.isArray(prefix) && Array.isArray(target)) {\n if (prefix.length === 0) return true;\n if (prefix.length > target.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (target[i] !== prefix[i]) return false;\n }\n return true;\n }\n\n return false;\n}\nexport default startsWith;\n","/** endsWith - 끝 문자열/배열 확인 */\nfunction endsWith(suffix: string, str: string): boolean;\nfunction endsWith<T>(suffix: T[], arr: T[]): boolean;\nfunction endsWith(suffix: string | any[], target: string | any[]): boolean {\n if (typeof target === 'string' && typeof suffix === 'string') {\n return target.endsWith(suffix);\n }\n\n if (Array.isArray(suffix) && Array.isArray(target)) {\n if (suffix.length === 0) return true;\n if (suffix.length > target.length) return false;\n for (let i = 0; i < suffix.length; i++) {\n const targetIdx = target.length - suffix.length + i;\n if (target[targetIdx] !== suffix[i]) return false;\n }\n return true;\n }\n\n return false;\n}\nexport default endsWith;\n","import curry from '../composition/curry';\n\n/** match - 정규식 매칭 */\nfunction match(pattern: RegExp, str: string): RegExpMatchArray | null {\n return str.match(pattern);\n}\nexport default curry(match);\n","import type { FromFn } from '../composition/from';\n\n/** pipeAsync - 비동기 함수 합성 */\ntype AsyncOrSync<A, R> = (a: A) => R | Promise<R>;\ntype PipeInput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<infer A, any>, ...AsyncOrSync<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? Awaited<R>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<Awaited<R>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype PipeAsync<Fns extends AsyncOrSync<any, any>[]> = (input: PipeInput<Fns>) => Promise<PipeOutput<Fns>>;\ntype PipeAsyncFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (\n input?: PipeInput<Fns>\n) => Promise<PipeOutput<Fns>>;\n\nfunction pipeAsync<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsyncFrom<Fns>;\nfunction pipeAsync<A, R>(ab: AsyncOrSync<A, R>): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, R>(ab: AsyncOrSync<A, B>, bc: AsyncOrSync<Awaited<B>, R>): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): (a: A) => Promise<Awaited<R>>;\n\nfunction pipeAsync<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsync<Fns>;\nfunction pipeAsync(...funcs: Array<AsyncOrSync<any, any>>): (value: any) => Promise<any>;\nfunction pipeAsync(...funcs: Array<(arg: any) => any>) {\n return async (value: any) => {\n let acc = value;\n for (const fn of funcs) {\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsync;\n","import type { FromFn } from '../composition/from';\nimport SideEffect, { isSideEffect } from '../composition/sideEffect';\n\n/** pipeAsyncSideEffect - SideEffect를 허용하는 비동기 함수 합성 */\ntype MaybeSideEffect<T> = T | SideEffect<any>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype AsyncOrSync<A, R> = (a: A) => MaybeSideEffect<R> | Promise<MaybeSideEffect<R>>;\ntype PipeInput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [\n AsyncOrSync<infer A, any>,\n ...AsyncOrSync<any, any>[]\n]\n ? A\n : never;\ntype PipeOutput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? MaybeSideEffect<Awaited<R>>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<Awaited<NonSideEffect<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Resolve<T> = T extends infer R ? R : never;\ntype PipeAsyncSideEffect<Fns extends AsyncOrSync<any, any>[]> = (\n input: PipeInput<Fns> | SideEffect<any>\n) => Promise<Resolve<PipeOutput<Fns>>>;\ntype PipeAsyncSideEffectFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (\n input?: PipeInput<Fns> | SideEffect<any>\n) => Promise<Resolve<PipeOutput<Fns>>>;\n\nfunction pipeAsyncSideEffect<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffectFrom<Fns>;\nfunction pipeAsyncSideEffect<A, R>(\n ab: AsyncOrSync<A, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\n\nfunction pipeAsyncSideEffect<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffect<Fns>;\nfunction pipeAsyncSideEffect(...funcs: Array<AsyncOrSync<any, any>>): (value: any) => Promise<any>;\nfunction pipeAsyncSideEffect(...funcs: Array<(arg: any) => any>) {\n return async (value: any) => {\n let acc = value;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsyncSideEffect;\n","import type { FromFn } from '../composition/from';\nimport SideEffect, { isSideEffect } from '../composition/sideEffect';\n\ntype AnyFn = (...args: any[]) => any;\ntype MaybeSideEffect<T, E> = T | SideEffect<E>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype AsyncOrSync<A, R> = (a: A) => R | Promise<R>;\ntype ZeroFn<R> = () => R | Promise<R>;\n\ntype EffectOfReturn<R> = R extends SideEffect<infer E> ? E : never;\ntype EffectOfFn<F> = F extends (...args: any[]) => infer R ? EffectOfReturn<Awaited<R>> : never;\ntype EffectsOf<Fns extends AnyFn[]> = EffectOfFn<Fns[number]>;\n\ntype PipeValueOutputUnary<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? NonSideEffect<Awaited<R>>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<NonSideEffect<Awaited<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : never;\n\ntype PipeValueOutputStrict<Fns extends [AnyFn, ...AnyFn[]]> =\n Fns extends [ZeroFn<infer R>]\n ? NonSideEffect<Awaited<R>>\n : Fns extends [ZeroFn<infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<NonSideEffect<Awaited<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Fns>\n : never;\n\ntype PipeInputStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? never\n : Fns extends [AsyncOrSync<infer A, any>, ...AnyFn[]]\n ? A\n : never;\n\ntype Resolve<T> = T extends infer R ? R : never;\n\ntype PipeAsyncSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input: PipeInputStrict<Fns>): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>;\n <EIn>(\n input: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;\n};\ntype PipeAsyncSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input?: PipeInputStrict<Fns>): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>;\n <EIn>(\n input?: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;\n};\n\ntype PipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? () => Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>\n : PipeAsyncSideEffectStrictUnary<Fns>;\n\nfunction pipeAsyncSideEffectStrict<R>(ab: ZeroFn<R>): PipeAsyncSideEffectStrict<[ZeroFn<R>]>;\nfunction pipeAsyncSideEffectStrict<B, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, R>\n): PipeAsyncSideEffectStrict<[ZeroFn<B>, AsyncOrSync<NonSideEffect<Awaited<B>>, R>]>;\nfunction pipeAsyncSideEffectStrict<B, C, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n): PipeAsyncSideEffectStrict<[ZeroFn<B>, AsyncOrSync<NonSideEffect<Awaited<B>>, C>, AsyncOrSync<NonSideEffect<Awaited<C>>, R>]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffectStrictUnaryOptional<Fns>;\nfunction pipeAsyncSideEffectStrict<A, R>(\n ab: AsyncOrSync<A, R>\n): PipeAsyncSideEffectStrict<[AsyncOrSync<A, R>]>;\nfunction pipeAsyncSideEffectStrict<A, B, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, R>\n): PipeAsyncSideEffectStrict<[AsyncOrSync<A, B>, AsyncOrSync<NonSideEffect<Awaited<B>>, R>]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n]>;\n\nfunction pipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeAsyncSideEffectStrict<Fns>;\nfunction pipeAsyncSideEffectStrict(...funcs: Array<AsyncOrSync<any, any>>) {\n return async (value?: any) => {\n let acc = value;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsyncSideEffectStrict;\n","/** delay - 일정 시간 대기 */\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\nexport default delay;\n","import curry from '../composition/curry';\n\ntype Timeout = {\n (ms: number): <T>(promise: Promise<T>) => Promise<T>;\n <T>(...args: [ms: number, promise: Promise<T>]): Promise<T>;\n};\n\n/** timeout - 제한 시간 내 실행 */\nfunction timeout<T>(ms: number, promise: Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error(`Timed out after ${ms}ms`)), ms);\n promise\n .then((val) => {\n clearTimeout(timer);\n resolve(val);\n })\n .catch((err) => {\n clearTimeout(timer);\n reject(err);\n });\n });\n}\nconst curriedTimeout = curry(timeout) as Timeout;\nexport default curriedTimeout;\n","/** retry - 실패 시 재시도 (옵션 대기 시간 포함) */\nimport delay from './delay';\nimport curry from '../composition/curry';\n\ntype Retry = {\n (times: number): <T>(fn: () => Promise<T>, delayMs?: number) => Promise<T>;\n <T>(...args: [times: number, fn: () => Promise<T>, delayMs?: number]): Promise<T>;\n};\n\nfunction retry<T>(times: number, fn: () => Promise<T>, delayMs = 0): Promise<T> {\n return (async () => {\n let attempt = 0;\n while (true) {\n try {\n return await fn();\n } catch (err) {\n attempt += 1;\n if (attempt > times) throw err;\n if (delayMs > 0) {\n await delay(delayMs);\n }\n }\n }\n })();\n}\nconst curriedRetry = curry(retry) as Retry;\nexport default curriedRetry;\n","import curry from '../composition/curry';\n\ntype Debounce = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounce - 호출 제어 (디바운스) */\nfunction debounce<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (timer) {\n clearTimeout(timer);\n }\n const context = this;\n timer = setTimeout(() => {\n timer = undefined;\n fn.apply(context, args);\n }, ms);\n };\n\n return debounced as T;\n}\nconst curriedDebounce = curry(debounce) as Debounce;\nexport default curriedDebounce;\n","import curry from '../composition/curry';\n\ntype DebounceLeading = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounceLeading - 첫 호출만 실행하는 디바운스 */\nfunction debounceLeading<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (!timer) {\n fn.apply(this, args);\n timer = setTimeout(() => {\n timer = undefined;\n }, ms);\n }\n };\n\n return debounced as T;\n}\n\nconst curriedDebounceLeading = curry(debounceLeading) as DebounceLeading;\nexport default curriedDebounceLeading;\n","import curry from '../composition/curry';\n\ntype DebounceLeadingTrailing = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounceLeadingTrailing - 처음과 마지막에만 실행하는 디바운스 */\nfunction debounceLeadingTrailing<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pending = false;\n let lastArgs: Parameters<T> | undefined;\n let lastThis: unknown;\n\n const flush = () => {\n timer = undefined;\n if (pending && lastArgs) {\n pending = false;\n fn.apply(lastThis, lastArgs);\n }\n };\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (!timer) {\n fn.apply(this, args);\n timer = setTimeout(flush, ms);\n return;\n }\n\n pending = true;\n lastArgs = args;\n lastThis = this;\n clearTimeout(timer);\n timer = setTimeout(flush, ms);\n };\n\n return debounced as T;\n}\n\nconst curriedDebounceLeadingTrailing = curry(debounceLeadingTrailing) as DebounceLeadingTrailing;\nexport default curriedDebounceLeadingTrailing;\n","import curry from '../composition/curry';\n\ntype Throttle = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** throttle - 호출 제어 (쓰로틀) */\nfunction throttle<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let lastCall = 0;\n let trailingArgs: any[] | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const invoke = (ctx: any, args: any[]) => {\n lastCall = Date.now();\n fn.apply(ctx, args);\n };\n\n const throttled = function (this: any, ...args: any[]) {\n const now = Date.now();\n const remaining = ms - (now - lastCall);\n\n if (remaining <= 0) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n trailingArgs = null;\n invoke(this, args);\n } else {\n trailingArgs = args;\n if (!timeoutId) {\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (trailingArgs) {\n invoke(this, trailingArgs);\n trailingArgs = null;\n }\n }, remaining);\n }\n }\n } as T;\n\n return throttled;\n}\nconst curriedThrottle = curry(throttle) as Throttle;\nexport default curriedThrottle;\n","/** maybe - null-safe 연산 */\nfunction maybe<T, R>(fn: (value: T) => R): (value: T | null | undefined) => R | null {\n return (value: T | null | undefined) => {\n if (value === null || value === undefined) {\n return null;\n }\n return fn(value);\n };\n}\nexport default maybe;\n","/** mapMaybe - 값이 있는 항목만 변환 */\nfunction mapMaybe<T, R>(\n fn: (value: T) => R | null | undefined\n): (values: T[]) => R[] {\n return (values: T[]) => {\n const results: R[] = [];\n\n for (const value of values) {\n const mapped = fn(value);\n if (mapped !== null && mapped !== undefined) {\n results.push(mapped);\n }\n }\n\n return results;\n };\n}\nexport default mapMaybe;\n","/** getOrElse - 기본값 제공 */\nfunction getOrElse<T>(defaultValue: T): (value: T | null | undefined) => T {\n return (value: T | null | undefined) => {\n if (value === null || value === undefined) {\n return defaultValue;\n }\n return value;\n };\n}\nexport default getOrElse;\n","/** result - 성공 / 실패 래핑 */\nfunction result<T, E = Error>(fn: () => T): { ok: true; value: T } | { ok: false; error: E } {\n // TODO: implement\n try {\n return { ok: true, value: fn() };\n } catch (error) {\n return { ok: false, error: error as E };\n }\n}\nexport default result;\n","import curry from '../composition/curry';\n\ntype Fold = {\n <R>(...args: [onNone: () => R]): <T>(\n onSome: (value: T) => R\n ) => (value: T | null | undefined) => R;\n <T, R>(\n ...args: [onNone: () => R, onSome: (value: T) => R]\n ): (value: T | null | undefined) => R;\n <T, R>(\n ...args: [onNone: () => R, onSome: (value: T) => R, value: T | null | undefined]\n ): R;\n};\n\n/** fold - Maybe/Result 처리 */\nfunction fold<T, R>(\n onNone: () => R,\n onSome: (value: T) => R,\n value: T | null | undefined\n): R {\n if (value === null || value === undefined) {\n return onNone();\n }\n return onSome(value);\n}\nconst curriedFold = curry(fold) as Fold;\nexport default curriedFold;\n","import curry from '../composition/curry';\n\n/** assert - 조건 검증 */\nfunction assert(condition: boolean, message: string | undefined): void {\n if (!condition) {\n throw new Error(message ?? 'Assertion failed');\n }\n}\nexport default curry(assert);\n","import curry from '../composition/curry';\n\n/** invariant - 계약 위반 체크 */\nfunction invariant(condition: boolean, message: string | undefined): void {\n if (!condition) {\n throw new Error(message ?? 'Invariant failed');\n }\n}\nexport default curry(invariant);\n","/** log - tap 기반 로깅 */\nfunction log<T>(label?: string): (value: T) => T {\n return (value: T) => {\n if (label) {\n console.log(label, value);\n } else {\n console.log(value);\n }\n return value;\n };\n}\nexport default log;\n"],"names":["pipe","funcs","init","acc","fn","SideEffect","effect","label","matchSideEffect","result","handlers","runPipeResult","isSideEffect","value","pipeSideEffect","pipeSideEffectStrict","compose","curry","args","curried","accumulated","nextArgs","partial","preset","rest","all","flip","reversed","complement","predicate","identity","x","constant","from","_input","tap","once","called","memoize","cache","RESULT","node","arg","ifElse","onTrue","onFalse","curriedIfElse","when","curriedWhen","unless","curriedUnless","cond","conditions","handler","tryCatch","tryFn","catchFn","err","error","curriedTryCatch","guard","defaultValue","curriedGuard","map","arr","curriedMap","filter","curriedFilter","reduce","initial","curriedReduce","flatMap","curriedFlatMap","find","curriedFind","some","i","curriedSome","every","curriedEvery","take","curriedTake","drop","count","curriedDrop","dropWhile","dropping","item","curriedDropWhile","chunk","size","chunkSize","curriedChunk","zip","arr2","arr1","length","curriedZip","zipWith","other","curriedZipWith","unzip","left","right","a","b","uniq","seen","uniqBy","key","curriedUniqBy","sortBy","aKey","bKey","curriedSortBy","sort","compare","curriedSort","groupBy","curriedGroupBy","zipIndex","index","takeWhile","curriedTakeWhile","scan","curriedScan","concat","curriedConcat","append","curriedAppend","prepend","curriedPrepend","flatten","head","tail","last","range","start","end","step","partition","truthy","falsy","curriedPartition","flattenDeep","walk","items","prop","obj","curriedProp","propStrict","curriedPropStrict","propOr","curriedPropOr","path","pathArray","current","curriedPath","pathOr","curriedPathOr","pick","keys","curriedPick","omit","curriedOmit","assoc","curriedAssoc","isIndexKey","normalizeIndex","raw","isObjectLike","assocPath","useArray","base","nextValue","curriedAssocPath","dissoc","_removed","dissocPath","restObj","curriedDissocPath","merge","obj1","obj2","curriedMerge","mergeDeep","isPlainObject","mergeObjects","existing","curriedMergeDeep","mergeAll","objects","values","entries","mapValues","evolve","transformations","transformer","curriedEvolve","has","curriedHas","hasPath","equals","deepEqual","bEntries","aVal","found","bVal","bValues","aKeys","bKeys","equals$1","isNil","isEmpty","isType","type","target","actual","gt","gte","lt","lte","clamp","min","max","clamp_default","includes","search","add","add_default","sub","sub_default","mul","mul_default","div","div_default","sum","total","mean","round","floor","ceil","randomInt","lower","upper","randomInt_default","trim","str","split","separator","split_default","join","join_default","replace","pattern","replacement","replace_default","toUpper","toLower","startsWith","prefix","endsWith","suffix","targetIdx","match","match_default","pipeAsync","pipeAsyncSideEffect","pipeAsyncSideEffectStrict","delay","ms","resolve","timeout","promise","reject","timer","val","curriedTimeout","retry","times","delayMs","attempt","curriedRetry","debounce","context","curriedDebounce","debounceLeading","curriedDebounceLeading","debounceLeadingTrailing","pending","lastArgs","lastThis","flush","curriedDebounceLeadingTrailing","throttle","lastCall","trailingArgs","timeoutId","invoke","ctx","now","remaining","curriedThrottle","maybe","mapMaybe","results","mapped","getOrElse","fold","onNone","onSome","curriedFold","assert","condition","message","assert_default","invariant","invariant_default","log"],"mappings":"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"}
1
+ {"version":3,"file":"fp-pack.umd.js","sources":["../src/implement/composition/pipe.ts","../src/implement/composition/sideEffect.ts","../src/implement/composition/pipeSideEffect.ts","../src/implement/composition/pipeSideEffectStrict.ts","../src/implement/composition/compose.ts","../src/implement/composition/curry.ts","../src/implement/composition/partial.ts","../src/implement/composition/flip.ts","../src/implement/composition/complement.ts","../src/implement/composition/identity.ts","../src/implement/composition/constant.ts","../src/implement/composition/from.ts","../src/implement/composition/tap.ts","../src/implement/composition/tap0.ts","../src/implement/composition/once.ts","../src/implement/composition/memoize.ts","../src/implement/control/ifElse.ts","../src/implement/control/when.ts","../src/implement/control/unless.ts","../src/implement/control/cond.ts","../src/implement/control/tryCatch.ts","../src/implement/control/guard.ts","../src/implement/array/map.ts","../src/implement/array/filter.ts","../src/implement/array/reduce.ts","../src/implement/array/flatMap.ts","../src/implement/array/find.ts","../src/implement/array/some.ts","../src/implement/array/every.ts","../src/implement/array/take.ts","../src/implement/array/drop.ts","../src/implement/array/dropWhile.ts","../src/implement/array/chunk.ts","../src/implement/array/zip.ts","../src/implement/array/zipWith.ts","../src/implement/array/unzip.ts","../src/implement/array/uniq.ts","../src/implement/array/uniqBy.ts","../src/implement/array/sortBy.ts","../src/implement/array/sort.ts","../src/implement/array/groupBy.ts","../src/implement/array/zipIndex.ts","../src/implement/array/takeWhile.ts","../src/implement/array/scan.ts","../src/implement/array/concat.ts","../src/implement/array/append.ts","../src/implement/array/prepend.ts","../src/implement/array/flatten.ts","../src/implement/array/head.ts","../src/implement/array/tail.ts","../src/implement/array/last.ts","../src/implement/array/init.ts","../src/implement/array/range.ts","../src/implement/array/partition.ts","../src/implement/array/flattenDeep.ts","../src/implement/object/prop.ts","../src/implement/object/propStrict.ts","../src/implement/object/propOr.ts","../src/implement/object/path.ts","../src/implement/object/pathOr.ts","../src/implement/object/pick.ts","../src/implement/object/omit.ts","../src/implement/object/assoc.ts","../src/implement/object/assocPath.ts","../src/implement/object/dissoc.ts","../src/implement/object/dissocPath.ts","../src/implement/object/merge.ts","../src/implement/object/mergeDeep.ts","../src/implement/object/mergeAll.ts","../src/implement/object/keys.ts","../src/implement/object/values.ts","../src/implement/object/entries.ts","../src/implement/object/mapValues.ts","../src/implement/object/evolve.ts","../src/implement/object/has.ts","../src/implement/object/hasPath.ts","../src/implement/equality/equals.ts","../src/implement/equality/isNil.ts","../src/implement/equality/isEmpty.ts","../src/implement/equality/isType.ts","../src/implement/equality/gt.ts","../src/implement/equality/gte.ts","../src/implement/equality/lt.ts","../src/implement/equality/lte.ts","../src/implement/equality/clamp.ts","../src/implement/equality/includes.ts","../src/implement/math/add.ts","../src/implement/math/sub.ts","../src/implement/math/mul.ts","../src/implement/math/div.ts","../src/implement/math/sum.ts","../src/implement/math/mean.ts","../src/implement/math/min.ts","../src/implement/math/max.ts","../src/implement/math/round.ts","../src/implement/math/floor.ts","../src/implement/math/ceil.ts","../src/implement/math/randomInt.ts","../src/implement/string/trim.ts","../src/implement/string/split.ts","../src/implement/string/join.ts","../src/implement/string/replace.ts","../src/implement/string/toUpper.ts","../src/implement/string/toLower.ts","../src/implement/string/startsWith.ts","../src/implement/string/endsWith.ts","../src/implement/string/match.ts","../src/implement/async/pipeAsync.ts","../src/implement/async/pipeAsyncSideEffect.ts","../src/implement/async/pipeAsyncSideEffectStrict.ts","../src/implement/async/delay.ts","../src/implement/async/timeout.ts","../src/implement/async/retry.ts","../src/implement/async/debounce.ts","../src/implement/async/debounceLeading.ts","../src/implement/async/debounceLeadingTrailing.ts","../src/implement/async/throttle.ts","../src/implement/nullable/maybe.ts","../src/implement/nullable/mapMaybe.ts","../src/implement/nullable/getOrElse.ts","../src/implement/nullable/result.ts","../src/implement/nullable/fold.ts","../src/implement/debug/assert.ts","../src/implement/debug/invariant.ts","../src/implement/debug/log.ts"],"sourcesContent":["import type { FromFn } from './from';\n\ntype UnaryFn<A, R> = (a: A) => R;\ntype ZeroFn<R> = () => R;\ntype PipeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<infer A, any>, ...UnaryFn<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? R\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<R, any>, ...UnaryFn<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Pipe<Fns extends UnaryFn<any, any>[]> = (input: PipeInput<Fns>) => PipeOutput<Fns>;\ntype PipeFrom<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]> = (input?: PipeInput<Fns>) => PipeOutput<Fns>;\n\nfunction pipe<R>(ab: ZeroFn<R>): () => R;\nfunction pipe<B, R>(ab: ZeroFn<B>, bc: UnaryFn<B, R>): () => R;\nfunction pipe<B, C, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): () => R;\nfunction pipe<B, C, D, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, D>, de: UnaryFn<D, R>): () => R;\nfunction pipe<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): () => R;\nfunction pipe<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): () => R;\nfunction pipe<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): () => R;\nfunction pipe<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeFrom<Fns>;\nfunction pipe<A, R>(ab: UnaryFn<A, R>): (a: A) => R;\nfunction pipe<A, B, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, R>): (a: A) => R;\nfunction pipe<A, B, C, R>(ab: UnaryFn<A, B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): (a: A) => R;\nfunction pipe<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): (a: A) => R;\nfunction pipe<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): (a: A) => R;\n\nfunction pipe<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): Pipe<Fns>;\nfunction pipe(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction pipe(...funcs: Array<(input: any) => any>) {\n return (init: any) => {\n return funcs.reduce((acc, fn) => fn(acc), init);\n };\n}\n\nexport default pipe;\n","/**\n * SideEffect - side effect container (never auto-executed)\n */\nexport class SideEffect<T = unknown> {\n readonly effect: () => T;\n readonly label?: string;\n\n constructor(effect: () => T, label?: string) {\n this.effect = effect;\n this.label = label;\n }\n\n static of<T>(effect: () => T, label?: string): SideEffect<T> {\n return new SideEffect(effect, label);\n }\n}\n\nexport type MatchHandlers<T, RValue, REffect> = {\n value: (value: T) => RValue;\n effect: (sideEffect: SideEffect) => REffect;\n};\n\nexport function matchSideEffect<T, RValue, REffect = any>(\n result: T | SideEffect,\n handlers: MatchHandlers<T, RValue, REffect>\n): RValue | REffect {\n if (result instanceof SideEffect) {\n return handlers.effect(result);\n }\n return handlers.value(result as T);\n}\n\nexport function runPipeResult<T, R=any>(result: T | SideEffect<R>): T | R {\n if (isSideEffect(result)) {\n return result.effect() as R;\n }\n return result as T;\n}\n\nexport function isSideEffect(value: unknown): value is SideEffect<any> {\n return value instanceof SideEffect;\n}\n\nexport default SideEffect;\n","import type { FromFn } from './from';\nimport SideEffect, { isSideEffect } from './sideEffect';\n\ntype MaybeSideEffect<T> = T | SideEffect<any>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype UnaryFn<A, R> = (a: A) => MaybeSideEffect<R>;\ntype ZeroFn<R> = () => MaybeSideEffect<R>;\ntype PipeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<infer A, any>, ...UnaryFn<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? MaybeSideEffect<R>\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Resolve<T> = T extends infer R ? R : never;\ntype PipeSideEffect<Fns extends UnaryFn<any, any>[]> = (\n input: PipeInput<Fns> | SideEffect<any>\n) => Resolve<PipeOutput<Fns>>;\ntype PipeSideEffectFrom<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]> = (\n input?: PipeInput<Fns> | SideEffect<any>\n) => Resolve<PipeOutput<Fns>>;\n\nfunction pipeSideEffect<R>(ab: ZeroFn<R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, R>(ab: ZeroFn<B>, bc: UnaryFn<B, R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, R>(ab: ZeroFn<B>, bc: UnaryFn<B, C>, cd: UnaryFn<C, R>): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): () => MaybeSideEffect<R>;\nfunction pipeSideEffect<Fns extends [FromFn<any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffectFrom<Fns>;\nfunction pipeSideEffect<A, R>(ab: UnaryFn<A, R>): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\nfunction pipeSideEffect<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<B, C>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<F, G>,\n gh: UnaryFn<G, H>,\n hi: UnaryFn<H, I>,\n ij: UnaryFn<I, J>,\n jk: UnaryFn<J, R>\n): (a: A | SideEffect<any>) => MaybeSideEffect<R>;\n\nfunction pipeSideEffect<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): PipeSideEffect<Fns>;\nfunction pipeSideEffect(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction pipeSideEffect(...funcs: Array<(input: any) => any>) {\n return (init: any) => {\n let acc = init;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeSideEffect;\n","import type { FromFn } from './from';\nimport SideEffect, { isSideEffect } from './sideEffect';\n\ntype AnyFn = (...args: any[]) => any;\ntype MaybeSideEffect<T, E> = T | SideEffect<E>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype UnaryFn<A, R> = (a: A) => R;\ntype ZeroFn<R> = () => R;\n\ntype EffectOfReturn<R> = R extends SideEffect<infer E> ? E : never;\ntype EffectOfFn<F> = F extends (...args: any[]) => infer R ? EffectOfReturn<R> : never;\ntype EffectsOf<Fns extends AnyFn[]> = EffectOfFn<Fns[number]>;\n\ntype PipeValueOutputUnary<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? NonSideEffect<R>\n : Fns extends [UnaryFn<any, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : never;\n\ntype PipeValueOutputStrict<Fns extends [AnyFn, ...AnyFn[]]> =\n Fns extends [ZeroFn<infer R>]\n ? NonSideEffect<R>\n : Fns extends [ZeroFn<infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<NonSideEffect<R>, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]\n ? PipeValueOutputUnary<Fns>\n : never;\n\ntype PipeInputStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? never\n : Fns extends [UnaryFn<infer A, any>, ...AnyFn[]]\n ? A\n : never;\n\ntype Resolve<T> = T extends infer R ? R : never;\n\ntype PipeSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input: PipeInputStrict<Fns>): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>;\n <EIn>(\n input: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;\n};\ntype PipeSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input?: PipeInputStrict<Fns>): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>;\n <EIn>(\n input?: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>;\n};\n\ntype PipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? () => Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>\n : PipeSideEffectStrictUnary<Fns>;\n\nfunction pipeSideEffectStrict<R>(ab: ZeroFn<R>): PipeSideEffectStrict<[ZeroFn<R>]>;\nfunction pipeSideEffectStrict<B, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, R>\n): PipeSideEffectStrict<[ZeroFn<B>, UnaryFn<NonSideEffect<B>, R>]>;\nfunction pipeSideEffectStrict<B, C, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, R>\n): PipeSideEffectStrict<[ZeroFn<B>, UnaryFn<NonSideEffect<B>, C>, UnaryFn<NonSideEffect<C>, R>]>;\nfunction pipeSideEffectStrict<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, R>\n]>;\nfunction pipeSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, J>,\n jk: UnaryFn<NonSideEffect<J>, R>\n): PipeSideEffectStrict<[\n ZeroFn<B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, J>,\n UnaryFn<NonSideEffect<J>, R>\n]>;\nfunction pipeSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(\n ...funcs: Fns\n): PipeSideEffectStrictUnaryOptional<Fns>;\nfunction pipeSideEffectStrict<A, R>(ab: UnaryFn<A, R>): PipeSideEffectStrict<[UnaryFn<A, R>]>;\nfunction pipeSideEffectStrict<A, B, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, R>\n): PipeSideEffectStrict<[UnaryFn<A, B>, UnaryFn<NonSideEffect<B>, R>]>;\nfunction pipeSideEffectStrict<A, B, C, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, R>\n): PipeSideEffectStrict<[UnaryFn<A, B>, UnaryFn<NonSideEffect<B>, C>, UnaryFn<NonSideEffect<C>, R>]>;\nfunction pipeSideEffectStrict<A, B, C, D, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, R>\n]>;\nfunction pipeSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<A, B>,\n bc: UnaryFn<NonSideEffect<B>, C>,\n cd: UnaryFn<NonSideEffect<C>, D>,\n de: UnaryFn<NonSideEffect<D>, E>,\n ef: UnaryFn<NonSideEffect<E>, F>,\n fg: UnaryFn<NonSideEffect<F>, G>,\n gh: UnaryFn<NonSideEffect<G>, H>,\n hi: UnaryFn<NonSideEffect<H>, I>,\n ij: UnaryFn<NonSideEffect<I>, J>,\n jk: UnaryFn<NonSideEffect<J>, R>\n): PipeSideEffectStrict<[\n UnaryFn<A, B>,\n UnaryFn<NonSideEffect<B>, C>,\n UnaryFn<NonSideEffect<C>, D>,\n UnaryFn<NonSideEffect<D>, E>,\n UnaryFn<NonSideEffect<E>, F>,\n UnaryFn<NonSideEffect<F>, G>,\n UnaryFn<NonSideEffect<G>, H>,\n UnaryFn<NonSideEffect<H>, I>,\n UnaryFn<NonSideEffect<I>, J>,\n UnaryFn<NonSideEffect<J>, R>\n]>;\n\nfunction pipeSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeSideEffectStrict<Fns>;\nfunction pipeSideEffectStrict(...funcs: Array<(input: any) => any>) {\n return (init?: any) => {\n let acc = init;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeSideEffectStrict;\n","/**\n * compose - 함수를 우→좌로 합성\n */\n\nimport type { FromFn } from './from';\n\ntype UnaryFn<A, R> = (a: A) => R;\ntype ZeroFn<R> = () => R;\ntype ComposeInput<Fns extends UnaryFn<any, any>[]> = Fns extends [...UnaryFn<any, any>[], UnaryFn<infer A, any>]\n ? A\n : never;\ntype ComposeOutput<Fns extends UnaryFn<any, any>[]> = Fns extends [UnaryFn<any, infer R>]\n ? R\n : Fns extends [UnaryFn<infer A, infer R>, ...infer Rest]\n ? Rest extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]\n ? ComposeOutput<Rest> extends A\n ? R\n : never\n : never\n : never;\ntype Compose<Fns extends UnaryFn<any, any>[]> = (input: ComposeInput<Fns>) => ComposeOutput<Fns>;\ntype ComposeFrom<Fns extends [...UnaryFn<any, any>[], FromFn<any>]> = (input?: ComposeInput<Fns>) => ComposeOutput<Fns>;\n\nfunction compose<R>(ab: ZeroFn<R>): () => R;\nfunction compose<B, R>(ab: UnaryFn<B, R>, bc: ZeroFn<B>): () => R;\nfunction compose<C, B, R>(ab: UnaryFn<B, R>, bc: UnaryFn<C, B>, cd: ZeroFn<C>): () => R;\nfunction compose<D, C, B, R>(ab: UnaryFn<B, R>, bc: UnaryFn<C, B>, cd: UnaryFn<D, C>, de: ZeroFn<D>): () => R;\nfunction compose<E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: ZeroFn<E>\n): () => R;\nfunction compose<F, E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: UnaryFn<F, E>,\n fg: ZeroFn<F>\n): () => R;\nfunction compose<G, F, E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: UnaryFn<F, E>,\n fg: UnaryFn<G, F>,\n gh: ZeroFn<G>\n): () => R;\nfunction compose<H, G, F, E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: UnaryFn<F, E>,\n fg: UnaryFn<G, F>,\n gh: UnaryFn<H, G>,\n hi: ZeroFn<H>\n): () => R;\nfunction compose<I, H, G, F, E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: UnaryFn<F, E>,\n fg: UnaryFn<G, F>,\n gh: UnaryFn<H, G>,\n hi: UnaryFn<I, H>,\n ij: ZeroFn<I>\n): () => R;\nfunction compose<J, I, H, G, F, E, D, C, B, R>(\n ab: UnaryFn<B, R>,\n bc: UnaryFn<C, B>,\n cd: UnaryFn<D, C>,\n de: UnaryFn<E, D>,\n ef: UnaryFn<F, E>,\n fg: UnaryFn<G, F>,\n gh: UnaryFn<H, G>,\n hi: UnaryFn<I, H>,\n ij: UnaryFn<J, I>,\n jk: ZeroFn<J>\n): () => R;\n\nfunction compose<Fns extends [...UnaryFn<any, any>[], FromFn<any>]>(...funcs: Fns): ComposeFrom<Fns>;\nfunction compose<A, R>(ab: UnaryFn<A, R>): (a: A) => R;\nfunction compose<A, B, R>(ab: UnaryFn<B, R>, bc: UnaryFn<A, B>): (a: A) => R;\nfunction compose<A, B, C, R>(ab: UnaryFn<C, R>, bc: UnaryFn<B, C>, cd: UnaryFn<A, B>): (a: A) => R;\nfunction compose<A, B, C, D, R>(\n ab: UnaryFn<D, R>,\n bc: UnaryFn<C, D>,\n cd: UnaryFn<B, C>,\n de: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, R>(\n ab: UnaryFn<E, R>,\n bc: UnaryFn<D, E>,\n cd: UnaryFn<C, D>,\n de: UnaryFn<B, C>,\n ef: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, F, R>(\n ab: UnaryFn<F, R>,\n bc: UnaryFn<E, F>,\n cd: UnaryFn<D, E>,\n de: UnaryFn<C, D>,\n ef: UnaryFn<B, C>,\n fg: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, F, G, R>(\n ab: UnaryFn<G, R>,\n bc: UnaryFn<F, G>,\n cd: UnaryFn<E, F>,\n de: UnaryFn<D, E>,\n ef: UnaryFn<C, D>,\n fg: UnaryFn<B, C>,\n gh: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, F, G, H, R>(\n ab: UnaryFn<H, R>,\n bc: UnaryFn<G, H>,\n cd: UnaryFn<F, G>,\n de: UnaryFn<E, F>,\n ef: UnaryFn<D, E>,\n fg: UnaryFn<C, D>,\n gh: UnaryFn<B, C>,\n hi: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, F, G, H, I, R>(\n ab: UnaryFn<I, R>,\n bc: UnaryFn<H, I>,\n cd: UnaryFn<G, H>,\n de: UnaryFn<F, G>,\n ef: UnaryFn<E, F>,\n fg: UnaryFn<D, E>,\n gh: UnaryFn<C, D>,\n hi: UnaryFn<B, C>,\n ij: UnaryFn<A, B>\n): (a: A) => R;\nfunction compose<A, B, C, D, E, F, G, H, I, J, R>(\n ab: UnaryFn<J, R>,\n bc: UnaryFn<I, J>,\n cd: UnaryFn<H, I>,\n de: UnaryFn<G, H>,\n ef: UnaryFn<F, G>,\n fg: UnaryFn<E, F>,\n gh: UnaryFn<D, E>,\n hi: UnaryFn<C, D>,\n ij: UnaryFn<B, C>,\n jk: UnaryFn<A, B>\n): (a: A) => R;\n\nfunction compose<Fns extends [UnaryFn<any, any>, ...UnaryFn<any, any>[]]>(...funcs: Fns): Compose<Fns>;\nfunction compose(...funcs: Array<UnaryFn<any, any>>): (input: any) => any;\nfunction compose(...funcs: Array<(...args: any[]) => any>) {\n return (value: any) => funcs.reduceRight((acc, fn) => fn(acc), value);\n}\n\nexport default compose;\n","/**\n * Curry function with stable TypeScript types.\n * Supports functions with 2-5 parameters and keeps data-last call order.\n */\n\nexport type Curry2<Fn> = Fn extends (a: infer A, b: infer B) => infer R\n ? {\n (...args: [A]): (b: B) => R;\n (...args: [A, B]): R;\n }\n : never;\n\nexport type Curry3<Fn> = Fn extends (a: infer A, b: infer B, c: infer C) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => R;\n (...args: [A, B]): (c: C) => R;\n (...args: [A, B, C]): R;\n }\n : never;\n\nexport type Curry4<Fn> = Fn extends (a: infer A, b: infer B, c: infer C, d: infer D) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => (d: D) => R;\n (...args: [A, B]): (c: C) => (d: D) => R;\n (...args: [A, B, C]): (d: D) => R;\n (...args: [A, B, C, D]): R;\n }\n : never;\n\nexport type Curry5<Fn> = Fn extends (a: infer A, b: infer B, c: infer C, d: infer D, e: infer E) => infer R\n ? {\n (...args: [A]): (b: B) => (c: C) => (d: D) => (e: E) => R;\n (...args: [A, B]): (c: C) => (d: D) => (e: E) => R;\n (...args: [A, B, C]): (d: D) => (e: E) => R;\n (...args: [A, B, C, D]): (e: E) => R;\n (...args: [A, B, C, D, E]): R;\n }\n : never;\n\ntype CurryVariadic<Fn extends (...args: any[]) => any> = Fn extends (...args: infer P) => infer R\n ? <T extends any[]>(\n ...args: T\n ) => T extends P ? R : P extends [...T, ...infer Rest] ? CurryVariadic<(...args: Rest) => R> : never\n : never;\n\ntype CurryByArity<Fn extends (...args: any[]) => any> = Parameters<Fn>['length'] extends 2\n ? Curry2<Fn>\n : Parameters<Fn>['length'] extends 3\n ? Curry3<Fn>\n : Parameters<Fn>['length'] extends 4\n ? Curry4<Fn>\n : Parameters<Fn>['length'] extends 5\n ? Curry5<Fn>\n : CurryVariadic<Fn>;\n\nexport type Curried<Fn extends (...args: any[]) => any> = CurryByArity<Fn>;\n\nfunction curry<Fn extends (...args: any[]) => any>(fn: Fn): Curried<Fn>;\n\n// Implementation\nfunction curry(fn: (...args: any[]) => any, ...args: any[]): any {\n const curried = (accumulated: any[]) => {\n return accumulated.length >= fn.length\n ? fn(...accumulated)\n : (...nextArgs: any[]) => curried([...accumulated, ...nextArgs]);\n };\n\n return args.length === 0 ? curried([]) : curried(args);\n}\n\nexport default curry;\n","/**\n * partial - 인자를 미리 고정한 함수 생성\n */\nfunction partial<Args extends any[], Rest extends any[], R>(\n fn: (...args: [...Args, ...Rest]) => R,\n ...preset: Args\n): (...rest: Rest) => R {\n return function partiallyApplied(this: unknown, ...rest: Rest) {\n const all = [...preset, ...rest] as [...Args, ...Rest];\n return fn.apply(this as any, all);\n };\n}\n\nexport default partial;\n","/**\n * flip - 함수 인자 순서를 뒤집음\n */\nfunction flip<A, B, R>(fn: (a: A, b: B) => R): (b: B, a: A) => R;\nfunction flip<A, B, C, R>(fn: (a: A, b: B, c: C) => R): (c: C, b: B, a: A) => R;\nfunction flip<A, B, C, D, R>(fn: (a: A, b: B, c: C, d: D) => R): (d: D, c: C, b: B, a: A) => R;\nfunction flip<A, B, C, D, E, R>(fn: (a: A, b: B, c: C, d: D, e: E) => R): (e: E, d: D, c: C, b: B, a: A) => R;\nfunction flip<R>(fn: (...args: any[]) => R): (...reversed: any[]) => R;\nfunction flip<R>(fn: (...args: any[]) => R) {\n return function flipped(this: unknown, ...args: any[]) {\n const reversed = [...args].reverse();\n return fn.apply(this, reversed);\n };\n}\n\nexport default flip;\n","/**\n * complement - 조건 함수 반전\n */\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean): (...args: T) => boolean;\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean, ...args: T): boolean;\nfunction complement<T extends any[]>(predicate: (...args: T) => boolean, ...args: T) {\n if (args.length === 0) {\n return (...nextArgs: T) => !predicate(...nextArgs);\n }\n return !predicate(...args);\n}\n\nexport default complement;\n","/**\n * identity (id) - 입력을 그대로 반환\n */\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport default identity;\n","/**\n * constant (always) - 항상 같은 값을 반환\n */\nfunction constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport default constant;\n","/**\n * from - 입력을 무시하고 고정 값을 반환\n */\nexport type FromFn<T> = {\n <I>(_input: I): T;\n readonly __from: true;\n};\n\nfunction from<T>(value: T): FromFn<T> {\n const fn = (_input: unknown) => value;\n Object.defineProperty(fn, '__from', { value: true });\n return fn as FromFn<T>;\n}\n\nexport default from;\n","/**\n * tap - 값을 그대로 흘리며 side-effect 실행\n */\nfunction tap<T>(fn: (value: T) => void): (value: T) => T {\n return (value: T) => {\n fn(value);\n return value;\n };\n}\n\nexport default tap;\n","/**\n * tap0 - 입력 없이 side-effect 실행\n */\nfunction tap0(fn: () => void): () => void {\n return () => {\n fn();\n };\n}\n\nexport default tap0;\n","/**\n * once - 한 번만 실행되는 함수\n */\ntype AnyFn = (...args: any[]) => any;\n\nfunction once<T extends AnyFn>(fn: T): T {\n let called = false;\n let value: any;\n\n const wrapped = function (this: any, ...args: any[]) {\n if (!called) {\n called = true;\n value = fn.apply(this, args);\n }\n return value;\n };\n\n return wrapped as T;\n}\n\nexport default once;\n","/**\n * memoize - 동일 입력에 대해 결과 캐싱\n */\ntype AnyFn = (...args: any[]) => any;\n\nfunction memoize<T extends AnyFn>(fn: T): T {\n const cache = new Map<any, any>();\n const RESULT = Symbol('result');\n\n const memoized = function (this: any, ...args: any[]) {\n let node = cache;\n for (const arg of args) {\n if (!node.has(arg)) {\n node.set(arg, new Map());\n }\n node = node.get(arg);\n }\n\n if (node.has(RESULT)) {\n return node.get(RESULT);\n }\n\n const value = fn.apply(this, args);\n node.set(RESULT, value);\n return value;\n };\n\n return memoized as T;\n}\n\nexport default memoize;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\n\ntype IfElse = {\n <T, RTrue, RFalse>(\n ...args: [predicate: (value: T) => boolean]\n ): (onTrue: (value: T) => RTrue) => (onFalse: (value: T) => RFalse) => (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [predicate: (value: NoInfer<T>) => boolean, onTrue: (value: T) => RTrue]\n ): (onFalse: (value: T) => RFalse) => (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [\n predicate: (value: NoInfer<T>) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse\n ]\n ): (value: T) => RTrue | RFalse;\n <T, RTrue, RFalse>(\n ...args: [\n predicate: (value: NoInfer<T>) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse,\n value: T\n ]\n ): RTrue | RFalse;\n};\n\n/**\n * ifElse - 조건에 따라 다른 함수 실행\n */\nfunction ifElse<T, RTrue, RFalse>(\n predicate: (value: T) => boolean,\n onTrue: (value: T) => RTrue,\n onFalse: (value: T) => RFalse,\n value: T\n): RTrue | RFalse {\n return predicate(value) ? onTrue(value) : onFalse(value);\n}\n\nconst curriedIfElse = curry(ifElse) as IfElse;\nexport default curriedIfElse;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\ntype Widen<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T;\n\ntype When = {\n <T>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => Widen<T>\n ) => (value: Widen<T>) => Widen<T>;\n <T, R>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => R\n ) => (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => Widen<T>]\n ): (value: Widen<T>) => Widen<T>;\n <T, R>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => R]\n ): (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => Widen<T>,\n value: Widen<T>\n ]\n ): Widen<T>;\n <T, R>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => R,\n value: Widen<T>\n ]\n ): Widen<T> | R;\n};\n\n/**\n * when - 조건이 true일 때만 적용\n */\nfunction when<T>(\n predicate: (value: T) => boolean,\n fn: (value: T) => T,\n value: T\n): T {\n return predicate(value) ? fn(value) : value;\n}\n\nconst curriedWhen = curry(when) as When;\nexport default curriedWhen;\n","import curry from '../composition/curry';\n\ntype NoInfer<T> = [T][T extends any ? 0 : never];\ntype Widen<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T;\n\ntype Unless = {\n <T>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => Widen<T>\n ) => (value: Widen<T>) => Widen<T>;\n <T, R>(...args: [predicate: (value: Widen<T>) => boolean]): (\n fn: (value: Widen<T>) => R\n ) => (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => Widen<T>]\n ): (value: Widen<T>) => Widen<T>;\n <T, R>(\n ...args: [predicate: (value: NoInfer<Widen<T>>) => boolean, fn: (value: Widen<T>) => R]\n ): (value: Widen<T>) => Widen<T> | R;\n <T>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => Widen<T>,\n value: Widen<T>\n ]\n ): Widen<T>;\n <T, R>(\n ...args: [\n predicate: (value: NoInfer<Widen<T>>) => boolean,\n fn: (value: Widen<T>) => R,\n value: Widen<T>\n ]\n ): Widen<T> | R;\n};\n\n/**\n * unless - 조건이 false일 때만 적용\n */\nfunction unless<T>(\n predicate: (value: T) => boolean,\n fn: (value: T) => T,\n value: T\n): T {\n return predicate(value) ? value : fn(value);\n}\n\nconst curriedUnless = curry(unless) as Unless;\nexport default curriedUnless;\n","/**\n * cond - 다중 조건 분기 (switch 대체)\n */\nfunction cond<T, R>(\n conditions: Array<[(value: T) => boolean, (value: T) => R]>\n): (value: T) => R | undefined {\n return (value: T) => {\n for (const [predicate, handler] of conditions) {\n if (predicate(value)) {\n return handler(value);\n }\n }\n return undefined;\n };\n}\n\nexport default cond;\n","import curry from '../composition/curry';\n\ntype TryCatch = {\n <T, R>(...args: [tryFn: (value: T) => R]): (\n catchFn: (error: Error, value: T) => R\n ) => (value: T) => R;\n <T, R>(\n ...args: [tryFn: (value: T) => R, catchFn: (error: Error, value: T) => R]\n ): (value: T) => R;\n <T, R>(\n ...args: [\n tryFn: (value: T) => R,\n catchFn: (error: Error, value: T) => R,\n value: T\n ]\n ): R;\n};\n\n/**\n * tryCatch - 예외를 함수형으로 처리\n */\nfunction tryCatch<T, R>(\n tryFn: (value: T) => R,\n catchFn: (error: Error, value: T) => R,\n value: T\n): R {\n try {\n return tryFn(value);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n return catchFn(error, value);\n }\n}\n\nconst curriedTryCatch = curry(tryCatch) as TryCatch;\nexport default curriedTryCatch;\n","import curry from '../composition/curry';\n\ntype Guard = {\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean]\n ): (defaultValue: U) => (value: T) => T;\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean, defaultValue: U]\n ): (value: T) => T;\n <T, U extends T>(\n ...args: [predicate: (value: T) => boolean, defaultValue: U, value: T]\n ): T;\n};\n\n/**\n * guard - 조건 불만족 시 early return\n */\nfunction guard<T, U extends T>(\n predicate: (value: T) => boolean,\n defaultValue: U,\n value: T\n): T {\n return predicate(value) ? value : defaultValue;\n}\n\nconst curriedGuard = curry(guard) as Guard;\nexport default curriedGuard;\n","import curry from '../composition/curry';\n\ntype Map = {\n <T, R>(...args: [fn: (value: T) => R]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (value: T) => R, arr: T[]]): R[];\n};\n\n/**\n * map - 요소 변환\n */\nfunction map<T, R>(fn: (value: T) => R, arr: T[]): R[] {\n return arr.map(fn);\n}\n\nconst curriedMap = curry(map) as Map;\nexport default curriedMap;\n","import curry from '../composition/curry';\n\ntype Filter = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * filter - 조건 필터링\n */\nfunction filter<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n return arr.filter(predicate);\n}\n\nconst curriedFilter = curry(filter) as Filter;\nexport default curriedFilter;\n","import curry from '../composition/curry';\n\ntype Reduce = {\n <T, R>(...args: [fn: (acc: R, value: T) => R]): (initial: R) => (arr: T[]) => R;\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R]): (arr: T[]) => R;\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R, arr: T[]]): R;\n};\n\n/**\n * reduce - 누적 연산\n */\nfunction reduce<T, R>(\n fn: (acc: R, value: T) => R,\n initial: R,\n arr: T[]\n): R {\n return arr.reduce(fn, initial);\n}\n\nconst curriedReduce = curry(reduce) as Reduce;\nexport default curriedReduce;\n","import curry from '../composition/curry';\n\ntype FlatMap = {\n <T, R>(...args: [fn: (value: T) => R[]]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (value: T) => R[], arr: T[]]): R[];\n};\n\n/**\n * flatMap - map 후 flatten\n */\nfunction flatMap<T, R>(fn: (value: T) => R[], arr: T[]): R[] {\n return arr.flatMap(fn);\n}\n\nconst curriedFlatMap = curry(flatMap) as FlatMap;\nexport default curriedFlatMap;\n","import curry from '../composition/curry';\n\ntype Find = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T | undefined;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T | undefined;\n};\n\n/**\n * find - 조건 만족 첫 요소\n */\nfunction find<T>(predicate: (value: T) => boolean, arr: T[]): T | undefined {\n return arr.find(predicate);\n}\n\nconst curriedFind = curry(find) as Find;\nexport default curriedFind;\n","import curry from '../composition/curry';\n\ntype Some = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => boolean;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): boolean;\n};\n\n/**\n * some - 조건 검사 (하나라도 만족)\n */\nfunction some<T>(predicate: (value: T) => boolean, arr: T[]): boolean {\n for (let i = 0; i < arr.length; i++) {\n if (predicate(arr[i])) return true;\n }\n return false;\n}\n\nconst curriedSome = curry(some) as Some;\nexport default curriedSome;\n","import curry from '../composition/curry';\n\ntype Every = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => boolean;\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): boolean;\n};\n\n/**\n * every - 조건 검사 (모두 만족)\n */\nfunction every<T>(predicate: (value: T) => boolean, arr: T[]): boolean {\n return arr.every(predicate);\n}\n\nconst curriedEvery = curry(every) as Every;\nexport default curriedEvery;\n","import curry from '../composition/curry';\n\ntype Take = {\n (n: number): <T>(arr: T[]) => T[];\n <T>(...args: [n: number, arr: T[]]): T[];\n};\n\n/**\n * take - 앞에서 n개 선택\n */\nfunction take<T>(n: number, arr: T[]): T[] {\n if (n <= 0) return [];\n if (n >= arr.length) return [...arr];\n return arr.slice(0, n);\n}\n\nconst curriedTake = curry(take) as Take;\nexport default curriedTake;\n","import curry from '../composition/curry';\n\ntype Drop = {\n (n: number): <T>(arr: T[]) => T[];\n <T>(...args: [n: number, arr: T[]]): T[];\n};\n\n/**\n * drop - 앞에서 n개 제외\n */\nfunction drop<T>(n: number, arr: T[]): T[] {\n const count = Math.floor(n);\n if (!Number.isFinite(count) || count <= 0) {\n return arr;\n }\n return arr.slice(count);\n}\n\nconst curriedDrop = curry(drop) as Drop;\nexport default curriedDrop;\n","import curry from '../composition/curry';\n\ntype DropWhile = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * dropWhile - 조건이 유지되는 동안 앞에서 제외\n */\nfunction dropWhile<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n const result: T[] = [];\n let dropping = true;\n for (const item of arr) {\n if (dropping && !predicate(item)) {\n dropping = false;\n }\n if (!dropping) {\n result.push(item);\n }\n }\n return result;\n}\n\nconst curriedDropWhile = curry(dropWhile) as DropWhile;\nexport default curriedDropWhile;\n","import curry from '../composition/curry';\n\ntype Chunk = {\n (size: number): <T>(arr: T[]) => T[][];\n <T>(...args: [size: number, arr: T[]]): T[][];\n};\n\n/**\n * chunk - 배열을 일정 크기로 분할\n */\nfunction chunk<T>(size: number, arr: T[]): T[][] {\n const chunkSize = Math.floor(size);\n if (!Number.isFinite(chunkSize) || chunkSize <= 0) {\n return [];\n }\n\n const result: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n result.push(arr.slice(i, i + chunkSize));\n }\n return result;\n}\n\nconst curriedChunk = curry(chunk) as Chunk;\nexport default curriedChunk;\n","import curry from '../composition/curry';\n\ntype Zip = {\n <U>(...args: [arr2: U[]]): <T>(arr1: T[]) => Array<[T, U]>;\n <T, U>(...args: [arr2: U[], arr1: T[]]): Array<[T, U]>;\n};\n\n/**\n * zip - 배열 병합\n */\nfunction zip<T, U>(arr2: U[], arr1: T[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n\n for (let i = 0; i < length; i += 1) {\n result.push([arr1[i], arr2[i]]);\n }\n\n return result;\n}\n\nconst curriedZip = curry(zip) as Zip;\nexport default curriedZip;\n","import curry from '../composition/curry';\n\ntype ZipWith = {\n <A, B, R>(...args: [fn: (a: A, b: B) => R]): (other: B[]) => (arr: A[]) => R[];\n <A, B, R>(...args: [fn: (a: A, b: B) => R, other: B[]]): (arr: A[]) => R[];\n <A, B, R>(...args: [fn: (a: A, b: B) => R, other: B[], arr: A[]]): R[];\n};\n\n/**\n * zipWith - 두 배열을 함수로 결합\n */\nfunction zipWith<A, B, R>(fn: (a: A, b: B) => R, other: B[], arr: A[]): R[] {\n const length = Math.min(arr.length, other.length);\n const result: R[] = [];\n for (let i = 0; i < length; i += 1) {\n result.push(fn(arr[i], other[i]));\n }\n return result;\n}\n\nconst curriedZipWith = curry(zipWith) as ZipWith;\nexport default curriedZipWith;\n","/**\n * unzip - 배열 분리\n */\nfunction unzip<T, U>(arr: Array<[T, U]>): [T[], U[]] {\n const left: T[] = [];\n const right: U[] = [];\n\n for (const [a, b] of arr) {\n left.push(a);\n right.push(b);\n }\n\n return [left, right];\n}\n\nexport default unzip;\n","/**\n * uniq - 중복 제거\n */\nfunction uniq<T>(arr: T[]): T[] {\n const seen = new Set<T>();\n const result: T[] = [];\n for (const item of arr) {\n if (!seen.has(item)) {\n seen.add(item);\n result.push(item);\n }\n }\n return result;\n}\n\nexport default uniq;\n","import curry from '../composition/curry';\n\ntype UniqBy = {\n <T>(...args: [fn: (value: T) => any]): (arr: T[]) => T[];\n <T>(...args: [fn: (value: T) => any, arr: T[]]): T[];\n};\n\n/**\n * uniqBy - 기준 함수로 중복 제거\n */\nfunction uniqBy<T>(fn: (value: T) => any, arr: T[]): T[] {\n const seen = new Set<any>();\n const result: T[] = [];\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return result;\n}\n\nconst curriedUniqBy = curry(uniqBy) as UniqBy;\nexport default curriedUniqBy;\n","import curry from '../composition/curry';\n\ntype SortBy = {\n <T>(...args: [fn: (value: T) => any]): (arr: T[]) => T[];\n <T>(...args: [fn: (value: T) => any, arr: T[]]): T[];\n};\n\n/**\n * sortBy - 기준 함수로 정렬\n */\nfunction sortBy<T>(fn: (value: T) => any, arr: T[]): T[] {\n return [...arr].sort((a, b) => {\n const aKey = fn(a);\n const bKey = fn(b);\n if (aKey < bKey) return -1;\n if (aKey > bKey) return 1;\n return 0;\n });\n}\n\nconst curriedSortBy = curry(sortBy) as SortBy;\nexport default curriedSortBy;\n","import curry from '../composition/curry';\n\ntype Sort = {\n <T>(...args: [compare: (a: T, b: T) => number]): (arr: T[]) => T[];\n <T>(...args: [compare: (a: T, b: T) => number, arr: T[]]): T[];\n};\n\n/**\n * sort - 비교 함수로 정렬 (불변)\n */\nfunction sort<T>(compare: (a: T, b: T) => number, arr: T[]): T[] {\n return [...arr].sort(compare);\n}\n\nconst curriedSort = curry(sort) as Sort;\nexport default curriedSort;\n","import curry from '../composition/curry';\n\ntype GroupBy = {\n <T>(...args: [fn: (value: T) => string]): (arr: T[]) => Record<string, T[]>;\n <T>(...args: [fn: (value: T) => string, arr: T[]]): Record<string, T[]>;\n};\n\n/**\n * groupBy - 키 기준 그룹화\n */\nfunction groupBy<T>(fn: (value: T) => string, arr: T[]): Record<string, T[]> {\n return arr.reduce<Record<string, T[]>>((acc, item) => {\n const key = fn(item);\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(item);\n return acc;\n }, {});\n}\n\nconst curriedGroupBy = curry(groupBy) as GroupBy;\nexport default curriedGroupBy;\n","/**\n * zipIndex - 인덱스와 값을 쌍으로 묶기\n */\nfunction zipIndex<T>(arr: T[]): Array<[number, T]> {\n return arr.map((value, index) => [index, value]);\n}\n\nexport default zipIndex;\n","import curry from '../composition/curry';\n\ntype TakeWhile = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => T[];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): T[];\n};\n\n/**\n * takeWhile - 조건이 유지되는 동안 앞에서 가져오기\n */\nfunction takeWhile<T>(predicate: (value: T) => boolean, arr: T[]): T[] {\n const result: T[] = [];\n for (const item of arr) {\n if (!predicate(item)) {\n break;\n }\n result.push(item);\n }\n return result;\n}\n\nconst curriedTakeWhile = curry(takeWhile) as TakeWhile;\nexport default curriedTakeWhile;\n","import curry from '../composition/curry';\n\ntype Scan = {\n <T, R>(...args: [fn: (acc: R, value: T) => R]): (initial: R) => (arr: T[]) => R[];\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R]): (arr: T[]) => R[];\n <T, R>(...args: [fn: (acc: R, value: T) => R, initial: R, arr: T[]]): R[];\n};\n\n/**\n * scan - 누적 중간값을 배열로 반환\n */\nfunction scan<T, R>(fn: (acc: R, value: T) => R, initial: R, arr: T[]): R[] {\n const result: R[] = [];\n let acc = initial;\n for (const item of arr) {\n acc = fn(acc, item);\n result.push(acc);\n }\n return result;\n}\n\nconst curriedScan = curry(scan) as Scan;\nexport default curriedScan;\n","import curry from '../composition/curry';\n\ntype Concat = {\n <T>(...args: [other: T[]]): (arr: T[]) => T[];\n <T>(...args: [other: T[], arr: T[]]): T[];\n};\n\n/**\n * concat - 두 배열 연결\n */\nfunction concat<T>(other: T[], arr: T[]): T[] {\n return [...arr, ...other];\n}\n\nconst curriedConcat = curry(concat) as Concat;\nexport default curriedConcat;\n","import curry from '../composition/curry';\n\ntype Append = {\n <T>(...args: [value: T]): (arr: T[]) => T[];\n <T>(...args: [value: T, arr: T[]]): T[];\n};\n\n/**\n * append - 배열 끝에 값 추가\n */\nfunction append<T>(value: T, arr: T[]): T[] {\n return [...arr, value];\n}\n\nconst curriedAppend = curry(append) as Append;\nexport default curriedAppend;\n","import curry from '../composition/curry';\n\ntype Prepend = {\n <T>(...args: [value: T]): (arr: T[]) => T[];\n <T>(...args: [value: T, arr: T[]]): T[];\n};\n\n/**\n * prepend - 배열 앞에 값 추가\n */\nfunction prepend<T>(value: T, arr: T[]): T[] {\n return [value, ...arr];\n}\n\nconst curriedPrepend = curry(prepend) as Prepend;\nexport default curriedPrepend;\n","/**\n * flatten - 1단계 배열 평탄화\n */\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.flat();\n}\n\nexport default flatten;\n","/**\n * head - 첫 요소 가져오기\n */\nfunction head<T>(arr: T[]): T | undefined {\n return arr[0];\n}\n\nexport default head;\n","/**\n * tail - 첫 요소 제외\n */\nfunction tail<T>(arr: T[]): T[] {\n return arr.slice(1);\n}\n\nexport default tail;\n","/**\n * last - 마지막 요소 가져오기\n */\nfunction last<T>(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}\n\nexport default last;\n","/**\n * init - 마지막 요소 제외\n */\nfunction init<T>(arr: T[]): T[] {\n if (arr.length <= 1) return [];\n return arr.slice(0, -1);\n}\n\nexport default init;\n","/**\n * range - 숫자 범위 생성 (end 제외)\n */\nfunction range(start: number, end: number): number[] {\n if (!Number.isFinite(start) || !Number.isFinite(end)) return [];\n if (start === end) return [];\n\n const step = start < end ? 1 : -1;\n const result: number[] = [];\n\n for (let value = start; step > 0 ? value < end : value > end; value += step) {\n result.push(value);\n }\n\n return result;\n}\n\nexport default range;\n","import curry from '../composition/curry';\n\ntype Partition = {\n <T>(...args: [predicate: (value: T) => boolean]): (arr: T[]) => [T[], T[]];\n <T>(...args: [predicate: (value: T) => boolean, arr: T[]]): [T[], T[]];\n};\n\n/**\n * partition - 조건에 따라 분리\n */\nfunction partition<T>(predicate: (value: T) => boolean, arr: T[]): [T[], T[]] {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for (const item of arr) {\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n\n return [truthy, falsy];\n}\n\nconst curriedPartition = curry(partition) as Partition;\nexport default curriedPartition;\n","/**\n * flattenDeep - 깊은 배열 평탄화\n */\nfunction flattenDeep<T>(arr: any[]): T[] {\n const result: T[] = [];\n\n const walk = (items: any[]) => {\n for (const item of items) {\n if (Array.isArray(item)) {\n walk(item);\n } else {\n result.push(item);\n }\n }\n };\n\n walk(arr);\n return result;\n}\n\nexport default flattenDeep;\n","import curry from '../composition/curry';\n\ntype Prop = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => T[K] | undefined;\n <T, K extends keyof T = keyof T>(...args: [key: K, obj: T]): T[K] | undefined;\n};\n\n/**\n * prop - 안전한 프로퍼티 접근\n */\nfunction prop<T, K extends keyof T = keyof T>(key: K, obj: T): T[K] | undefined {\n return obj?.[key];\n}\n\nconst curriedProp = curry(prop) as Prop;\nexport default curriedProp;\n","import curry from '../composition/curry';\n\ntype PropStrict = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => NonNullable<T[K]>;\n <T, K extends keyof T>(...args: [key: K, obj: T]): NonNullable<T[K]>;\n};\n\n/**\n * propStrict - strict property access (throws on null/undefined)\n */\nfunction propStrict<T, K extends keyof T = keyof T>(key: K, obj: T): NonNullable<T[K]> {\n const value = obj?.[key];\n if (value == null) {\n throw new Error(`propStrict: \"${String(key)}\" is null or undefined`);\n }\n return value as NonNullable<T[K]>;\n}\n\nconst curriedPropStrict = curry(propStrict) as unknown as PropStrict;\nexport default curriedPropStrict;\n","import curry from '../composition/curry';\n\ntype PropOr = {\n <D>(...args: [defaultValue: D]): <K extends PropertyKey>(\n key: K\n ) => <T extends Record<K, unknown>>(obj: T) => T[K] | D;\n <D, K extends PropertyKey>(\n ...args: [defaultValue: D, key: K]\n ): <T extends Record<K, unknown>>(obj: T) => T[K] | D;\n <T, K extends keyof T, D>(...args: [defaultValue: D, key: K, obj: T]): T[K] | D;\n};\n\n/**\n * propOr - 기본값이 있는 프로퍼티 접근\n */\nfunction propOr<T, K extends keyof T, D>(defaultValue: D, key: K, obj: T): T[K] | D {\n const value = obj?.[key];\n return value == null ? defaultValue : value;\n}\n\nconst curriedPropOr = curry(propOr) as PropOr;\nexport default curriedPropOr;\n","import curry from '../composition/curry';\nimport type { PathKey } from './pathKey';\n\ntype Path = {\n (pathArray: PathKey[]): <T>(obj: any) => T | undefined;\n <T>(...args: [pathArray: PathKey[], obj: any]): T | undefined;\n};\n\n/**\n * path - 안전한 깊은 프로퍼티 접근\n */\nfunction path<T>(pathArray: PathKey[], obj: any): T | undefined {\n return pathArray.reduce((current, key) => (current == null ? undefined : current[key]), obj) as T | undefined;\n}\n\nconst curriedPath = curry(path) as Path;\nexport default curriedPath;\nexport type { PathKey };\n","import curry from '../composition/curry';\nimport type { PathKey } from './pathKey';\n\ntype PathOr = {\n <D>(...args: [defaultValue: D]): <T>(pathArray: PathKey[]) => (obj: any) => T | D;\n <D>(...args: [defaultValue: D, pathArray: PathKey[]]): <T>(obj: any) => T | D;\n <T, D>(...args: [defaultValue: D, pathArray: PathKey[], obj: any]): T | D;\n};\n\n/**\n * pathOr - 기본값이 있는 깊은 프로퍼티 접근\n */\nfunction pathOr<T, D>(defaultValue: D, pathArray: PathKey[], obj: any): T | D {\n const value = pathArray.reduce((current, key) => (current == null ? undefined : current[key]), obj) as T | undefined;\n return value == null ? defaultValue : value;\n}\n\nconst curriedPathOr = curry(pathOr) as PathOr;\nexport default curriedPathOr;\nexport type { PathKey };\n","import curry from '../composition/curry';\n\ntype PickFn = {\n <K extends PropertyKey>(...args: [keys: K[]]): <T extends Record<K, unknown>>(obj: T) => Pick<T, K>;\n <T extends object, K extends keyof T = keyof T>(...args: [keys: K[], obj: T]): Pick<T, K>;\n};\n\n/**\n * pick - 일부 속성 선택\n */\nfunction pick<T extends object, K extends keyof T = keyof T>(keys: K[], obj: T): Pick<T, K> {\n const result = {} as Pick<T, K>;\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\nconst curriedPick = curry(pick) as PickFn;\nexport default curriedPick;\n","import curry from '../composition/curry';\n\ntype OmitFn = {\n <K extends PropertyKey>(...args: [keys: K[]]): <T extends Record<K, unknown>>(obj: T) => Omit<T, K>;\n <T extends object, K extends keyof T = keyof T>(...args: [keys: K[], obj: T]): Omit<T, K>;\n};\n\n/**\n * omit - 일부 속성 제거\n */\nfunction omit<T, K extends keyof T = keyof T>(keys: K[], obj: T): Omit<T, K> {\n const result = { ...(obj as object) } as T;\n for (const key of keys) {\n delete (result as Record<PropertyKey, unknown>)[key];\n }\n return result as Omit<T, K>;\n}\n\nconst curriedOmit = curry(omit) as OmitFn;\nexport default curriedOmit;\n","import curry from '../composition/curry';\n\ntype AssocKey = string | number | symbol;\n\ntype AssocValue<T, K extends AssocKey, V> = K extends keyof T\n ? (T[K] extends V ? T : Omit<T, K> & Record<K, V>)\n : T & Record<K, V>;\n\ntype AssocResult<T, K extends AssocKey, V> =\n T extends readonly (infer U)[]\n ? K extends number | `${number}`\n ? Array<V | U>\n : AssocValue<T, K, V>\n : AssocValue<T, K, V>;\n\ntype Assoc = {\n <K extends AssocKey>(...args: [key: K]): <V>(value: V) => <T>(obj: T) => AssocResult<T, K, V>;\n <K extends AssocKey, V>(...args: [key: K, value: V]): <T>(obj: T) => AssocResult<T, K, V>;\n <T, K extends AssocKey, V>(...args: [key: K, value: V, obj: T]): AssocResult<T, K, V>;\n};\n\n/**\n * assoc - 불변 객체 속성 설정\n */\nfunction assoc<T, K extends AssocKey, V>(key: K, value: V, obj: T): AssocResult<T, K, V> {\n if (Array.isArray(obj)) {\n const result = obj.slice();\n (result as any)[key] = value;\n return result as AssocResult<T, K, V>;\n }\n\n if (obj && typeof obj === 'object') {\n return {\n ...(obj as object),\n [key]: value,\n } as AssocResult<T, K, V>;\n }\n\n return { [key]: value } as AssocResult<T, K, V>;\n}\n\nconst curriedAssoc = curry(assoc) as Assoc;\nexport default curriedAssoc;\n","import curry from '../composition/curry';\nimport type { PathKey } from './pathKey';\n\nconst isIndexKey = (key: PathKey): key is number | `${number}` => {\n if (typeof key === 'number') {\n return Number.isInteger(key);\n }\n if (typeof key === 'string') {\n return /^-?\\d+$/.test(key);\n }\n return false;\n};\n\nconst normalizeIndex = (key: number | `${number}`, length: number) => {\n const raw = typeof key === 'number' ? key : Number(key);\n if (Number.isNaN(raw)) {\n return -1;\n }\n if (raw < 0) {\n return Math.max(length + raw, 0);\n }\n return raw;\n};\n\nconst isObjectLike = (value: unknown): value is Record<PropertyKey, unknown> =>\n value !== null && typeof value === 'object';\n\ntype AssocPath = {\n <T = unknown>(\n ...args: [pathArray: PathKey[]]\n ): (value: unknown) => (obj: unknown) => T;\n <T = unknown>(...args: [pathArray: PathKey[], value: unknown]): (obj: unknown) => T;\n <T = unknown>(...args: [pathArray: PathKey[], value: unknown, obj: unknown]): T;\n};\n\n/**\n * assocPath - 경로 기반 값 설정 (불변)\n */\nfunction assocPath<T = unknown>(pathArray: PathKey[], value: unknown, obj: unknown): T {\n if (pathArray.length === 0) {\n return value as T;\n }\n\n const [key, ...rest] = pathArray;\n const useArray = isIndexKey(key);\n const base = Array.isArray(obj) ? obj.slice() : isObjectLike(obj) ? { ...(obj as object) } : useArray ? [] : {};\n\n if (Array.isArray(base) && isIndexKey(key)) {\n const index = normalizeIndex(key, base.length);\n const current = (base as unknown[])[index];\n const nextValue = rest.length === 0 ? value : assocPath(rest, value, current);\n (base as unknown[])[index] = nextValue;\n return base as T;\n }\n\n const current = isObjectLike(base) ? (base as Record<PropertyKey, unknown>)[key] : undefined;\n const nextValue = rest.length === 0 ? value : assocPath(rest, value, current);\n (base as Record<PropertyKey, unknown>)[key] = nextValue;\n return base as T;\n}\n\nconst curriedAssocPath = curry(assocPath) as AssocPath;\nexport default curriedAssocPath;\nexport type { PathKey };\n","/**\n * dissoc - 불변 객체 속성 제거\n */\nfunction dissoc<T>(key: number, obj: readonly T[]): T[];\nfunction dissoc<T, K extends keyof T>(key: K, obj: T): Omit<T, K>;\nfunction dissoc<T, K extends keyof T>(key: K, obj: T): Omit<T, K> {\n if (Array.isArray(obj)) {\n const result = obj.slice();\n const index = typeof key === 'number' ? key : Number.isNaN(Number(key)) ? -1 : Number(key);\n if (index >= 0 && index < result.length) {\n result.splice(index, 1);\n } else {\n delete (result as unknown as Record<PropertyKey, unknown>)[key as unknown as PropertyKey];\n }\n return result as unknown as Omit<T, K>;\n }\n\n if (obj && typeof obj === 'object') {\n const { [key]: _removed, ...rest } = obj as Record<PropertyKey, unknown>;\n return rest as Omit<T, K>;\n }\n\n return obj as Omit<T, K>;\n}\n\nexport default dissoc;\n","import curry from '../composition/curry';\nimport type { PathKey } from './pathKey';\n\nconst isIndexKey = (key: PathKey): key is number | `${number}` => {\n if (typeof key === 'number') {\n return Number.isInteger(key);\n }\n if (typeof key === 'string') {\n return /^-?\\d+$/.test(key);\n }\n return false;\n};\n\nconst normalizeIndex = (key: number | `${number}`, length: number) => {\n const raw = typeof key === 'number' ? key : Number(key);\n if (Number.isNaN(raw)) {\n return -1;\n }\n if (raw < 0) {\n return length + raw;\n }\n return raw;\n};\n\nconst isObjectLike = (value: unknown): value is Record<PropertyKey, unknown> =>\n value !== null && typeof value === 'object';\n\ntype DissocPath = {\n <T = unknown>(...args: [pathArray: PathKey[]]): (obj: T) => T;\n <T = unknown>(...args: [pathArray: PathKey[], obj: T]): T;\n};\n\n/**\n * dissocPath - 경로 기반 값 제거 (불변)\n */\nfunction dissocPath<T = unknown>(pathArray: PathKey[], obj: T): T {\n if (pathArray.length === 0) {\n return obj;\n }\n\n if (!isObjectLike(obj)) {\n return obj;\n }\n\n const [key, ...rest] = pathArray;\n\n if (Array.isArray(obj) && isIndexKey(key)) {\n const index = normalizeIndex(key, obj.length);\n if (index < 0 || index >= obj.length) {\n return obj;\n }\n\n const result = obj.slice();\n if (rest.length === 0) {\n result.splice(index, 1);\n return result as unknown as T;\n }\n\n const nextValue = dissocPath(rest, result[index]);\n result[index] = nextValue;\n return result as unknown as T;\n }\n\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n return obj;\n }\n\n if (rest.length === 0) {\n const { [key]: _removed, ...restObj } = obj as Record<PropertyKey, unknown>;\n return restObj as T;\n }\n\n const result = { ...(obj as object) } as Record<PropertyKey, unknown>;\n result[key] = dissocPath(rest, result[key]);\n return result as T;\n}\n\nconst curriedDissocPath = curry(dissocPath) as DissocPath;\nexport default curriedDissocPath;\nexport type { PathKey };\n","import curry from '../composition/curry';\n\ntype Merge = {\n <T>(...args: [obj1: T]): <U>(obj2: U) => T & U;\n <T, U>(...args: [obj1: T, obj2: U]): T & U;\n};\n\n/**\n * merge - 객체 병합 (얕은 병합)\n */\nfunction merge<T, U>(obj1: T, obj2: U): T & U {\n return {\n ...(obj1 as object),\n ...(obj2 as object),\n } as T & U;\n}\n\nconst curriedMerge = curry(merge) as Merge;\nexport default curriedMerge;\n","import curry from '../composition/curry';\n\ntype MergeDeep = {\n <T>(...args: [obj1: T]): <U>(obj2: U) => T & U;\n <T, U>(...args: [obj1: T, obj2: U]): T & U;\n};\n\n/**\n * mergeDeep - 깊은 객체 병합\n */\nfunction mergeDeep<T, U>(obj1: T, obj2: U): T & U {\n const isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n const mergeObjects = (left: Record<string, unknown>, right: Record<string, unknown>) => {\n const result: Record<string, unknown> = { ...left };\n\n for (const [key, value] of Object.entries(right)) {\n const existing = result[key];\n if (isPlainObject(existing) && isPlainObject(value)) {\n result[key] = mergeObjects(existing, value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n };\n\n if (isPlainObject(obj1) && isPlainObject(obj2)) {\n return mergeObjects(obj1, obj2) as T & U;\n }\n\n return {\n ...(obj1 as object),\n ...(obj2 as object),\n } as T & U;\n}\n\nconst curriedMergeDeep = curry(mergeDeep) as MergeDeep;\nexport default curriedMergeDeep;\n","/**\n * mergeAll - 객체 배열 병합 (얕은 병합)\n */\nfunction mergeAll<T extends object>(objects: T[]): T {\n const merged = objects.reduce<Record<string, unknown>>(\n (acc, obj) => ({ ...acc, ...(obj as Record<string, unknown>) }),\n {}\n );\n return merged as T;\n}\n\nexport default mergeAll;\n","/**\n * keys - 객체 키 배열\n */\nfunction keys<T extends object>(obj: T): Array<keyof T> {\n return Object.keys(obj) as Array<keyof T>;\n}\n\nexport default keys;\n","/**\n * values - 객체 값 배열\n */\nfunction values<T extends object>(obj: T): Array<T[keyof T]> {\n return Object.values(obj) as Array<T[keyof T]>;\n}\n\nexport default values;\n","/**\n * entries - 객체 엔트리 배열\n */\nfunction entries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]> {\n return Object.entries(obj) as Array<[keyof T, T[keyof T]]>;\n}\n\nexport default entries;\n","/**\n * mapValues - 값만 변환\n */\nfunction mapValues<T extends object, R>(\n fn: (value: T[keyof T]) => R\n): (obj: T) => Record<keyof T, R> {\n return (obj: T) => {\n const result: Record<keyof T, R> = {} as Record<keyof T, R>;\n for (const [key, value] of Object.entries(obj) as Array<[keyof T, T[keyof T]]>) {\n result[key] = fn(value);\n }\n return result;\n };\n}\n\nexport default mapValues;\n","import curry from '../composition/curry';\n\ntype Evolve = {\n (\n transformations: Partial<Record<PropertyKey, (value: any) => any>>\n ): <T extends object>(obj: T) => T;\n <T extends object>(\n transformations: Partial<{ [K in keyof T]: (value: T[K]) => any }>,\n obj: T\n ): T;\n};\n\n/**\n * evolve - 구조 기반 변환\n */\nfunction evolve<T extends object>(\n transformations: Partial<{ [K in keyof T]: (value: T[K]) => any }>,\n obj: T\n): T {\n const result = { ...(obj as object) } as T;\n for (const key of Object.keys(transformations) as Array<keyof T>) {\n const transformer = transformations[key];\n if (typeof transformer === 'function') {\n result[key] = transformer(obj[key]);\n }\n }\n return result;\n}\n\nconst curriedEvolve = curry(evolve) as Evolve;\nexport default curriedEvolve;\n","import curry from '../composition/curry';\n\ntype Has = {\n <K extends PropertyKey>(...args: [key: K]): <T extends Record<K, unknown>>(obj: T) => boolean;\n <T extends object>(...args: [key: keyof T, obj: T]): boolean;\n};\n\n/**\n * has - 속성 존재 확인\n */\nfunction has<T extends object>(key: keyof T, obj: T): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nconst curriedHas = curry(has) as Has;\nexport default curriedHas;\n","/**\n * hasPath - 깊은 경로 존재 확인\n */\nfunction hasPath(pathArray: string[]): (obj: any) => boolean {\n return (obj: any) => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null || !Object.prototype.hasOwnProperty.call(current, key)) {\n return false;\n }\n current = current[key];\n }\n return true;\n };\n}\n\nexport default hasPath;\n","import curry from '../composition/curry';\n\n/** equals - 깊은 비교 */\nfunction equals(a: any, b: any): boolean {\n return deepEqual(a, b, new WeakMap());\n}\n\nfunction deepEqual(a: any, b: any, seen: WeakMap<object, object>): boolean {\n if (a === b) return true;\n\n // Handle NaN\n if (typeof a === 'number' && typeof b === 'number') {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n // Prevent circular reference issues\n if (seen.has(a)) return seen.get(a) === b;\n seen.set(a, b);\n\n // Date\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n // Map\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n const bEntries = Array.from(b.entries());\n for (const [aKey, aVal] of a.entries()) {\n let found = false;\n for (let i = 0; i < bEntries.length; i++) {\n const [bKey, bVal] = bEntries[i];\n if (deepEqual(aKey, bKey, seen) && deepEqual(aVal, bVal, seen)) {\n bEntries.splice(i, 1);\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n // Set\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n const bValues = Array.from(b.values());\n for (const aVal of a.values()) {\n let found = false;\n for (let i = 0; i < bValues.length; i++) {\n if (deepEqual(aVal, bValues[i], seen)) {\n bValues.splice(i, 1);\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n // Array\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], seen)) return false;\n }\n return true;\n }\n\n // Object (including symbol keys)\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n\nexport default curry(equals);\n","/** isNil - null or undefined 체크 */\nfunction isNil(value: any): boolean {\n return value === null || value === undefined;\n}\nexport default isNil;\n","/** isEmpty - 비어있는지 검사 */\nfunction isEmpty(value: any): boolean {\n if (value == null) return true;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n}\nexport default isEmpty;\n","/** isType - 타입 체크 유틸 */\nfunction isType(type: string): (value: any) => boolean {\n const target = type.toLowerCase();\n return (value: any) => {\n if (value === null) return target === 'null';\n if (value === undefined) return target === 'undefined';\n const actual = typeof value;\n if (actual !== 'object') return actual === target;\n const tag = Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); // e.g., 'array', 'date'\n return tag === target;\n };\n}\nexport default isType;\n","/** gt - 초과 비교 */\nfunction gt(a: number): (b: number) => boolean {\n return (b: number) => b > a;\n}\nexport default gt;\n","/** gte - 이상 비교 */\nfunction gte(a: number): (b: number) => boolean {\n return (b: number) => b >= a;\n}\nexport default gte;\n","/** lt - 미만 비교 */\nfunction lt(a: number): (b: number) => boolean {\n return (b: number) => b < a;\n}\nexport default lt;\n","/** lte - 이하 비교 */\nfunction lte(a: number): (b: number) => boolean {\n return (b: number) => b <= a;\n}\nexport default lte;\n","import curry from '../composition/curry';\n\n/** clamp - 범위 제한 */\nfunction clamp(min: number, max: number, value: number): number {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n}\nexport default curry(clamp);\n","/** includes - 동등성 기반 포함 여부 (문자열 또는 배열) */\nimport equals from './equals';\n\nfunction includes(search: string, target: string): boolean;\nfunction includes<T>(search: T, target: T[]): boolean;\nfunction includes(search: any, target: any): boolean {\n if (typeof target === 'string' && typeof search === 'string') {\n return target.includes(search);\n }\n\n if (Array.isArray(target)) {\n for (let i = 0; i < target.length; i++) {\n if (equals(target[i], search)) return true;\n }\n return false;\n }\n\n return false;\n}\n\nexport default includes;\n","import curry from '../composition/curry';\n\n/** add - 덧셈 */\nfunction add(a: number, b: number): number {\n return a + b;\n}\nexport default curry(add);\n","import curry from '../composition/curry';\n\n/** sub - 뺄셈 */\nfunction sub(a: number, b: number): number {\n return a - b;\n}\nexport default curry(sub);\n","import curry from '../composition/curry';\n\n/** mul - 곱셈 */\nfunction mul(a: number, b: number): number {\n return a * b;\n}\nexport default curry(mul);\n","import curry from '../composition/curry';\n\n/** div - 나눗셈 */\nfunction div(a: number, b: number): number {\n return a / b;\n}\nexport default curry(div);\n","/** sum - 합계 */\nfunction sum(arr: number[]): number {\n return arr.reduce((total, value) => total + value, 0);\n}\nexport default sum;\n","/** mean - 평균 */\nfunction mean(arr: number[]): number {\n if (arr.length === 0) return NaN;\n const total = arr.reduce((acc, value) => acc + value, 0);\n return total / arr.length;\n}\nexport default mean;\n","/** min - 최소값 */\nfunction min(arr: number[]): number {\n if (arr.length === 0) return Infinity;\n return Math.min(...arr);\n}\nexport default min;\n","/** max - 최대값 */\nfunction max(arr: number[]): number {\n if (arr.length === 0) return -Infinity;\n return Math.max(...arr);\n}\nexport default max;\n","/** round - 반올림 */\nfunction round(value: number): number {\n return Math.round(value);\n}\nexport default round;\n","/** floor - 내림 */\nfunction floor(value: number): number {\n return Math.floor(value);\n}\nexport default floor;\n","/** ceil - 올림 */\nfunction ceil(value: number): number {\n return Math.ceil(value);\n}\nexport default ceil;\n","import curry from '../composition/curry';\n\n/** randomInt - 범위 랜덤 정수 */\nfunction randomInt(min: number, max: number): number {\n const lower = Math.ceil(min);\n const upper = Math.floor(max);\n\n if (upper < lower) {\n return lower;\n }\n\n return Math.floor(Math.random() * (upper - lower + 1)) + lower;\n}\nexport default curry(randomInt);\n","/** trim - 공백 제거 */\nfunction trim(str: string): string {\n return str.trim();\n}\nexport default trim;\n","import curry from '../composition/curry';\n\n/** split - 문자열 분할 */\nfunction split(separator: string, str: string): string[] {\n return str.split(separator);\n}\nexport default curry(split);\n","import curry from '../composition/curry';\n\n/** join - 배열 결합 */\nfunction join(separator: string, arr: string[]): string {\n return arr.join(separator);\n}\nexport default curry(join);\n","import curry from '../composition/curry';\n\n/** replace - 부분 치환 */\nfunction replace(pattern: string | RegExp, replacement: string, str: string): string {\n return str.replace(pattern, replacement);\n}\nexport default curry(replace);\n","/** toUpper - 대문자 변환 */\nfunction toUpper(str: string): string {\n return str.toUpperCase();\n}\nexport default toUpper;\n","/** toLower - 소문자 변환 */\nfunction toLower(str: string): string {\n return str.toLowerCase();\n}\nexport default toLower;\n","/** startsWith - 시작 문자열/배열 확인 */\nfunction startsWith(prefix: string, str: string): boolean;\nfunction startsWith<T>(prefix: T[], arr: T[]): boolean;\nfunction startsWith(prefix: string | any[], target: string | any[]): boolean {\n if (typeof target === 'string' && typeof prefix === 'string') {\n return target.startsWith(prefix);\n }\n\n if (Array.isArray(prefix) && Array.isArray(target)) {\n if (prefix.length === 0) return true;\n if (prefix.length > target.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (target[i] !== prefix[i]) return false;\n }\n return true;\n }\n\n return false;\n}\nexport default startsWith;\n","/** endsWith - 끝 문자열/배열 확인 */\nfunction endsWith(suffix: string, str: string): boolean;\nfunction endsWith<T>(suffix: T[], arr: T[]): boolean;\nfunction endsWith(suffix: string | any[], target: string | any[]): boolean {\n if (typeof target === 'string' && typeof suffix === 'string') {\n return target.endsWith(suffix);\n }\n\n if (Array.isArray(suffix) && Array.isArray(target)) {\n if (suffix.length === 0) return true;\n if (suffix.length > target.length) return false;\n for (let i = 0; i < suffix.length; i++) {\n const targetIdx = target.length - suffix.length + i;\n if (target[targetIdx] !== suffix[i]) return false;\n }\n return true;\n }\n\n return false;\n}\nexport default endsWith;\n","import curry from '../composition/curry';\n\n/** match - 정규식 매칭 */\nfunction match(pattern: RegExp, str: string): RegExpMatchArray | null {\n return str.match(pattern);\n}\nexport default curry(match);\n","import type { FromFn } from '../composition/from';\n\n/** pipeAsync - 비동기 함수 합성 */\ntype AsyncOrSync<A, R> = (a: A) => R | Promise<R>;\ntype ZeroFn<R> = () => R | Promise<R>;\ntype PipeInput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<infer A, any>, ...AsyncOrSync<any, any>[]]\n ? A\n : never;\ntype PipeOutput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? Awaited<R>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<Awaited<R>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype PipeAsync<Fns extends AsyncOrSync<any, any>[]> = (input: PipeInput<Fns>) => Promise<PipeOutput<Fns>>;\ntype PipeAsyncFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (\n input?: PipeInput<Fns>\n) => Promise<PipeOutput<Fns>>;\n\nfunction pipeAsync<R>(ab: ZeroFn<R>): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, R>(ab: ZeroFn<B>, bc: AsyncOrSync<Awaited<B>, R>): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): () => Promise<Awaited<R>>;\nfunction pipeAsync<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsyncFrom<Fns>;\nfunction pipeAsync<A, R>(ab: AsyncOrSync<A, R>): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, R>(ab: AsyncOrSync<A, B>, bc: AsyncOrSync<Awaited<B>, R>): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): (a: A) => Promise<Awaited<R>>;\nfunction pipeAsync<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): (a: A) => Promise<Awaited<R>>;\n\nfunction pipeAsync<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(...funcs: Fns): PipeAsync<Fns>;\nfunction pipeAsync(...funcs: Array<AsyncOrSync<any, any>>): (value: any) => Promise<any>;\nfunction pipeAsync(...funcs: Array<(arg: any) => any>) {\n return async (value: any) => {\n let acc = value;\n for (const fn of funcs) {\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsync;\n","import type { FromFn } from '../composition/from';\nimport SideEffect, { isSideEffect } from '../composition/sideEffect';\n\n/** pipeAsyncSideEffect - SideEffect를 허용하는 비동기 함수 합성 */\ntype MaybeSideEffect<T> = T | SideEffect<any>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype AsyncOrSync<A, R> = (a: A) => MaybeSideEffect<R> | Promise<MaybeSideEffect<R>>;\ntype ZeroFn<R> = () => MaybeSideEffect<R> | Promise<MaybeSideEffect<R>>;\ntype PipeInput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [\n AsyncOrSync<infer A, any>,\n ...AsyncOrSync<any, any>[]\n]\n ? A\n : never;\ntype PipeOutput<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? MaybeSideEffect<Awaited<R>>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<Awaited<NonSideEffect<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeOutput<Rest>\n : never\n : never;\ntype Resolve<T> = T extends infer R ? R : never;\ntype PipeAsyncSideEffect<Fns extends AsyncOrSync<any, any>[]> = (\n input: PipeInput<Fns> | SideEffect<any>\n) => Promise<Resolve<PipeOutput<Fns>>>;\ntype PipeAsyncSideEffectFrom<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]> = (\n input?: PipeInput<Fns> | SideEffect<any>\n) => Promise<Resolve<PipeOutput<Fns>>>;\n\nfunction pipeAsyncSideEffect<Fns extends [FromFn<any>, ...AsyncOrSync<any, any>[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffectFrom<Fns>;\nfunction pipeAsyncSideEffect<R>(ab: ZeroFn<R>): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): () => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, R>(\n ab: AsyncOrSync<A, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\nfunction pipeAsyncSideEffect<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<Awaited<B>, C>,\n cd: AsyncOrSync<Awaited<C>, D>,\n de: AsyncOrSync<Awaited<D>, E>,\n ef: AsyncOrSync<Awaited<E>, F>,\n fg: AsyncOrSync<Awaited<F>, G>,\n gh: AsyncOrSync<Awaited<G>, H>,\n hi: AsyncOrSync<Awaited<H>, I>,\n ij: AsyncOrSync<Awaited<I>, J>,\n jk: AsyncOrSync<Awaited<J>, R>\n): (a: A | SideEffect<any>) => Promise<MaybeSideEffect<Awaited<R>>>;\n\nfunction pipeAsyncSideEffect<Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffect<Fns>;\nfunction pipeAsyncSideEffect(...funcs: Array<AsyncOrSync<any, any>>): (value: any) => Promise<any>;\nfunction pipeAsyncSideEffect(...funcs: Array<(arg: any) => any>) {\n return async (value: any) => {\n let acc = value;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsyncSideEffect;\n","import type { FromFn } from '../composition/from';\nimport SideEffect, { isSideEffect } from '../composition/sideEffect';\n\ntype AnyFn = (...args: any[]) => any;\ntype MaybeSideEffect<T, E> = T | SideEffect<E>;\ntype NonSideEffect<T> = Exclude<T, SideEffect<any>>;\ntype AsyncOrSync<A, R> = (a: A) => R | Promise<R>;\ntype ZeroFn<R> = () => R | Promise<R>;\n\ntype EffectOfReturn<R> = R extends SideEffect<infer E> ? E : never;\ntype EffectOfFn<F> = F extends (...args: any[]) => infer R ? EffectOfReturn<Awaited<R>> : never;\ntype EffectsOf<Fns extends AnyFn[]> = EffectOfFn<Fns[number]>;\n\ntype PipeValueOutputUnary<Fns extends AsyncOrSync<any, any>[]> = Fns extends [AsyncOrSync<any, infer R>]\n ? NonSideEffect<Awaited<R>>\n : Fns extends [AsyncOrSync<any, infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<NonSideEffect<Awaited<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : never;\n\ntype PipeValueOutputStrict<Fns extends [AnyFn, ...AnyFn[]]> =\n Fns extends [ZeroFn<infer R>]\n ? NonSideEffect<Awaited<R>>\n : Fns extends [ZeroFn<infer R>, ...infer Rest]\n ? Rest extends [AsyncOrSync<NonSideEffect<Awaited<R>>, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Rest>\n : never\n : Fns extends [AsyncOrSync<any, any>, ...AsyncOrSync<any, any>[]]\n ? PipeValueOutputUnary<Fns>\n : never;\n\ntype PipeInputStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? never\n : Fns extends [AsyncOrSync<infer A, any>, ...AnyFn[]]\n ? A\n : never;\n\ntype Resolve<T> = T extends infer R ? R : never;\n\ntype PipeAsyncSideEffectStrictUnary<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input: PipeInputStrict<Fns>): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>;\n <EIn>(\n input: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;\n};\ntype PipeAsyncSideEffectStrictUnaryOptional<Fns extends [AnyFn, ...AnyFn[]]> = {\n (input?: PipeInputStrict<Fns>): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>;\n <EIn>(\n input?: PipeInputStrict<Fns> | SideEffect<EIn>\n ): Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns> | EIn>>>;\n};\n\ntype PipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]> = Fns extends [ZeroFn<any>, ...AnyFn[]]\n ? () => Promise<Resolve<MaybeSideEffect<PipeValueOutputStrict<Fns>, EffectsOf<Fns>>>>\n : PipeAsyncSideEffectStrictUnary<Fns>;\n\nfunction pipeAsyncSideEffectStrict<R>(ab: ZeroFn<R>): PipeAsyncSideEffectStrict<[ZeroFn<R>]>;\nfunction pipeAsyncSideEffectStrict<B, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, R>\n): PipeAsyncSideEffectStrict<[ZeroFn<B>, AsyncOrSync<NonSideEffect<Awaited<B>>, R>]>;\nfunction pipeAsyncSideEffectStrict<B, C, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n): PipeAsyncSideEffectStrict<[ZeroFn<B>, AsyncOrSync<NonSideEffect<Awaited<B>>, C>, AsyncOrSync<NonSideEffect<Awaited<C>>, R>]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<B, C, D, E, F, G, H, I, J, R>(\n ab: ZeroFn<B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n): PipeAsyncSideEffectStrict<[\n ZeroFn<B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<Fns extends [FromFn<any>, ...AnyFn[]]>(\n ...funcs: Fns\n): PipeAsyncSideEffectStrictUnaryOptional<Fns>;\nfunction pipeAsyncSideEffectStrict<A, R>(\n ab: AsyncOrSync<A, R>\n): PipeAsyncSideEffectStrict<[AsyncOrSync<A, R>]>;\nfunction pipeAsyncSideEffectStrict<A, B, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, R>\n): PipeAsyncSideEffectStrict<[AsyncOrSync<A, B>, AsyncOrSync<NonSideEffect<Awaited<B>>, R>]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, R>\n]>;\nfunction pipeAsyncSideEffectStrict<A, B, C, D, E, F, G, H, I, J, R>(\n ab: AsyncOrSync<A, B>,\n bc: AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n cd: AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n de: AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n ef: AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n fg: AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n gh: AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n hi: AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n ij: AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n jk: AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n): PipeAsyncSideEffectStrict<[\n AsyncOrSync<A, B>,\n AsyncOrSync<NonSideEffect<Awaited<B>>, C>,\n AsyncOrSync<NonSideEffect<Awaited<C>>, D>,\n AsyncOrSync<NonSideEffect<Awaited<D>>, E>,\n AsyncOrSync<NonSideEffect<Awaited<E>>, F>,\n AsyncOrSync<NonSideEffect<Awaited<F>>, G>,\n AsyncOrSync<NonSideEffect<Awaited<G>>, H>,\n AsyncOrSync<NonSideEffect<Awaited<H>>, I>,\n AsyncOrSync<NonSideEffect<Awaited<I>>, J>,\n AsyncOrSync<NonSideEffect<Awaited<J>>, R>\n]>;\n\nfunction pipeAsyncSideEffectStrict<Fns extends [AnyFn, ...AnyFn[]]>(...funcs: Fns): PipeAsyncSideEffectStrict<Fns>;\nfunction pipeAsyncSideEffectStrict(...funcs: Array<AsyncOrSync<any, any>>) {\n return async (value?: any) => {\n let acc = value;\n for (const fn of funcs) {\n if (isSideEffect(acc)) {\n return acc;\n }\n acc = await fn(acc);\n }\n return acc;\n };\n}\n\nexport default pipeAsyncSideEffectStrict;\n","/** delay - 일정 시간 대기 */\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\nexport default delay;\n","import curry from '../composition/curry';\n\ntype Timeout = {\n (ms: number): <T>(promise: Promise<T>) => Promise<T>;\n <T>(...args: [ms: number, promise: Promise<T>]): Promise<T>;\n};\n\n/** timeout - 제한 시간 내 실행 */\nfunction timeout<T>(ms: number, promise: Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error(`Timed out after ${ms}ms`)), ms);\n promise\n .then((val) => {\n clearTimeout(timer);\n resolve(val);\n })\n .catch((err) => {\n clearTimeout(timer);\n reject(err);\n });\n });\n}\nconst curriedTimeout = curry(timeout) as Timeout;\nexport default curriedTimeout;\n","/** retry - 실패 시 재시도 (옵션 대기 시간 포함) */\nimport delay from './delay';\nimport curry from '../composition/curry';\n\ntype Retry = {\n (times: number): <T>(fn: () => Promise<T>, delayMs?: number) => Promise<T>;\n <T>(...args: [times: number, fn: () => Promise<T>, delayMs?: number]): Promise<T>;\n};\n\nfunction retry<T>(times: number, fn: () => Promise<T>, delayMs = 0): Promise<T> {\n return (async () => {\n let attempt = 0;\n while (true) {\n try {\n return await fn();\n } catch (err) {\n attempt += 1;\n if (attempt > times) throw err;\n if (delayMs > 0) {\n await delay(delayMs);\n }\n }\n }\n })();\n}\nconst curriedRetry = curry(retry) as Retry;\nexport default curriedRetry;\n","import curry from '../composition/curry';\n\ntype Debounce = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounce - 호출 제어 (디바운스) */\nfunction debounce<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (timer) {\n clearTimeout(timer);\n }\n const context = this;\n timer = setTimeout(() => {\n timer = undefined;\n fn.apply(context, args);\n }, ms);\n };\n\n return debounced as T;\n}\nconst curriedDebounce = curry(debounce) as Debounce;\nexport default curriedDebounce;\n","import curry from '../composition/curry';\n\ntype DebounceLeading = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounceLeading - 첫 호출만 실행하는 디바운스 */\nfunction debounceLeading<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (!timer) {\n fn.apply(this, args);\n timer = setTimeout(() => {\n timer = undefined;\n }, ms);\n }\n };\n\n return debounced as T;\n}\n\nconst curriedDebounceLeading = curry(debounceLeading) as DebounceLeading;\nexport default curriedDebounceLeading;\n","import curry from '../composition/curry';\n\ntype DebounceLeadingTrailing = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** debounceLeadingTrailing - 처음과 마지막에만 실행하는 디바운스 */\nfunction debounceLeadingTrailing<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pending = false;\n let lastArgs: Parameters<T> | undefined;\n let lastThis: unknown;\n\n const flush = () => {\n timer = undefined;\n if (pending && lastArgs) {\n pending = false;\n fn.apply(lastThis, lastArgs);\n }\n };\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (!timer) {\n fn.apply(this, args);\n timer = setTimeout(flush, ms);\n return;\n }\n\n pending = true;\n lastArgs = args;\n lastThis = this;\n clearTimeout(timer);\n timer = setTimeout(flush, ms);\n };\n\n return debounced as T;\n}\n\nconst curriedDebounceLeadingTrailing = curry(debounceLeadingTrailing) as DebounceLeadingTrailing;\nexport default curriedDebounceLeadingTrailing;\n","import curry from '../composition/curry';\n\ntype Throttle = {\n <T extends (...args: any[]) => any>(...args: [fn: T]): (ms: number) => T;\n <T extends (...args: any[]) => any>(...args: [fn: T, ms: number]): T;\n};\n\n/** throttle - 호출 제어 (쓰로틀) */\nfunction throttle<T extends (...args: any[]) => any>(fn: T, ms: number): T {\n let lastCall = 0;\n let trailingArgs: any[] | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const invoke = (ctx: any, args: any[]) => {\n lastCall = Date.now();\n fn.apply(ctx, args);\n };\n\n const throttled = function (this: any, ...args: any[]) {\n const now = Date.now();\n const remaining = ms - (now - lastCall);\n\n if (remaining <= 0) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n trailingArgs = null;\n invoke(this, args);\n } else {\n trailingArgs = args;\n if (!timeoutId) {\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (trailingArgs) {\n invoke(this, trailingArgs);\n trailingArgs = null;\n }\n }, remaining);\n }\n }\n } as T;\n\n return throttled;\n}\nconst curriedThrottle = curry(throttle) as Throttle;\nexport default curriedThrottle;\n","/** maybe - null-safe 연산 */\nfunction maybe<T, R>(fn: (value: T) => R): (value: T | null | undefined) => R | null {\n return (value: T | null | undefined) => {\n if (value === null || value === undefined) {\n return null;\n }\n return fn(value);\n };\n}\nexport default maybe;\n","/** mapMaybe - 값이 있는 항목만 변환 */\nfunction mapMaybe<T, R>(\n fn: (value: T) => R | null | undefined\n): (values: T[]) => R[] {\n return (values: T[]) => {\n const results: R[] = [];\n\n for (const value of values) {\n const mapped = fn(value);\n if (mapped !== null && mapped !== undefined) {\n results.push(mapped);\n }\n }\n\n return results;\n };\n}\nexport default mapMaybe;\n","/** getOrElse - 기본값 제공 */\nfunction getOrElse<T>(defaultValue: T): (value: T | null | undefined) => T {\n return (value: T | null | undefined) => {\n if (value === null || value === undefined) {\n return defaultValue;\n }\n return value;\n };\n}\nexport default getOrElse;\n","/** result - 성공 / 실패 래핑 */\nfunction result<T, E = Error>(fn: () => T): { ok: true; value: T } | { ok: false; error: E } {\n // TODO: implement\n try {\n return { ok: true, value: fn() };\n } catch (error) {\n return { ok: false, error: error as E };\n }\n}\nexport default result;\n","import curry from '../composition/curry';\n\ntype Fold = {\n <R>(...args: [onNone: () => R]): <T>(\n onSome: (value: T) => R\n ) => (value: T | null | undefined) => R;\n <T, R>(\n ...args: [onNone: () => R, onSome: (value: T) => R]\n ): (value: T | null | undefined) => R;\n <T, R>(\n ...args: [onNone: () => R, onSome: (value: T) => R, value: T | null | undefined]\n ): R;\n};\n\n/** fold - Maybe/Result 처리 */\nfunction fold<T, R>(\n onNone: () => R,\n onSome: (value: T) => R,\n value: T | null | undefined\n): R {\n if (value === null || value === undefined) {\n return onNone();\n }\n return onSome(value);\n}\nconst curriedFold = curry(fold) as Fold;\nexport default curriedFold;\n","import curry from '../composition/curry';\n\n/** assert - 조건 검증 */\nfunction assert(condition: boolean, message: string | undefined): void {\n if (!condition) {\n throw new Error(message ?? 'Assertion failed');\n }\n}\nexport default curry(assert);\n","import curry from '../composition/curry';\n\n/** invariant - 계약 위반 체크 */\nfunction invariant(condition: boolean, message: string | undefined): void {\n if (!condition) {\n throw new Error(message ?? 'Invariant failed');\n }\n}\nexport default curry(invariant);\n","/** log - tap 기반 로깅 */\nfunction log<T>(label?: string): (value: T) => T {\n return (value: T) => {\n if (label) {\n console.log(label, value);\n } else {\n console.log(value);\n }\n return value;\n };\n}\nexport default log;\n"],"names":["pipe","funcs","init","acc","fn","SideEffect","effect","label","matchSideEffect","result","handlers","runPipeResult","isSideEffect","value","pipeSideEffect","pipeSideEffectStrict","compose","curry","args","curried","accumulated","nextArgs","partial","preset","rest","all","flip","reversed","complement","predicate","identity","x","constant","from","_input","tap","tap0","once","called","memoize","cache","RESULT","node","arg","ifElse","onTrue","onFalse","curriedIfElse","when","curriedWhen","unless","curriedUnless","cond","conditions","handler","tryCatch","tryFn","catchFn","err","error","curriedTryCatch","guard","defaultValue","curriedGuard","map","arr","curriedMap","filter","curriedFilter","reduce","initial","curriedReduce","flatMap","curriedFlatMap","find","curriedFind","some","i","curriedSome","every","curriedEvery","take","curriedTake","drop","count","curriedDrop","dropWhile","dropping","item","curriedDropWhile","chunk","size","chunkSize","curriedChunk","zip","arr2","arr1","length","curriedZip","zipWith","other","curriedZipWith","unzip","left","right","a","b","uniq","seen","uniqBy","key","curriedUniqBy","sortBy","aKey","bKey","curriedSortBy","sort","compare","curriedSort","groupBy","curriedGroupBy","zipIndex","index","takeWhile","curriedTakeWhile","scan","curriedScan","concat","curriedConcat","append","curriedAppend","prepend","curriedPrepend","flatten","head","tail","last","range","start","end","step","partition","truthy","falsy","curriedPartition","flattenDeep","walk","items","prop","obj","curriedProp","propStrict","curriedPropStrict","propOr","curriedPropOr","path","pathArray","current","curriedPath","pathOr","curriedPathOr","pick","keys","curriedPick","omit","curriedOmit","assoc","curriedAssoc","isIndexKey","normalizeIndex","raw","isObjectLike","assocPath","useArray","base","nextValue","curriedAssocPath","dissoc","_removed","dissocPath","restObj","curriedDissocPath","merge","obj1","obj2","curriedMerge","mergeDeep","isPlainObject","mergeObjects","existing","curriedMergeDeep","mergeAll","objects","values","entries","mapValues","evolve","transformations","transformer","curriedEvolve","has","curriedHas","hasPath","equals","deepEqual","bEntries","aVal","found","bVal","bValues","aKeys","bKeys","equals$1","isNil","isEmpty","isType","type","target","actual","gt","gte","lt","lte","clamp","min","max","clamp_default","includes","search","add","add_default","sub","sub_default","mul","mul_default","div","div_default","sum","total","mean","round","floor","ceil","randomInt","lower","upper","randomInt_default","trim","str","split","separator","split_default","join","join_default","replace","pattern","replacement","replace_default","toUpper","toLower","startsWith","prefix","endsWith","suffix","targetIdx","match","match_default","pipeAsync","pipeAsyncSideEffect","pipeAsyncSideEffectStrict","delay","ms","resolve","timeout","promise","reject","timer","val","curriedTimeout","retry","times","delayMs","attempt","curriedRetry","debounce","context","curriedDebounce","debounceLeading","curriedDebounceLeading","debounceLeadingTrailing","pending","lastArgs","lastThis","flush","curriedDebounceLeadingTrailing","throttle","lastCall","trailingArgs","timeoutId","invoke","ctx","now","remaining","curriedThrottle","maybe","mapMaybe","results","mapped","getOrElse","fold","onNone","onSome","curriedFold","assert","condition","message","assert_default","invariant","invariant_default","log"],"mappings":"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"}