@mojir/dvala 0.0.7 → 0.0.10

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 (321) hide show
  1. package/dist/cli/cli.js +1622 -1620
  2. package/dist/cli/reference/examples.d.ts +1 -1
  3. package/dist/cli/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  4. package/dist/cli/src/{Dvala/Cache.d.ts → Cache.d.ts} +1 -1
  5. package/dist/cli/src/builtin/specialExpressions/functions.d.ts +1 -1
  6. package/dist/cli/src/createDvala.d.ts +47 -0
  7. package/dist/cli/src/evaluator/ContextStack.d.ts +10 -2
  8. package/dist/cli/src/evaluator/effectTypes.d.ts +24 -6
  9. package/dist/cli/src/evaluator/suspension.d.ts +6 -0
  10. package/dist/cli/src/evaluator/trampoline.d.ts +15 -1
  11. package/dist/cli/src/parser/subParsers/parseDo.d.ts +1 -1
  12. package/dist/cli/src/tokenizer/token.d.ts +2 -4
  13. package/dist/cli/src/tokenizer/tokenize.d.ts +1 -2
  14. package/dist/cli/src/tokenizer/tokenizers.d.ts +2 -3
  15. package/dist/cli/src/tooling.d.ts +51 -0
  16. package/dist/debug.esm.js +1 -1
  17. package/dist/debug.esm.js.map +1 -1
  18. package/dist/debug.js +1 -1
  19. package/dist/debug.js.map +1 -1
  20. package/dist/dvala.iife.js +1 -1
  21. package/dist/dvala.iife.js.map +1 -1
  22. package/dist/full.esm.js +1 -1
  23. package/dist/full.esm.js.map +1 -1
  24. package/dist/full.js +1 -1
  25. package/dist/full.js.map +1 -1
  26. package/dist/index.esm.js +1 -1
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp-server/common/utils.d.ts +2 -0
  31. package/dist/mcp-server/mcp-server/src/server.d.ts +1 -0
  32. package/dist/mcp-server/reference/api.d.ts +73 -0
  33. package/dist/mcp-server/reference/datatype.d.ts +3 -0
  34. package/dist/mcp-server/reference/examples.d.ts +11 -0
  35. package/dist/mcp-server/reference/index.d.ts +195 -0
  36. package/dist/mcp-server/reference/shorthand.d.ts +3 -0
  37. package/dist/mcp-server/server.js +36377 -0
  38. package/dist/mcp-server/src/AutoCompleter/AutoCompleter.d.ts +27 -0
  39. package/dist/{src/Dvala → mcp-server/src}/Cache.d.ts +1 -1
  40. package/dist/mcp-server/src/allModules.d.ts +2 -0
  41. package/dist/mcp-server/src/builtin/bindingNode.d.ts +11 -0
  42. package/dist/mcp-server/src/builtin/core/array.d.ts +2 -0
  43. package/dist/mcp-server/src/builtin/core/assertion.d.ts +2 -0
  44. package/dist/mcp-server/src/builtin/core/bitwise.d.ts +2 -0
  45. package/dist/mcp-server/src/builtin/core/collection.d.ts +2 -0
  46. package/dist/mcp-server/src/builtin/core/functional.d.ts +2 -0
  47. package/dist/mcp-server/src/builtin/core/math.d.ts +2 -0
  48. package/dist/mcp-server/src/builtin/core/meta.d.ts +3 -0
  49. package/dist/mcp-server/src/builtin/core/misc.d.ts +2 -0
  50. package/dist/mcp-server/src/builtin/core/object.d.ts +2 -0
  51. package/dist/mcp-server/src/builtin/core/predicates.d.ts +2 -0
  52. package/dist/mcp-server/src/builtin/core/regexp.d.ts +2 -0
  53. package/dist/mcp-server/src/builtin/core/sequence.d.ts +2 -0
  54. package/dist/mcp-server/src/builtin/core/string.d.ts +2 -0
  55. package/dist/mcp-server/src/builtin/core/vector.d.ts +2 -0
  56. package/dist/mcp-server/src/builtin/index.d.ts +13 -0
  57. package/dist/mcp-server/src/builtin/interface.d.ts +113 -0
  58. package/dist/mcp-server/src/builtin/modules/assertion/docs.d.ts +2 -0
  59. package/dist/mcp-server/src/builtin/modules/assertion/index.d.ts +2 -0
  60. package/dist/mcp-server/src/builtin/modules/bitwise/index.d.ts +2 -0
  61. package/dist/mcp-server/src/builtin/modules/collection/index.d.ts +2 -0
  62. package/dist/mcp-server/src/builtin/modules/convert/index.d.ts +2 -0
  63. package/dist/mcp-server/src/builtin/modules/functional/index.d.ts +2 -0
  64. package/dist/mcp-server/src/builtin/modules/grid/docs.d.ts +2 -0
  65. package/dist/mcp-server/src/builtin/modules/grid/fromArray.d.ts +8 -0
  66. package/dist/mcp-server/src/builtin/modules/grid/index.d.ts +2 -0
  67. package/dist/mcp-server/src/builtin/modules/grid/transpose.d.ts +2 -0
  68. package/dist/mcp-server/src/builtin/modules/interface.d.ts +28 -0
  69. package/dist/mcp-server/src/builtin/modules/linear-algebra/docs.d.ts +2 -0
  70. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/calcFractionalRanks.d.ts +1 -0
  71. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/collinear.d.ts +2 -0
  72. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/corrleation.d.ts +8 -0
  73. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/covariance.d.ts +4 -0
  74. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/dot.d.ts +1 -0
  75. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/gaussJordanElimination.d.ts +7 -0
  76. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/getUnit.d.ts +2 -0
  77. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/isZeroVector.d.ts +1 -0
  78. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/kendallTau.d.ts +10 -0
  79. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/length.d.ts +1 -0
  80. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/pearsonCorr.d.ts +1 -0
  81. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/scale.d.ts +1 -0
  82. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/solve.d.ts +8 -0
  83. package/dist/mcp-server/src/builtin/modules/linear-algebra/helpers/subtract.d.ts +1 -0
  84. package/dist/mcp-server/src/builtin/modules/linear-algebra/index.d.ts +4 -0
  85. package/dist/mcp-server/src/builtin/modules/math/index.d.ts +2 -0
  86. package/dist/mcp-server/src/builtin/modules/matrix/docs.d.ts +2 -0
  87. package/dist/mcp-server/src/builtin/modules/matrix/helpers/adjugate.d.ts +1 -0
  88. package/dist/mcp-server/src/builtin/modules/matrix/helpers/band.d.ts +9 -0
  89. package/dist/mcp-server/src/builtin/modules/matrix/helpers/cofactor.d.ts +1 -0
  90. package/dist/mcp-server/src/builtin/modules/matrix/helpers/determinant.d.ts +6 -0
  91. package/dist/mcp-server/src/builtin/modules/matrix/helpers/inverse.d.ts +6 -0
  92. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isBanded.d.ts +11 -0
  93. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isDiagonal.d.ts +10 -0
  94. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isIdentity.d.ts +1 -0
  95. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isOrthogonal.d.ts +1 -0
  96. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isSquare.d.ts +1 -0
  97. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isSymetric.d.ts +8 -0
  98. package/dist/mcp-server/src/builtin/modules/matrix/helpers/isTriangular.d.ts +13 -0
  99. package/dist/mcp-server/src/builtin/modules/matrix/helpers/matrixMultiply.d.ts +7 -0
  100. package/dist/mcp-server/src/builtin/modules/matrix/helpers/minor.d.ts +1 -0
  101. package/dist/mcp-server/src/builtin/modules/matrix/helpers/norm1.d.ts +1 -0
  102. package/dist/mcp-server/src/builtin/modules/matrix/helpers/trace.d.ts +8 -0
  103. package/dist/mcp-server/src/builtin/modules/matrix/index.d.ts +4 -0
  104. package/dist/mcp-server/src/builtin/modules/number-theory/binomialCefficient.d.ts +1 -0
  105. package/dist/mcp-server/src/builtin/modules/number-theory/combinations.d.ts +2 -0
  106. package/dist/mcp-server/src/builtin/modules/number-theory/derangements.d.ts +2 -0
  107. package/dist/mcp-server/src/builtin/modules/number-theory/divisors.d.ts +4 -0
  108. package/dist/mcp-server/src/builtin/modules/number-theory/docs.d.ts +2 -0
  109. package/dist/mcp-server/src/builtin/modules/number-theory/factorial.d.ts +3 -0
  110. package/dist/mcp-server/src/builtin/modules/number-theory/index.d.ts +4 -0
  111. package/dist/mcp-server/src/builtin/modules/number-theory/partitions.d.ts +2 -0
  112. package/dist/mcp-server/src/builtin/modules/number-theory/permutations.d.ts +2 -0
  113. package/dist/mcp-server/src/builtin/modules/number-theory/powerSet.d.ts +2 -0
  114. package/dist/mcp-server/src/builtin/modules/number-theory/primeFactors.d.ts +11 -0
  115. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/abundant.d.ts +2 -0
  116. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/arithmetic.d.ts +2 -0
  117. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/bell.d.ts +1 -0
  118. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/bernoulli.d.ts +2 -0
  119. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/catalan.d.ts +1 -0
  120. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/collatz.d.ts +2 -0
  121. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/composite.d.ts +3 -0
  122. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/deficient.d.ts +2 -0
  123. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/factorial.d.ts +1 -0
  124. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/fibonacci.d.ts +1 -0
  125. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/geometric.d.ts +2 -0
  126. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/golomb.d.ts +2 -0
  127. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/happy.d.ts +2 -0
  128. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/index.d.ts +27 -0
  129. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/juggler.d.ts +2 -0
  130. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lookAndSay.d.ts +2 -0
  131. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lucas.d.ts +1 -0
  132. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/lucky.d.ts +2 -0
  133. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/mersenne.d.ts +1 -0
  134. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/padovan.d.ts +2 -0
  135. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/partition.d.ts +1 -0
  136. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/pell.d.ts +1 -0
  137. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfect.d.ts +1 -0
  138. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectCube.d.ts +2 -0
  139. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectPower.d.ts +10 -0
  140. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/perfectSquare.d.ts +2 -0
  141. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/poligonal.d.ts +2 -0
  142. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/prime.d.ts +3 -0
  143. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/recaman.d.ts +9 -0
  144. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/sylvester.d.ts +1 -0
  145. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/thueMorse.d.ts +2 -0
  146. package/dist/mcp-server/src/builtin/modules/number-theory/sequences/tribonacci.d.ts +1 -0
  147. package/dist/mcp-server/src/builtin/modules/sequence/index.d.ts +2 -0
  148. package/dist/mcp-server/src/builtin/modules/string/index.d.ts +2 -0
  149. package/dist/mcp-server/src/builtin/modules/vector/bincount.d.ts +9 -0
  150. package/dist/mcp-server/src/builtin/modules/vector/calcMad.d.ts +1 -0
  151. package/dist/mcp-server/src/builtin/modules/vector/calcMean.d.ts +1 -0
  152. package/dist/mcp-server/src/builtin/modules/vector/calcMedad.d.ts +1 -0
  153. package/dist/mcp-server/src/builtin/modules/vector/calcMedian.d.ts +1 -0
  154. package/dist/mcp-server/src/builtin/modules/vector/calcStdDev.d.ts +2 -0
  155. package/dist/mcp-server/src/builtin/modules/vector/calcVariance.d.ts +2 -0
  156. package/dist/mcp-server/src/builtin/modules/vector/docs.d.ts +2 -0
  157. package/dist/mcp-server/src/builtin/modules/vector/entropy.d.ts +8 -0
  158. package/dist/mcp-server/src/builtin/modules/vector/histogram.d.ts +9 -0
  159. package/dist/mcp-server/src/builtin/modules/vector/index.d.ts +2 -0
  160. package/dist/mcp-server/src/builtin/modules/vector/mode.d.ts +6 -0
  161. package/dist/mcp-server/src/builtin/modules/vector/outliers.d.ts +7 -0
  162. package/dist/mcp-server/src/builtin/modules/vector/percentile.d.ts +7 -0
  163. package/dist/mcp-server/src/builtin/modules/vector/quartiles.d.ts +1 -0
  164. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/entropy.d.ts +2 -0
  165. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/giniCoefficient.d.ts +2 -0
  166. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/index.d.ts +13 -0
  167. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/iqr.d.ts +2 -0
  168. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/kurtosis.d.ts +5 -0
  169. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/mad.d.ts +2 -0
  170. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/mean.d.ts +4 -0
  171. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/medad.d.ts +2 -0
  172. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/median.d.ts +2 -0
  173. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/prod.d.ts +2 -0
  174. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/rms.d.ts +2 -0
  175. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/skewness.d.ts +3 -0
  176. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/span.d.ts +2 -0
  177. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/standardDeviation.d.ts +3 -0
  178. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/sum.d.ts +2 -0
  179. package/dist/mcp-server/src/builtin/modules/vector/reductionFunctions/variance.d.ts +3 -0
  180. package/dist/mcp-server/src/builtin/normalExpressions/index.d.ts +9 -0
  181. package/dist/mcp-server/src/builtin/normalExpressions/initCoreDvala.d.ts +1 -0
  182. package/dist/mcp-server/src/builtin/specialExpressionTypes.d.ts +24 -0
  183. package/dist/mcp-server/src/builtin/specialExpressions/and.d.ts +6 -0
  184. package/dist/mcp-server/src/builtin/specialExpressions/array.d.ts +6 -0
  185. package/dist/mcp-server/src/builtin/specialExpressions/block.d.ts +7 -0
  186. package/dist/mcp-server/src/builtin/specialExpressions/cond.d.ts +6 -0
  187. package/dist/mcp-server/src/builtin/specialExpressions/defined.d.ts +5 -0
  188. package/dist/mcp-server/src/builtin/specialExpressions/effect.d.ts +5 -0
  189. package/dist/mcp-server/src/builtin/specialExpressions/functions.d.ts +6 -0
  190. package/dist/mcp-server/src/builtin/specialExpressions/if.d.ts +6 -0
  191. package/dist/mcp-server/src/builtin/specialExpressions/import.d.ts +6 -0
  192. package/dist/mcp-server/src/builtin/specialExpressions/let.d.ts +6 -0
  193. package/dist/mcp-server/src/builtin/specialExpressions/loop.d.ts +6 -0
  194. package/dist/mcp-server/src/builtin/specialExpressions/loops.d.ts +9 -0
  195. package/dist/mcp-server/src/builtin/specialExpressions/match.d.ts +7 -0
  196. package/dist/mcp-server/src/builtin/specialExpressions/object.d.ts +6 -0
  197. package/dist/mcp-server/src/builtin/specialExpressions/or.d.ts +6 -0
  198. package/dist/mcp-server/src/builtin/specialExpressions/parallel.d.ts +6 -0
  199. package/dist/mcp-server/src/builtin/specialExpressions/perform.d.ts +6 -0
  200. package/dist/mcp-server/src/builtin/specialExpressions/qq.d.ts +6 -0
  201. package/dist/mcp-server/src/builtin/specialExpressions/race.d.ts +6 -0
  202. package/dist/mcp-server/src/builtin/specialExpressions/recur.d.ts +5 -0
  203. package/dist/mcp-server/src/builtin/specialExpressions/unless.d.ts +6 -0
  204. package/dist/mcp-server/src/builtin/utils.d.ts +6 -0
  205. package/dist/mcp-server/src/bundler/interface.d.ts +15 -0
  206. package/dist/mcp-server/src/constants/constants.d.ts +19 -0
  207. package/dist/mcp-server/src/createDvala.d.ts +47 -0
  208. package/dist/mcp-server/src/errors.d.ts +24 -0
  209. package/dist/mcp-server/src/evaluator/ContextStack.d.ts +70 -0
  210. package/dist/mcp-server/src/evaluator/contentHash.d.ts +21 -0
  211. package/dist/mcp-server/src/evaluator/dedupSubTrees.d.ts +37 -0
  212. package/dist/mcp-server/src/evaluator/effectRef.d.ts +27 -0
  213. package/dist/mcp-server/src/evaluator/effectTypes.d.ts +199 -0
  214. package/dist/mcp-server/src/evaluator/frames.d.ts +513 -0
  215. package/dist/mcp-server/src/evaluator/interface.d.ts +14 -0
  216. package/dist/mcp-server/src/evaluator/standardEffects.d.ts +50 -0
  217. package/dist/mcp-server/src/evaluator/step.d.ts +175 -0
  218. package/dist/mcp-server/src/evaluator/suspension.d.ts +92 -0
  219. package/dist/mcp-server/src/evaluator/trampoline.d.ts +138 -0
  220. package/dist/mcp-server/src/getUndefinedSymbols/index.d.ts +7 -0
  221. package/dist/mcp-server/src/initReferenceData.d.ts +1 -0
  222. package/dist/mcp-server/src/interface.d.ts +7 -0
  223. package/dist/mcp-server/src/parser/ParserContext.d.ts +20 -0
  224. package/dist/mcp-server/src/parser/getPrecedence.d.ts +3 -0
  225. package/dist/mcp-server/src/parser/helpers.d.ts +19 -0
  226. package/dist/mcp-server/src/parser/index.d.ts +5 -0
  227. package/dist/mcp-server/src/parser/subParsers/parseArray.d.ts +3 -0
  228. package/dist/mcp-server/src/parser/subParsers/parseBindingTarget.d.ts +8 -0
  229. package/dist/mcp-server/src/parser/subParsers/parseCond.d.ts +4 -0
  230. package/dist/mcp-server/src/parser/subParsers/parseDo.d.ts +3 -0
  231. package/dist/mcp-server/src/parser/subParsers/parseExpression.d.ts +5 -0
  232. package/dist/mcp-server/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
  233. package/dist/mcp-server/src/parser/subParsers/parseFunction.d.ts +4 -0
  234. package/dist/mcp-server/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
  235. package/dist/mcp-server/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
  236. package/dist/mcp-server/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
  237. package/dist/mcp-server/src/parser/subParsers/parseLet.d.ts +4 -0
  238. package/dist/mcp-server/src/parser/subParsers/parseLoop.d.ts +4 -0
  239. package/dist/mcp-server/src/parser/subParsers/parseMatch.d.ts +4 -0
  240. package/dist/mcp-server/src/parser/subParsers/parseNumber.d.ts +3 -0
  241. package/dist/mcp-server/src/parser/subParsers/parseObject.d.ts +3 -0
  242. package/dist/mcp-server/src/parser/subParsers/parseOperand.d.ts +3 -0
  243. package/dist/mcp-server/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
  244. package/dist/mcp-server/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
  245. package/dist/mcp-server/src/parser/subParsers/parseString.d.ts +4 -0
  246. package/dist/mcp-server/src/parser/subParsers/parseSymbol.d.ts +3 -0
  247. package/dist/mcp-server/src/parser/types.d.ts +128 -0
  248. package/dist/mcp-server/src/tokenizer/minifyTokenStream.d.ts +4 -0
  249. package/dist/mcp-server/src/tokenizer/operators.d.ts +12 -0
  250. package/dist/mcp-server/src/tokenizer/reservedNames.d.ts +65 -0
  251. package/dist/mcp-server/src/tokenizer/token.d.ts +82 -0
  252. package/dist/mcp-server/src/tokenizer/tokenize.d.ts +7 -0
  253. package/dist/mcp-server/src/tokenizer/tokenizers.d.ts +13 -0
  254. package/dist/mcp-server/src/tooling.d.ts +51 -0
  255. package/dist/mcp-server/src/transformer/index.d.ts +2 -0
  256. package/dist/mcp-server/src/typeGuards/annotatedCollections.d.ts +16 -0
  257. package/dist/mcp-server/src/typeGuards/array.d.ts +9 -0
  258. package/dist/mcp-server/src/typeGuards/astNode.d.ts +19 -0
  259. package/dist/mcp-server/src/typeGuards/dvala.d.ts +26 -0
  260. package/dist/mcp-server/src/typeGuards/dvalaFunction.d.ts +9 -0
  261. package/dist/mcp-server/src/typeGuards/index.d.ts +7 -0
  262. package/dist/mcp-server/src/typeGuards/number.d.ts +66 -0
  263. package/dist/mcp-server/src/typeGuards/string.d.ts +15 -0
  264. package/dist/mcp-server/src/untokenizer/index.d.ts +2 -0
  265. package/dist/mcp-server/src/utils/arity.d.ts +10 -0
  266. package/dist/mcp-server/src/utils/debug/debugTools.d.ts +1 -0
  267. package/dist/mcp-server/src/utils/debug/getCodeMarker.d.ts +2 -0
  268. package/dist/mcp-server/src/utils/debug/getSourceCodeInfo.d.ts +2 -0
  269. package/dist/mcp-server/src/utils/docString/generateDocString.d.ts +4 -0
  270. package/dist/mcp-server/src/utils/getAssertionError.d.ts +3 -0
  271. package/dist/mcp-server/src/utils/index.d.ts +14 -0
  272. package/dist/mcp-server/src/utils/maybePromise.d.ts +54 -0
  273. package/dist/mcp-server/src/utils/symbols.d.ts +3 -0
  274. package/dist/modules/grid.esm.js +1 -1
  275. package/dist/modules/grid.esm.js.map +1 -1
  276. package/dist/modules/grid.js +1 -1
  277. package/dist/modules/grid.js.map +1 -1
  278. package/dist/modules/reference/index.d.ts +136 -136
  279. package/dist/modules/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  280. package/dist/modules/src/{Dvala/Cache.d.ts → Cache.d.ts} +1 -1
  281. package/dist/modules/src/builtin/specialExpressions/functions.d.ts +1 -1
  282. package/dist/modules/src/createDvala.d.ts +47 -0
  283. package/dist/modules/src/evaluator/ContextStack.d.ts +10 -2
  284. package/dist/modules/src/evaluator/effectTypes.d.ts +24 -6
  285. package/dist/modules/src/evaluator/suspension.d.ts +6 -0
  286. package/dist/modules/src/evaluator/trampoline.d.ts +15 -1
  287. package/dist/modules/src/index.d.ts +10 -5
  288. package/dist/modules/src/parser/subParsers/parseDo.d.ts +1 -1
  289. package/dist/modules/src/resume.d.ts +41 -0
  290. package/dist/modules/src/retrigger.d.ts +39 -0
  291. package/dist/modules/src/tokenizer/token.d.ts +2 -4
  292. package/dist/modules/src/tokenizer/tokenize.d.ts +1 -2
  293. package/dist/modules/src/tokenizer/tokenizers.d.ts +2 -3
  294. package/dist/modules/src/tooling.d.ts +51 -0
  295. package/dist/reference/index.d.ts +136 -136
  296. package/dist/src/AutoCompleter/AutoCompleter.d.ts +4 -2
  297. package/dist/src/Cache.d.ts +16 -0
  298. package/dist/src/builtin/specialExpressions/functions.d.ts +1 -1
  299. package/dist/src/createDvala.d.ts +47 -0
  300. package/dist/src/evaluator/ContextStack.d.ts +10 -2
  301. package/dist/src/evaluator/effectTypes.d.ts +24 -6
  302. package/dist/src/evaluator/suspension.d.ts +6 -0
  303. package/dist/src/evaluator/trampoline.d.ts +15 -1
  304. package/dist/src/index.d.ts +10 -5
  305. package/dist/src/parser/subParsers/parseDo.d.ts +1 -1
  306. package/dist/src/resume.d.ts +41 -0
  307. package/dist/src/retrigger.d.ts +39 -0
  308. package/dist/src/tokenizer/token.d.ts +2 -4
  309. package/dist/src/tokenizer/tokenize.d.ts +1 -2
  310. package/dist/src/tokenizer/tokenizers.d.ts +2 -3
  311. package/dist/src/tooling.d.ts +51 -0
  312. package/dist/testFramework.esm.js +1 -1
  313. package/dist/testFramework.esm.js.map +1 -1
  314. package/dist/testFramework.js +1 -1
  315. package/dist/testFramework.js.map +1 -1
  316. package/package.json +17 -6
  317. package/dist/cli/src/Dvala/Dvala.d.ts +0 -63
  318. package/dist/modules/src/Dvala/Dvala.d.ts +0 -63
  319. package/dist/modules/src/effects.d.ts +0 -110
  320. package/dist/src/Dvala/Dvala.d.ts +0 -63
  321. package/dist/src/effects.d.ts +0 -110
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){if(!e.position||!e.code)return"";const n=e.position.column-1,t=e.code.length-n-1;return`${" ".repeat(Math.max(n,0))}^${" ".repeat(Math.max(t,0))}`}class n extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,n.prototype),this.name="RecurSignal",this.params=e}}class t extends Error{sourceCodeInfo;shortMessage;constructor(n,r){const o=n instanceof Error?n.message:`${n}`;super(function(n,t){if(!t)return n;const r=`${t.position.line}:${t.position.column}`;return`${n}${t.filePath?`\n${t.filePath}:${r}`:`\nLocation ${r}`}\n${t.code}\n${e(t)}`}(o,r)),this.shortMessage=o,this.sourceCodeInfo=r,Object.setPrototypeOf(this,t.prototype),this.name="DvalaError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends t{userMessage;constructor(e,n){super(e,n),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class o extends t{constructor(e,n){super(e,n),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class a extends t{symbol;constructor(e,n){super(`Undefined symbol '${e}'.`,n),this.symbol=e,Object.setPrototypeOf(this,a.prototype),this.name="UndefinedSymbolError"}}const i={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},s=new Set(Object.values(i));function u(e){return Object.keys(i).find(n=>i[n]===e)}const l=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","EffectMatcher","Builtin","SpecialBuiltin","Module"]);const c="^^fn^^",f="^^re^^",d="^^ef^^";function p(e){return null!==e&&"object"==typeof e&&(c in e&&"functionType"in e&&function(e){return"string"==typeof e&&l.has(e)}(e.functionType))}function h(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&s.has(e)}(e[0])}function y(e){return p(e)?`<function ${e.name||"λ"}>`:h(e)?`${u(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function m(e,n){return e?.sourceCodeInfo??n}function v(e,n,r){return new t(`Expected ${e}, got ${y(n)}.`,m(n,r))}function g(e,n){return b(e,n),e}function b(e,n){if(!function(e){return void 0!==e}(e))throw new t("Unexpected undefined",m(e,n))}function x(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function w(e){return null!==e&&"object"==typeof e&&!!e[c]}function k(e,n){if(!w(e))throw v("DvalaFunction",e,n)}function E(e){return w(e)&&"UserDefined"===e.functionType}function S(e,n){if(!E(e))throw v("UserDefinedFunction",e,n)}function I(e){return void 0!==e}function N(e,n){return P(e,n),e}function P(e,n){if(!I(e))throw v("not undefined",e,n)}function $(e){return Array.isArray(e)||"string"==typeof e}function C(e,n){if(!$(e))throw v("string or array",e,n)}function A(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||w(e)||U(e)||B(e))}function j(e,n){if(!A(e))throw v("object",e,n)}function O(e){return $(e)||A(e)}function M(e,n){if(!O(e))throw v("string, array or object",e,n)}function U(e){return null!==e&&"object"==typeof e&&!!e[f]}function V(e,n){if(!function(e){return U(e)||"string"==typeof e}(e))throw v("string or RegularExpression",e,n)}function B(e){return null!==e&&"object"==typeof e&&!!e[d]}function R(e,n){if(!B(e))throw v("Effect",e,n)}function T(e,n){return D(e,n),e}function D(e,n){if(!function(e){return"number"==typeof e||!!O(e)||!!w(e)}(e))throw v("FunctionLike",e,n)}function _(e,n={}){return"string"==typeof e&&((!n.nonEmpty||0!==e.length)&&(!n.char||1===e.length))}function F(e,n,t={}){if(!_(e,t))throw v(""+(t.nonEmpty?"non empty string":t.char?"character":"string"),e,n)}function L(e,n,t={}){return F(e,n,t),e}function q(e){return"string"==typeof e||"number"==typeof e}function z(e,n){return W(e,n),e}function W(e,n){if(!q(e))throw v("string or number",e,n)}const K={assert:{evaluate:(e,n)=>{const t=e[0],r=2===e.length?e[1]:`${t}`;if(F(r,n),!t)throw new o(r,n);return N(t,n)},arity:{min:1,max:2}}};function Y(e,n={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(n.integer&&!Number.isInteger(e))&&(!(n.finite&&!Number.isFinite(e))&&((!n.zero||0===e)&&((!n.nonZero||0!==e)&&(!(n.positive&&e<=0)&&(!(n.negative&&e>=0)&&(!(n.nonPositive&&e>0)&&(!(n.nonNegative&&e<0)&&(!("number"==typeof n.gt&&e<=n.gt)&&(!("number"==typeof n.gte&&e<n.gte)&&(!("number"==typeof n.lt&&e>=n.lt)&&!("number"==typeof n.lte&&e>n.lte)))))))))))))}function G(e,n,r={}){if(!Y(e,r))throw new t(`Expected ${function(e){if(e.zero)return"zero";const n=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),t=e.integer?"integer":"number",r=e.finite?"finite":"",o=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[n,r,t,o].filter(e=>!!e).join(" ")}(r)}, got ${y(e)}.`,m(e,n))}function J(e,n){const{min:t}=e;return!("number"==typeof t&&n<t)}function H(e,n,r){const{min:o,max:a}=e;if("number"==typeof o&&n<o)throw new t(`Wrong number of arguments, expected at least ${o}, got ${y(n)}.`,r);if("number"==typeof a&&n>a)throw new t(`Wrong number of arguments, expected at most ${a}, got ${y(n)}.`,r)}function X(e){return{min:e,max:e}}const Z={"<<":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e<<n),arity:X(2)},">>":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e>>n),arity:X(2)},">>>":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e>>>n),arity:X(2)},"&":{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e&n),e)),arity:{min:2}},"|":{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e|n),e)),arity:{min:2}},xor:{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e^n),e)),arity:{min:2}}};function Q(e,n){return!!O(e)&&("string"==typeof e||Array.isArray(e)?!!Y(n,{integer:!0})&&(n>=0&&n<e.length):!!Object.getOwnPropertyDescriptor(e,n))}function ee(e,n,r){if(W(e,r),W(n,r),"string"==typeof e&&"string"==typeof n)return e<n?-1:e>n?1:0;if("number"==typeof e&&"number"==typeof n)return Math.sign(e-n);throw new t(`Cannot compare values of different types: ${typeof e} and ${typeof n}`,r)}function ne(e,n,t){if(e===n)return!0;if("number"==typeof e&&"number"==typeof n)return function(e,n,t=ae){if(e===n)return!0;const r=Math.abs(e-n);if(0===e||0===n||r<t)return r<t;const o=Math.abs(e),a=Math.abs(n);return r/(o+a)<t}(e,n);if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let r=0;r<e.length;r+=1)if(!ne(N(e[r],t),N(n[r],t),t))return!1;return!0}if(U(e)&&U(n))return e.s===n.s&&e.f===n.f;if(x(e)&&x(n)){const r=Object.keys(e),o=Object.keys(n);if(r.length!==o.length)return!1;for(let o=0;o<r.length;o+=1){const a=L(r[o],t);if(!ne(e[a],n[a],t))return!1}return!0}return!1}function te(e){return e??null}function re(...e){const n=new Set;for(const t of e)t.forEach(e=>n.add(e));return n}function oe(e,n){n.forEach(n=>e.add(n))}const ae=1e-10;function ie(e,n=0){const t=e.split("\n");for(;t[0]?.match(/^\s*$/);)t.shift();for(;t[t.length-1]?.match(/^\s*$/);)t.pop();const r=t.reduce((e,n)=>{if(n.match(/^\s*$/))return e;const t=n.match(/^\s*/)[0].length;return Math.min(e,t)},1/0);return t.map(e=>" ".repeat(n)+e.slice(r)).join("\n").trimEnd()}function se(e,n){if(!Array.isArray(e))throw v("array",e,n)}function ue(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw v("array of strings",e,n)}function le(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw v("array of strings",e,n)}const ce={filter:{evaluate:()=>{throw new Error("filter is implemented in Dvala")},arity:X(2)},map:{evaluate:()=>{throw new Error("map is implemented in Dvala")},arity:{min:2}},reduce:{evaluate:()=>{throw new Error("reduce is implemented in Dvala")},arity:X(3)},get:{evaluate:(e,n)=>{const[t,r]=e,o=te(e[2]);if(W(r,n),null===t)return o;M(t,n);const a=function(e,n){if(A(e)){if("string"==typeof n&&Q(e,n))return te(e[n])}else if(Y(n,{nonNegative:!0,integer:!0})&&n>=0&&n<e.length)return te(e[n])}(t,r);return void 0===a?o:a},arity:{min:2,max:3}},count:{evaluate:([e],n)=>null===e?0:"string"==typeof e?e.length:(M(e,n),Array.isArray(e)?e.length:Object.keys(e).length),arity:X(1)},"contains?":{evaluate:([e,n],t)=>null!==e&&(M(e,t),_(e)?(F(n,t),e.includes(n)):$(e)?(P(n,t),!!e.find(e=>ne(N(e),n,t))):(F(n,t),n in e)),arity:X(2)},assoc:{evaluate:([e,n,t],r)=>(M(e,r),W(n,r),P(t,r),function(e,n,t,r){if(M(e,r),W(n,r),Array.isArray(e)||"string"==typeof e){if(G(n,r,{integer:!0}),G(n,r,{gte:0}),G(n,r,{lte:e.length}),"string"==typeof e)return F(t,r,{char:!0}),`${e.slice(0,n)}${t}${e.slice(n+1)}`;const o=[...e];return o[n]=t,o}F(n,r);const o={...e};return o[n]=t,o}(e,n,t,r)),arity:X(3)},"++":{evaluate:(e,n)=>(Y(e[0])||M(e[0],n),Array.isArray(e[0])?e.reduce((e,t)=>(se(t,n),e.concat(t)),[]):q(e[0])?e.reduce((e,t)=>(W(t,n),`${e}${t}`),""):e.reduce((e,t)=>(j(t,n),Object.assign(e,t)),{})),arity:{min:1}}},fe={range:{evaluate:(e,n)=>{const[t,r,o]=e;let a,i,s;G(t,n,{finite:!0}),1===e.length?(a=0,i=t,s=i>=0?1:-1):2===e.length?(G(r,n,{finite:!0}),a=t,i=r,s=i>=a?1:-1):(G(r,n,{finite:!0}),G(o,n,{finite:!0}),a=t,i=r,s=o,G(s,n,i>a?{positive:!0}:i<a?{negative:!0}:{nonZero:!0}));const u=[];for(let e=a;s<0?e>i:e<i;e+=s)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,n],t)=>{G(n,t,{integer:!0,nonNegative:!0});const r=[];for(let t=0;t<n;t+=1)r.push(e);return r},arity:X(2)},flatten:{evaluate:([e,n],t)=>{se(e,t);const r=void 0===n||n===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,n,t={}){return G(e,n,t),e}(n,t,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:()=>{throw new Error("mapcat is implemented in Dvala")},arity:X(2)},"moving-fn":{evaluate:()=>{throw new Error("moving-fn is implemented in Dvala")},arity:X(3)},"running-fn":{evaluate:()=>{throw new Error("running-fn is implemented in Dvala")},arity:X(2)}},de={nth:{evaluate:(e,n)=>{const[t,r]=e,o=te(e[2]);if(G(r,n,{integer:!0}),null===t)return o;if(C(t,n),r>=0&&r<t.length){return te(t[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],n)=>{if(null===e)return null;C(e,n);return te(e[0])},arity:X(1)},last:{evaluate:([e],n)=>{if(null===e)return null;C(e,n);return te(e.at(-1))},arity:X(1)},pop:{evaluate:([e],n)=>(C(e,n),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:X(1)},"index-of":{evaluate:([e,n],t)=>{if(P(n,t),null===e)return null;if(C(e,t),"string"==typeof e){F(n,t);const r=e.indexOf(n);return-1!==r?r:null}{const r=e.findIndex(e=>ne(N(e,t),n),t);return-1!==r?r:null}},arity:X(2)},push:{evaluate:([e,...n],t)=>(C(e,t),"string"==typeof e?(le(n,t),[e,...n].join("")):[...e,...n]),arity:{min:2}},rest:{evaluate:([e],n)=>(C(e,n),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:X(1)},next:{evaluate:([e],n)=>(C(e,n),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:X(1)},reverse:{evaluate:([e],n)=>null===e?null:(C(e,n),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:X(1)},second:{evaluate:([e],n)=>null===e?null:(C(e,n),te(e[1])),arity:X(1)},slice:{evaluate:(e,n)=>{const[t,r,o]=e;return C(t,n),G(r,n,{integer:!0}),2===e.length?(Array.isArray(t),t.slice(r)):(G(o,n,{integer:!0}),Array.isArray(t),t.slice(r,o))},arity:{min:2,max:3}},some:{evaluate:()=>{throw new Error("some is implemented in Dvala")},arity:X(2)},sort:{evaluate:()=>{throw new Error("sort is implemented in Dvala")},arity:{min:1,max:2}},take:{evaluate:([e,n],t)=>{G(n,t),C(e,t);const r=Math.max(Math.ceil(n),0);return e.slice(0,r)},arity:X(2)},"take-last":{evaluate:([e,n],t)=>{C(e,t),G(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(o)},arity:X(2)},drop:{evaluate:([e,n],t)=>{G(n,t);const r=Math.max(Math.ceil(n),0);return C(e,t),e.slice(r)},arity:X(2)},"drop-last":{evaluate:([e,n],t)=>{C(e,t),G(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(0,o)},arity:X(2)},"take-while":{evaluate:()=>{throw new Error("take-while is implemented in Dvala")},arity:X(2)},"drop-while":{evaluate:()=>{throw new Error("drop-while is implemented in Dvala")},arity:X(2)}},pe=new WeakSet,he=new WeakSet,ye=new WeakSet,me=new WeakSet,ve=new WeakSet,ge=new WeakSet,be=new WeakSet;function xe(e){return Array.isArray(e)?(pe.has(e)||(we(e),Ie(e)||Se(e)),e):e}function we(e){return!!Array.isArray(e)&&(!!he.has(e)||!ye.has(e)&&(e.every(e=>Y(e))?(pe.add(e),he.add(e),!0):(ye.add(e),!1)))}function ke(e,n){if(!we(e))throw new t(`Expected a vector, but got ${e}`,n)}function Ee(e,n){if(ke(e,n),0===e.length)throw new t(`Expected a non empty vector, but got ${e}`,n)}function Se(e,n){if(!Array.isArray(e))return!1;if(ge.has(e))return!0;if(be.has(e))return!1;if(0===e.length)return be.add(e),!1;if(!Array.isArray(e[0]))return be.add(e),!1;const t=e[0].length;if(0===t)return be.add(e),!1;for(const r of e){if(!Array.isArray(r))return be.add(e),!1;if(r.length!==t)return be.add(e),!1;if(n&&r.some(e=>!n(e)))return!1}return pe.add(e),ge.add(e),!0}function Ie(e){return Se(e,Y)?(me.add(e),!0):(Array.isArray(e)&&ve.add(e),!1)}function Ne(e,n){let r=!1,o=!1;for(const a of e)if(we(a))r=!0;else if(Ie(a))o=!0;else if(!Y(a))throw new t("Invalid parameter type: "+typeof a,n);if(o){if(r)throw new t("Cannot mix vector and matrix types",n);let o=null,a=null;for(const r of e)if(Ie(r))if(null===o)o=r.length,a=r[0].length;else if(r.length!==o||r[0].length!==a)throw new t("Matrix dimensions do not match",n);return["matrix",e.map(e=>Ie(e)?e:Array.from({length:o},()=>Array.from({length:a},()=>e)))]}if(r){let r=null;for(const o of e)if(we(o))if(null===r)r=o.length;else if(o.length!==r)throw new t("Vector lengths do not match",n);return["vector",e.map(e=>we(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function Pe(e){return(n,t)=>{const[r,o]=Ne(n,t);return"number"===r?e(o[0]):"vector"===r?o[0].map(n=>e(n)):o[0].map(n=>n.map(n=>e(n)))}}function $e(e){return(n,t)=>{const[r,o]=Ne(n,t);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((n,t)=>e(n,o[1][t])):o[0].map((n,t)=>n.map((n,r)=>e(n,o[1][t][r])))}}function Ce(e,n){return(t,r)=>{if(0===t.length)return e;const[o,a]=Ne(t,r);if("number"===o)return a.reduce((e,t)=>n(e,t),e);if("vector"===o){const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>n(e,t[r])),e)}{const[e,...t]=a;return t.reduce((e,t)=>e.map((e,r)=>e.map((e,o)=>n(e,t[r][o]))),e)}}}const Ae={inc:{evaluate:Pe(e=>e+1),arity:X(1)},dec:{evaluate:Pe(e=>e-1),arity:X(1)},"+":{evaluate:Ce(0,(e,n)=>e+n),arity:{}},"*":{evaluate:Ce(1,(e,n)=>e*n),arity:{}},"/":{evaluate:(e,n)=>{if(0===e.length)return 1;const[t,r]=Ne(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?1/e:n.reduce((e,n)=>e/n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e/n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e/n[t][r])),e)}},arity:{}},"-":{evaluate:(e,n)=>{if(0===e.length)return 0;const[t,r]=Ne(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?-e:n.reduce((e,n)=>e-n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e-n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e-n[t][r])),e)}},arity:{}},quot:{evaluate:$e((e,n)=>Math.trunc(e/n)),arity:X(2)},mod:{evaluate:$e((e,n)=>e-n*Math.floor(e/n)),arity:X(2)},"%":{evaluate:$e((e,n)=>e%n),arity:X(2)},sqrt:{evaluate:Pe(e=>Math.sqrt(e)),arity:X(1)},cbrt:{evaluate:Pe(e=>Math.cbrt(e)),arity:X(1)},"^":{evaluate:$e((e,n)=>e**n),arity:X(2)},round:{evaluate:([e,n],t)=>{const[r,o]=Ne([e],t);if("number"===r){if(void 0===n||0===n)return Math.round(o[0]);{G(n,t,{integer:!0,positive:!0});const e=10**n;return Math.round(o[0]*e)/e}}if("vector"===r){const e=o[0];if(void 0===n||0===n)return e.map(e=>Math.round(e));{G(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>Math.round(e*r)/r)}}{const e=o[0];if(void 0===n||0===n)return e.map(e=>e.map(e=>Math.round(e)));{G(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:Pe(e=>Math.trunc(e)),arity:X(1)},floor:{evaluate:Pe(e=>Math.floor(e)),arity:X(1)},ceil:{evaluate:Pe(e=>Math.ceil(e)),arity:X(1)},min:{evaluate:(e,n)=>{if(1===e.length&&we(e[0])){const t=e[0];return Ee(t,n),t.reduce((e,n)=>Math.min(e,n),1/0)}const[t,...r]=e;return G(t,n),r.reduce((e,t)=>(G(t,n),Math.min(e,t)),t)},arity:{min:1}},max:{evaluate:(e,n)=>{if(1===e.length&&we(e[0])){const t=e[0];return Ee(t,n),t.reduce((e,n)=>Math.max(e,n),-1/0)}const[t,...r]=e;return G(t,n),r.reduce((e,t)=>(G(t,n),Math.max(e,t)),t)},arity:{min:1}},abs:{evaluate:Pe(e=>Math.abs(e)),arity:X(1)},sign:{evaluate:Pe(e=>Math.sign(e)),arity:X(1)}};function je([e,...n],t){const r=N(e,t);for(const e of n)if(!ne(r,N(e,t),t))return!1;return!0}const Oe={"==":{evaluate:(e,n)=>je(e,n),arity:{min:1}},"!=":{evaluate:(e,n)=>!je(e,n),arity:{min:1}},"identical?":{evaluate:e=>function([e,...n]){for(const t of n)if(t!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)<=0)return!1;r=z(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)>=0)return!1;r=z(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)<0)return!1;r=z(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)>0)return!1;r=z(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:X(1)},"epoch->iso-date":{evaluate:([e],n)=>(G(e,n),new Date(e).toISOString()),arity:X(1)},"iso-date->epoch":{evaluate:([e],n)=>{F(e,n);const t=new Date(e).valueOf();return G(t,n,{finite:!0}),t},arity:X(1)},boolean:{evaluate:([e])=>!!e,arity:X(1)},compare:{evaluate:([e,n],t)=>(W(e,t),W(n,t),ee(e,n,t)),arity:X(2)},"json-parse":{evaluate:([e],n)=>(F(e,n),JSON.parse(e)),arity:X(1)},"json-stringify":{evaluate:([e,n],t)=>(P(e,t),void 0===n?JSON.stringify(e):(G(n,t),JSON.stringify(e,null,n))),arity:{min:1,max:2}},"effect-name":{evaluate:([e],n)=>function(e,n){return R(e,n),e}(e,n).name,arity:X(1)},"effect-matcher":{evaluate:([e],n)=>{if("string"==typeof e)return{[c]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"string",pattern:e,flags:"",arity:X(1)};if(U(e))return{[c]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"regexp",pattern:e.s,flags:e.f,arity:X(1)};throw new t("effect-matcher expects a string or regexp pattern",n)},arity:X(1)},"type-of":{evaluate:([e])=>null==e?"null":"boolean"==typeof e?"boolean":"number"==typeof e?"number":"string"==typeof e?"string":B(e)?"effect":U(e)?"regexp":w(e)?"function":Array.isArray(e)?"array":"object",arity:X(1)}},Me={keys:{evaluate:([e],n)=>(j(e,n),Object.keys(e)),arity:X(1)},vals:{evaluate:([e],n)=>(j(e,n),Object.values(e)),arity:X(1)},entries:{evaluate:([e],n)=>(j(e,n),Object.entries(e)),arity:X(1)},find:{evaluate:([e,n],t)=>(j(e,t),F(n,t),Q(e,n)?[n,e[n]]:null),arity:X(2)},dissoc:{evaluate:([e,n],t)=>{j(e,t),F(n,t);const r={...e};return delete r[n],r},arity:X(2)},merge:{evaluate:(e,n)=>{if(0===e.length)return null;const[t,...r]=e;return j(t,n),r.reduce((e,t)=>(j(t,n),{...e,...t}),{...t})},arity:{min:0}},"merge-with":{evaluate:()=>{throw new Error("merge-with is implemented in Dvala")},arity:{min:2}},zipmap:{evaluate:([e,n],t)=>{ue(e,t),se(n,t);const r=Math.min(e.length,n.length),o={};for(let a=0;a<r;a+=1){o[L(e[a],t)]=te(n[a])}return o},arity:X(2)},"select-keys":{evaluate:([e,n],t)=>(ue(n,t),j(e,t),n.reduce((n,t)=>(Q(e,t)&&(n[t]=te(e[t])),n),{})),arity:X(2)}},Ue={"function?":{evaluate:([e])=>w(e),arity:X(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:X(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:X(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&Y(e,{integer:!0}),arity:X(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:X(1)},"null?":{evaluate:([e])=>null==e,arity:X(1)},"zero?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),Math.abs(e)<ae),arity:X(1)},"pos?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e>0),arity:X(1)},"neg?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e<0),arity:X(1)},"even?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e%2==0),arity:X(1)},"odd?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),Y(e,{integer:!0})&&e%2!=0),arity:X(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:X(1)},"collection?":{evaluate:([e])=>O(e),arity:X(1)},"sequence?":{evaluate:([e])=>$(e),arity:X(1)},"object?":{evaluate:([e])=>A(e),arity:X(1)},"regexp?":{evaluate:([e])=>U(e),arity:X(1)},"effect?":{evaluate:([e])=>B(e),arity:X(1)},"finite?":{evaluate:([e],n)=>(G(e,n),Number.isFinite(e)),arity:X(1)},"positive-infinity?":{evaluate:([e],n)=>(G(e,n),e===Number.POSITIVE_INFINITY),arity:X(1)},"negative-infinity?":{evaluate:([e],n)=>(G(e,n),e===Number.NEGATIVE_INFINITY),arity:X(1)},"true?":{evaluate:([e])=>!0===e,arity:X(1)},"false?":{evaluate:([e])=>!1===e,arity:X(1)},"empty?":{evaluate:([e],n)=>null===e||(M(e,n),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:X(1)},"not-empty?":{evaluate:([e],n)=>null!==e&&(M(e,n),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:X(1)},"vector?":{evaluate:([e])=>we(e),arity:X(1)},"matrix?":{evaluate:([e])=>Ie(e),arity:X(1)},"grid?":{evaluate:([e])=>Se(e),arity:X(1)}},Ve={regexp:{evaluate:([e,n],r)=>{F(e,r);const o=e||"(?:)",a="string"==typeof n?n:"";try{new RegExp(o,a)}catch(e){throw new t(`Invalid regular expression: ${o} ${a}`,r)}return{[f]:!0,sourceCodeInfo:r,s:o,f:a}},arity:{min:1,max:2}},"re-match":{evaluate:([e,n],t)=>{if(function(e,n){if(!U(e))throw v("RegularExpression",e,n)}(n,t),!_(e))return null;const r=new RegExp(n.s,n.f).exec(e);return r?[...r]:null},arity:X(2)},replace:{evaluate:([e,n,t],r)=>{F(e,r),V(n,r),F(t,r);const o=U(n)?new RegExp(n.s,`${n.f}`):n;return e.replace(o,t)},arity:X(3)},"replace-all":{evaluate:([e,n,t],r)=>{F(e,r),V(n,r),F(t,r);const o=U(n)?new RegExp(n.s,`${n.f.includes("g")?n.f:`${n.f}g`}`):n;return e.replaceAll(o,t)},arity:X(3)}},Be=/^\s*$/,Re={str:{evaluate:e=>e.reduce((e,n)=>e+(null==n?"":A(n)||Array.isArray(n)?JSON.stringify(n):`${n}`),""),arity:{}},number:{evaluate:([e],n)=>{F(e,n);const r=Number(e);if(Number.isNaN(r))throw new t(`Could not convert '${e}' to a number.`,n);return r},arity:X(1)},"lower-case":{evaluate:([e],n)=>(F(e,n),e.toLowerCase()),arity:X(1)},"upper-case":{evaluate:([e],n)=>(F(e,n),e.toUpperCase()),arity:X(1)},trim:{evaluate:([e],n)=>(F(e,n),e.trim()),arity:X(1)},join:{evaluate:([e,n],t)=>(se(e,t),e.forEach(e=>W(e,t)),F(n,t),e.join(n)),arity:X(2)},split:{evaluate:([e,n,t],r)=>{F(e,r),V(n,r),void 0!==t&&G(t,r,{integer:!0,nonNegative:!0});const o="string"==typeof n?n:new RegExp(n.s,n.f);return e.split(o,t)},arity:{min:2,max:3}},"blank?":{evaluate:([e],n)=>null===e||(F(e,n),Be.test(e)),arity:X(1)}},Te={"|>":{evaluate:()=>{throw new Error("|> is implemented in Dvala")},arity:X(2)},apply:{evaluate:()=>{throw new Error("apply is implemented in Dvala")},arity:{min:2}},identity:{evaluate:([e])=>te(e),arity:X(1)},comp:{evaluate:(e,n)=>{return e.forEach(e=>D(e,n)),{[c]:!0,sourceCodeInfo:n,functionType:"Comp",params:e,arity:e.length>0?(t=e.at(-1),"number"==typeof t||O(t)?X(1):t.arity):{min:1,max:1}};var t},arity:{}},constantly:{evaluate:([e],n)=>({[c]:!0,sourceCodeInfo:n,functionType:"Constantly",value:te(e),arity:{}}),arity:X(1)}};function De(e){return ie(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function(e){const{title:n,variants:t,args:r,returns:o}=e,a=!_e(e)&&e._isOperator,i=t.map(t=>{if(_e(e)){const e=t.argumentNames.length>0?`, ${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")}`:"";return` perform(effect(${n})${e}) -> ${Fe(o)}`}return`${` ${n}(${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")})`} -> ${Fe(o)}`}),s=a?["","Operator:",` a ${n} b -> ${Fe(o)}`]:[];return[...i,...s]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,n])=>`${e}: ${Fe(n)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ie(e,4)).join("\n\n")}`)}function _e(e){return"effect"in e}function Fe(e){const n=e.type,t=(Array.isArray(n)?n:[n]).join(" | ");return e.array||e.rest?`Array<${t}>`:t}const Le={sum:{evaluate:([e],n)=>(ke(e,n),e.reduce((e,n)=>e+n,0)),arity:X(1)},prod:{evaluate:([e],n)=>(ke(e,n),e.reduce((e,n)=>e*n,1)),arity:X(1)},mean:{evaluate:([e],n)=>(Ee(e,n),e.reduce((e,n)=>e+n,0)/e.length),arity:X(1)},median:{evaluate:([e],n)=>(Ee(e,n),function(e){const n=[...e].sort((e,n)=>e-n),t=Math.floor(n.length/2);return n.length%2==0?(n[t-1]+n[t])/2:n[t]}(e)),arity:X(1)}},qe={...K,...Z,...ce,...fe,...de,...Ae,...function(e,n){return{doc:{evaluate:([t],r)=>{if(b(e),B(t)){const e=`-effect-${t.name}`,r=n[e];return r?De(r):""}if(D(t,r),!w(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?De(n):""}return"UserDefined"===t.functionType?t.docString:""},arity:X(1)},arity:{evaluate:([e],t)=>{if(B(e)){const t=`-effect-${e.name}`,r=n[t];if(!r)return{};const o=r.variants.map(e=>e.argumentNames.length);return{min:Math.min(...o),max:Math.max(...o)}}return D(e,t),w(e)?e.arity:X(1)},arity:X(1)}}}({},{}),...Oe,...Me,...Ue,...Ve,...Re,...Te,...Le};Object.entries(qe).forEach(([e,n])=>{n.name=e});const ze={...qe},We={},Ke=[];Object.entries(ze).forEach(([e,n],t)=>{We[e]=t,Ke.push(n)});const Ye={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!0;for(const r of e)if(t=N(r,n),!t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Ge=11,Je=12,He=13,Xe=14,Ze=15,Qe=16;function en(e,n){return e instanceof Promise?e.then(n):n(e)}async function nn(e,n,t,r,o){n.push(await e);for(let e=o+1;e<t.length;e++)n.push(await r(t[e],e));return n}function tn(e,n,t){let r=t;for(let t=0;t<e.length;t++){const o=n(r,e[t],t);if(o instanceof Promise)return rn(o,e,n,t);r=o}return r}async function rn(e,n,t,r){let o=await e;for(let e=r+1;e<n.length;e++)o=await t(o,n[e],e);return o}function on(e,n){for(let t=0;t<e.length;t++){const r=n(e[t],t);if(r instanceof Promise)return an(r,e,n,t)}}async function an(e,n,t,r){await e;for(let e=r+1;e<n.length;e++)await t(n[e],e)}function sn(e,n){if(e[0]===He)Object.values(e[1][0]).forEach(e=>{e[1][1]&&n(e[1][1]),sn(e,n)});else if(e[0]===Xe)for(let t=0;t<e[1][0].length;t+=1){const r=e[1][0][t]??null;null!==r&&(r[1][1]&&n(r[1][1]),sn(r,n))}}function un(e,n,t){const r=e[2],o={};return en(ln(e,n,t,r,o),()=>o)}function ln(e,n,r,o,a){if(e[0]===He){!function(e,n){if(!x(e))throw new t(`Expected UnknownRecord, got ${y(e)}.`,m(e,n))}(n,o);const i=new Set;let s;return en(on(Object.entries(e[1][0]),([e,t])=>{if(t[0]===Je)return void(s=t);i.add(e);const u=n[e];return en(void 0!==u?u:t[1][1]?r(t[1][1]):null,e=>{const n=e??null;return P(n,o),ln(t,n,r,o,a)})}),()=>{if(s){const e=Object.entries(n).filter(([e])=>!i.has(e)).reduce((e,[n,t])=>(e[n]=N(t),e),{});a[s[1][0]]=e}})}if(e[0]===Xe){let t=null;se(n,o);const i=[];for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;if(null!==r){if(r[0]===Je){t=n;break}i.push({element:r,index:n})}}return en(on(i,({element:e,index:t})=>{const i=n[t];return en(void 0!==i?i:e[1][1]?r(e[1][1]):null,n=>{const t=n??null;return P(t,o),ln(e,t,r,o,a)})}),()=>{if(null!==t){const r=n.slice(t),o=e[1][0][t];a[o[1][0]]=r}})}e[0]===Je?a[e[1][0]]=N(n):a[e[1][0][1]]=N(n)}function cn(e){const n={};return fn(e,n),n}function fn(e,n){if(null!==e)if(e[0]===Xe)for(const t of e[1][0])fn(t,n);else if(e[0]===He)for(const t of Object.values(e[1][0]))fn(t,n);else if(e[0]===Je){if(n[e[1][0]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0]]=!0}else if(e[0]===Ge){if(n[e[1][0][1]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0][1]]=!0}}function dn(e,n,t){const r={};return en(pn(e,n,t,r),e=>e?r:null)}function pn(e,n,t,r){if(e[0]===Qe)return!0;if(e[0]===Ze){const r=e[1][0];return en(t(r),e=>ne(n,e))}if(e[0]===Ge){const o=e[1][0],a=e[1][1];if(null==n){if(a)return en(t(a),e=>(r[o[1]]=N(e),!0));r[o[1]]=n??null}else r[o[1]]=N(n);return!0}if(e[0]===He){if(!x(n))return!1;const o=new Set;let a;const i=Object.entries(e[1][0]);let s=!0;for(const[e,u]of i)s=en(s,i=>{if(!i)return!1;if(u[0]===Je)return a=u,!0;o.add(e);const s=n[e];if(void 0===s&&u[0]===Ze)return en(t(u[1][0]),e=>ne(void 0,e));return en(void 0!==s?s:u[1]&&u[1][1]?t(u[1][1]):null,e=>pn(u,e??null,t,r))});return en(s,e=>{if(!e)return!1;if(a){const e=Object.entries(n).filter(([e])=>!o.has(e)).reduce((e,[n,t])=>(e[n]=N(t),e),{});r[a[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(n))return!1;const a=o[1][0];let i=null;for(let e=0;e<a.length;e+=1){const n=a[e];if(null!==n&&n[0]===Je){i=e;break}}if(null===i&&n.length!==a.length)return!1;if(null!==i&&n.length<i)return!1;let s=!0;for(let e=0;e<a.length;e+=1){const o=a[e];if(null===o)continue;if(o[0]===Je){r[o[1][0]]=n.slice(e);break}const i=o;s=en(s,o=>!!o&&pn(i,N(n[e]),t,r))}return s}}const hn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=new Set;t([e[1][1]],n,r,o).forEach(e=>a.add(e));for(const[i,s,u]of e[1][2]){const e={};Object.assign(e,cn(i));const l=n.create(e);u&&t([u],l,r,o).forEach(e=>a.add(e)),t([s],l,r,o).forEach(e=>a.add(e))}return a}},yn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t([e[1][1]],n,r,o)},mn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=t(e[1][1],n.create({}),r,o),i=e[1][2];if(!i||0===i.length)return a;let s=new Set;for(const[e,a]of i){s=re(s,t([e],n,r,o),t([a],n,r,o))}return re(a,s)}},vn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>function(e,n,t,r,o){const a=new Set,i={self:{value:null}};e[0].forEach(e=>{Object.assign(i,cn(e)),sn(e,e=>{oe(a,t([e],n,r,o))})});const s=n.create(i),u=t(e[1],s,r,o);return oe(a,u),a}(e[1][1],n,t,r,o)};const gn={arity:X(0),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],i=a[1][0],s=a[1][1],u=t([s],n,r,o);return sn(i,e=>{oe(u,t([e],n,r,o))}),n.addValues(cn(i),i[2]),u}},bn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const a=e[1][1],i=a.reduce((e,n)=>{const t=cn(n[1][0]);return Object.keys(t).forEach(n=>{e[n]={value:!0}}),e},{});return re(t(a.map(e=>e[1][1]),n,r,o),t([e[1][2]],n.create(i),r,o))}};function xn(e,n,t,r,o){const a=new Set,i={},[,s,u]=e[1];return s.forEach(e=>{const[s,u,l,c]=e,[f,d]=s[1];t([d],n.create(i),r,o).forEach(e=>a.add(e)),Object.assign(i,cn(f)),u&&u.forEach(e=>{const[s,u]=e[1];t([u],n.create(i),r,o).forEach(e=>a.add(e)),Object.assign(i,cn(s))}),l&&t([l],n.create(i),r,o).forEach(e=>a.add(e)),c&&t([c],n.create(i),r,o).forEach(e=>a.add(e))}),t([u],n.create(i),r,o).forEach(e=>a.add(e)),a}const wn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>xn(e,n,t,r,o)},kn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>xn(e,n,t,r,o)},En={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!1;for(const r of e)if(t=N(r,n),t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Sn={arity:{min:1},evaluateAsNormalExpression:(e,n)=>{for(const t of e){const e=N(t,n);if(null!==e)return e}return null},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},In={arity:{},evaluateAsNormalExpression:e=>{throw new n(e)},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Nn={arity:{},evaluateAsNormalExpression:(e,n)=>{const t=[];for(const r of e)t.push(N(r,n));return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Pn={arity:{},getUndefinedSymbols:()=>new Set},$n={arity:{},evaluateAsNormalExpression:(e,n)=>{const t={};for(let r=0;r<e.length;r+=2){const o=e[r],a=e[r+1];F(o,n),t[o]=a??null}return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Cn={arity:X(1),getUndefinedSymbols:()=>new Set},An={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>re(...e[1][1].map(e=>t([e],n,r,o)))},jn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const[,a,i]=e[1];return re(t([a],n,r,o),t(i,n,r,o))}},On={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>re(...e[1][1].map(e=>t([e],n,r,o)))},Mn={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,unless:16,import:17,effect:18,perform:19,parallel:20,race:21},Un=[Sn,Ye,En,Nn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].flat(),n,r,o)},yn,mn,kn,vn,wn,{arity:{min:2,max:3},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},gn,bn,$n,In,hn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},Cn,Pn,jn,An,On],Vn={normalExpressions:ze,specialExpressions:Un,allNormalExpressions:Ke},Bn=Object.keys(ze),Rn=Object.keys(Mn);function Tn(e){return i.UserDefinedSymbol===e[0]}function Dn(e,n){return function(e,n){if(!Tn(e))throw v("UserDefinedSymbolNode",e,n)}(e,n),e}function _n(e){return i.NormalBuiltinSymbol===e[0]}function Fn(e){return i.SpecialBuiltinSymbol===e[0]}function Ln(e){return!!function(e){return e[0]===i.NormalExpression}(e)&&function(e){const n=e[0];return i.UserDefinedSymbol===n||i.NormalBuiltinSymbol===n||i.SpecialBuiltinSymbol===n}(e[1][0])}function qn(e){return e[0]===i.Spread}const zn=(e,n,t,r)=>{const o=Array.isArray(e)?e:[[i.SpecialExpression,[Mn.block,e.body,void 0]]],a=new Set;for(const e of o)Wn(e,n,t,r)?.forEach(e=>a.add(e));return a};function Wn(e,n,r,o){const a=e[0];switch(a){case i.UserDefinedSymbol:{const t=e;return null===n.lookUp(t)?new Set([t[1]]):null}case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.String:case i.Number:case i.ReservedSymbol:case i.Binding:return null;case i.NormalExpression:{const t=e,a=new Set;if(Ln(t)){const[,[e]]=t;if(Tn(e)){null===n.lookUp(e)&&a.add(e[1])}}else{const[,[e]]=t;Wn(e,n,r,o)?.forEach(e=>a.add(e))}for(const e of t[1][1])Wn(e,n,r,o)?.forEach(e=>a.add(e));return a}case i.SpecialExpression:{const t=e,a=t[1][0];return(0,r.specialExpressions[a].getUndefinedSymbols)(t,n,{getUndefinedSymbols:zn,builtin:r,evaluateNode:o})}case i.Spread:return Wn(e[1],n,r,o);default:throw new t(`Unhandled node type: ${a}`,e[2])}}const Kn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],Yn=[...Kn,"?",":","->","...",".",",","=",":",";"],Gn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","unless","while"]);function Jn(e){return!Gn.has(e)}const Hn=new Set(Kn);function Xn(e){return Hn.has(e)}const Zn=new Set(Yn);function Qn(e){return Zn.has(e)}function et(e,n){return"Symbol"===e?.[0]&&(!n||e[1]===n)}function nt(e,n){return function(e,n){et(e,n)||kt("Symbol",void 0,e)}(e,n),e}function tt(e,n){return"ReservedSymbol"===e?.[0]&&(!n||e[1]===n)}function rt(e,n){tt(e,n)||kt("ReservedSymbol",n,e)}function ot(e,n){return rt(e,n),e}function at(e,n){return"Operator"===e?.[0]&&(!n||e[1]===n)}function it(e,n){at(e,n)||kt("Operator",n,e)}function st(e){return"Number"===e?.[0]}function ut(e){return"BasePrefixedNumber"===e?.[0]}function lt(e){return"LParen"===e?.[0]}function ct(e){lt(e)||kt("LParen",void 0,e)}function ft(e){return"RParen"===e?.[0]}function dt(e){ft(e)||kt("RParen",void 0,e)}function pt(e){return"LBracket"===e?.[0]}function ht(e){return function(e){pt(e)||kt("LBracket",void 0,e)}(e),e}function yt(e){return"RBracket"===e?.[0]}function mt(e){yt(e)||kt("RBracket",void 0,e)}function vt(e){return"LBrace"===e?.[0]}function gt(e){return function(e){vt(e)||kt("LBrace",void 0,e)}(e),e}function bt(e){return"RBrace"===e?.[0]}function xt(e){return"string"===e?.[0]}function wt(e){return"Operator"===e?.[0]&&Xn(e[1])}function kt(e,n,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new t(`Unexpected token: ${o}, expected ${e}${n?` '${n}'`:""}`,r?.[2])}function Et(e,n){return n&&(e[2]=n),e}function St(e,n){return void 0!==Mn[e]&&"fn"!==e&&"defn"!==e?Et([i.SpecialBuiltinSymbol,Mn[e]],n):void 0!==We[e]?Et([i.NormalBuiltinSymbol,We[e]],n):Et([i.UserDefinedSymbol,e],n)}function It(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,n,t,r)=>n?"\\":t?"'":`\\${r}`)}const Nt=Object.entries(We).reduce((e,[n,t])=>(e[t]=n,e),[]),Pt=Object.entries(Mn).reduce((e,[n,t])=>(e[t]=n,e),[]);function $t(e){return Tn(e)?e[1]:_n(e)?Nt[e[1]]:Pt[e[1]]}function Ct(e,n,t){const r=Et([i.NormalExpression,[e,n]],t);return _n(e)&&H(Ke[e[1]].arity,r[1][1].length,t),r}function At(e){if(e.isAtEnd())return!0;const n=e.tryPeek();return at(n)?[";",",",":"].includes(n[1]):!!tt(n)&&["else","when","while","case","let","then","end","do"].includes(n[1])}function jt(e,n,r,o,a){const s=e[1];switch(s){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"&":case"xor":case"|":case"|>":return Ct(n,[r,o],a);case"&&":case"||":case"??":return Et([i.SpecialExpression,[Mn[s],[r,o]]],a);default:throw new t(`Unknown binary operator: ${s}`,a)}}class Ot{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),n=e?e[2]:void 0;throw new t("Unexpected end of input",n)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Mt(e,n){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new t(`Unknown binary operator: ${e}`,n)}}function Ut(e,n){const r=[];for(;!e.isAtEnd()&&!Vt(e,n);)at(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,n){if(!Vt(e,n))throw new t(`Expected ${n.map(e=>e[1]).join(" or ")}`,e.peekSourceCodeInfo())}(e,n),0===r.length)throw new t("Expected expression",e.peekSourceCodeInfo());return 1===r.length?r[0]:Et([i.SpecialExpression,[Mn.block,r,void 0]],e.peekSourceCodeInfo())}function Vt(e,n){for(const t of n)if(tt(e.tryPeek(),t))return!0;return!1}function Bt(e,n){e.advance();const t=n[1].substring(1,n[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,n,t,r,o,a,i,s,u)=>n?"\\":r?"\n":o?"\t":a?"\r":i?"\b":s?"\f":t?'"':u);return Et([i.String,t],n[2])}function Rt(e,n=!1){const r=ot(e.tryPeek(),"do");e.advance();let o="";n&&function(e){return"DocString"===e?.[0]}(e.tryPeek())&&(o=function(e){const n=e.peek(),t=n[2]?["string",n[1].slice(2,-2),n[2]]:["string",n[1].slice(2,-2)],r=Bt(e,t);return ie(r[1])}(e),e.isAtEnd()||tt(e.tryPeek(),"end")||tt(e.tryPeek(),"with")||(it(e.tryPeek(),";"),e.advance()));const a=[];for(;!e.isAtEnd()&&!tt(e.tryPeek(),"end")&&!tt(e.tryPeek(),"with");)if(a.push(e.parseExpression()),at(e.tryPeek(),";"))e.advance();else if(!tt(e.tryPeek(),"end")&&!tt(e.tryPeek(),"with"))throw new t("Expected end",e.peekSourceCodeInfo());let s;if(tt(e.tryPeek(),"with"))for(e.advance(),s=[];!e.isAtEnd()&&!tt(e.tryPeek(),"end");){rt(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();rt(e.tryPeek(),"then"),e.advance();const t=Ut(e,["case","end"]);s.push([n,t])}return rt(e.tryPeek(),"end"),e.advance(),[Et([i.SpecialExpression,[Mn.block,a,s]],r[2]),o]}function Tt(e){const n=e.peek();if(e.advance(),!et(n))throw new t(`Expected symbol token, got ${n[0]}`,n[2]);return"'"===n[1][0]?St(It(n[1]),n[2]):St(n[1],n[2])}function Dt(e){const n=e.peek();e.advance();const t=n[1],r="-"===t[0],o=(r?t.substring(1):t).replace(/_/g,"");return Et([i.Number,r?-Number(o):Number(o)],n[2])}function _t(e,{requireDefaultValue:n,noRest:r,allowLiteralPatterns:o}={}){const a=e.tryPeek();if(o&&tt(a,"_"))return e.advance(),Et([Qe,[]],a[2]);if(o&&Lt(a)){if(st(a)||ut(a)){const n=Dt(e);return Et([Ze,[n]],a[2])}if(xt(a)){const n=Bt(e,a);return Et([Ze,[n]],a[2])}if(tt(a,"true")){e.advance();const n=Et([i.ReservedSymbol,"true"],a[2]);return Et([Ze,[n]],a[2])}if(tt(a,"false")){e.advance();const n=Et([i.ReservedSymbol,"false"],a[2]);return Et([Ze,[n]],a[2])}if(tt(a,"null")){e.advance();const n=Et([i.ReservedSymbol,"null"],a[2]);return Et([Ze,[n]],a[2])}}if(et(a)){const r=Tt(e);if(!Tn(r))throw new t("Expected user defined symbol",a[2]);const o=Ft(e);if(n&&!o)throw new t("Expected assignment",e.peekSourceCodeInfo());return Et([Ge,[r,o]],a[2])}if(at(a,"...")){if(r)throw new t("Rest element not allowed",a[2]);e.advance();const n=Dn(Tt(e));if(at(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());return Et([Je,[n[1],void 0]],a[2])}if(pt(a)){e.advance();const r=[];let i=e.peek(),s=!1;for(;!yt(i);){if(s)throw new t("Rest argument must be last",i[2]);if(at(i,",")){r.push(null),e.advance(),i=e.peek();continue}const n=_t(e,{allowLiteralPatterns:o});n[0]===Je&&(s=!0),r.push(n),i=e.peek(),yt(i)||(it(i,","),e.advance()),i=e.peek()}e.advance();const u=Ft(e);if(n&&!u)throw new t("Expected assignment",e.peekSourceCodeInfo());return Et([Xe,[r,u]],a[2])}if(vt(a)){e.advance();const r={};let i=e.peek(),s=!1;for(;!bt(i);){if(s)throw new t("Rest argument must be last",i[2]);at(i,"...")&&(s=!0,e.advance());const n=Tt(e),u=$t(n);if(i=e.peek(),tt(i,"as")){if(s)throw new t("Rest argument can not have alias",i[2]);e.advance();const n=Dn(Tt(e));if(r[n[1]])throw new t(`Duplicate binding name: ${n}`,i[2]);r[u]=Et([Ge,[n,Ft(e)]],a[2])}else if(bt(i)||at(i,",")||at(i,"=")){const o=Dn(n,n[2]);if(r[o[1]])throw new t(`Duplicate binding name: ${o}`,i[2]);if(s&&at(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=Et(s?[Je,[o[1],Ft(e)]]:[Ge,[o,Ft(e)]],a[2])}else if(at(i,":")){if(e.advance(),i=e.peek(),o){if(!vt(i)&&!pt(i)&&!Lt(i))throw new t("Expected literal, object or array pattern",i[2])}else if(!vt(i)&&!pt(i))throw new t("Expected object or array",i[2]);r[u]=_t(e,{allowLiteralPatterns:o})}bt(e.peek())||(it(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const u=Ft(e);if(n&&!u)throw new t("Expected assignment",i[2]);return Et([He,[r,u]],a[2])}throw new t("Expected symbol",e.peekSourceCodeInfo())}function Ft(e){if(at(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function Lt(e){return st(e)||ut(e)||xt(e)||tt(e,"true")||tt(e,"false")||tt(e,"null")}function qt(e,n){e.advance();const t=_t(e,{requireDefaultValue:!0,noRest:!0}),r=t[1][1];t[1][1]=void 0;const o=Et([i.Binding,[t,r]],n[2]);return Et([i.SpecialExpression,[Mn.let,o]],n[2])}function zt(e){const n=function(e){const n=nt(e.tryPeek()),t=Dn(Tt(e));rt(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Et([i.Binding,[Et([Ge,[t,void 0]],n[2]),r]],n[2])}(e),r=[];let o=e.peek();Wt(o,["let","when","while"]);const a=[];if("let"===o[1])for(r.push("&let");et(o,"let");){const n=qt(e,o),r=a.flatMap(e=>Object.keys(cn(e[1][0])));if(Object.keys(cn(n[1][1][1][0])).some(e=>r.includes(e)))throw new t("Duplicate binding",n[1][1][2]);a.push(n[1][1]),o=e.peek(),Wt(o,["let","when","while"]),o=e.peek()}let s,u;for(;tt(o,"when")||tt(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),s=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Wt(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Wt(o,[]),[n,a,s,u]}function Wt(e,n){if(!function(e,n){if(at(e,",")||ft(e))return!0;for(const t of n){if("let"===t&&et(e,"let"))return!0;if(["when","while"].includes(t)&&tt(e,t))return!0}return!1}(e,n)){const r=`${[...n,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new t(`Expected symbol ${r}`,e[2])}}const Kt=(1+Math.sqrt(5))/2,Yt={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Kt,"-PHI":-Kt,"φ":Kt,"-φ":-Kt,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Gt={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,function:null,as:null,then:null,end:null,with:null,_:null,...Yt};function Jt(e){const n=ot(e.tryPeek());e.advance();const t=n[1];return function(e){return e in Yt}(t)?Et([i.Number,Yt[t]],n[2]):Et([i.ReservedSymbol,n[1]],n[2])}const Ht=/^\$([1-9]\d?)?$/;function Xt(e){const n=e.peek();if(lt(n)&&et(e.peekAhead(1))&&at(e.peekAhead(2),"->"))return null;try{const r=function(e){const n=e.peek();if(et(n))return[Et([Ge,[Tt(e),void 0]],n[2])];ct(n),e.advance();let r=!1,o=!1;const a=[];for(;!e.isAtEnd()&&!ft(e.peek())&&!et(e.peek(),"let");){if(r)throw new t("Rest argument must be last",e.peekSourceCodeInfo());const n=_t(e);if(void 0!==n[1][1]&&(o=!0),n[0]===Je&&(r=!0),o&&!n[1][1])throw new t("Default arguments must be last",e.peekSourceCodeInfo());if(a.push(n),!at(e.peek(),",")&&!ft(e.peek())&&!et(e.peek(),"let"))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());at(e.peek(),",")&&e.advance()}if(!ft(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),a}(e);if(!at(e.peek(),"->"))return null;let o;e.advance();let a="";if(tt(e.peek(),"do")){const n=Rt(e,!0);a=n[1];const t=n[0],r=t[1][2];o=r&&r.length>0?[t]:t[1][1]}else o=[e.parseExpression()];return Et([i.SpecialExpression,[Mn["0_lambda"],[r,o],a]],n[2])}catch{return null}}function Zt(e,n){if(e.advance(),Fn(n)&&n[1]===Mn.effect)return function(e,n){const r=n[2],o=e.peek();if(!et(o))throw new t("effect expects a dotted name identifier",o[2]);let a=o[1];e.advance();for(;at(e.tryPeek(),".");){e.advance();const n=e.peek();if(!et(n))throw new t("Expected identifier after dot in effect name",n[2]);a+=`.${n[1]}`,e.advance()}if(!ft(e.tryPeek()))throw new t("Expected closing parenthesis after effect name",e.peekSourceCodeInfo());return e.advance(),Et([i.SpecialExpression,[Mn.effect,a]],r)}(e,n);const r=[];for(;!e.isAtEnd()&&!ft(e.tryPeek());){at(e.tryPeek(),"...")?(e.advance(),r.push(Et([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!at(n,",")&&!ft(n))throw new t("Expected comma or closing parenthesis",e.tryPeek()?.[2]);at(n,",")&&e.advance()}if(!ft(e.tryPeek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Fn(n))return _n(n)||Tn(n)?Ct(n,r,n[2]):Et([i.NormalExpression,[n,r]],n[2]);{const e=n[1];if(e===Mn.import){if(1!==r.length)throw new t(`import expects exactly 1 argument, got ${r.length}`,n[2]);const o=r[0];if(!Tn(o))throw new t("import expects a module name (symbol), got a non-symbol argument",o[2]??n[2]);const a=o[1];return Et([i.SpecialExpression,[e,a]],n[2])}const o=e;switch(H(Vn.specialExpressions[o].arity,r.length,n[2]),o){case Mn["||"]:case Mn["&&"]:case Mn.recur:case Mn.array:case Mn.object:case Mn["??"]:return Et([i.SpecialExpression,[o,r]],n[2]);case Mn["defined?"]:{const[e]=r;return Et([i.SpecialExpression,[o,e]],n[2])}case Mn.perform:{const[e,...t]=r;return Et([i.SpecialExpression,[o,e,t]],n[2])}case Mn.parallel:case Mn.race:return Et([i.SpecialExpression,[o,r]],n[2]);case Mn["0_lambda"]:throw new t(`${o} is not allowed`,n[2]);default:throw new t(`Unknown special expression: ${o}`,n[2])}}}function Qt(e){const n=gt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!bt(e.tryPeek());){if(at(e.tryPeek(),"..."))e.advance(),r.push(Et([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const n=e.tryPeek();if(xt(n)){const t=Bt(e,n);r.push(Et([i.String,t[1]],n[2]))}else if(et(n)){const t=n[1].startsWith("'")?It(n[1]):n[1];r.push(Et([i.String,t],n[2])),e.advance()}else{if(!pt(n))throw new t("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),mt(e.tryPeek()),e.advance()}it(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const n=e.tryPeek();if(!at(n,",")&&!bt(n))throw new t("Expected comma or closing brace",e.peekSourceCodeInfo());at(n,",")&&e.advance()}var o;return bt(o=e.tryPeek())||kt("RBrace",void 0,o),e.advance(),Et([i.SpecialExpression,[Mn.object,r]],n[2])}function er(e){let n=function(e){const n=e.peek();if(lt(n)){e.storePosition();const n=Xt(e);if(n)return n;e.restorePosition(),e.advance();const r=e.parseExpression();if(!ft(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(at(n)){const r=n[1];if(Xn(r))return e.advance(),Et(void 0!==Mn[r]?[i.SpecialBuiltinSymbol,Mn[r]]:[i.NormalBuiltinSymbol,We[r]],n[2]);if("->"===r)return function(e){const n=e.peek();e.advance();const r=e.getPosition();let o,a="";if(tt(e.peek(),"do")){const n=Rt(e,!0);a=n[1];const t=n[0],r=t[1][2];o=r&&r.length>0?[t]:t[1][1]}else o=[e.parseExpression()];const s=e.getPosition()-1;let u=0,l="NOT_SET";for(let o=r;o<=s;o+=1){const r=e.getTokenAt(o);if(et(r)){const e=Ht.exec(r[1]);if(e){const r=e[1]??"1";if("1"===r){if(!e[1]&&"WITH_1"===l||e[1]&&"NAKED"===l)throw new t("Please make up your mind, either use $ or $1",n[2]);l=e[1]?"WITH_1":"NAKED"}if(u=Math.max(u,Number(r)),u>20)throw new t("Can't specify more than 20 arguments",n[2])}}}const c=[];for(let e=1;e<=u;e+=1)1===e&&"NAKED"===l?c.push(Et([Ge,[[i.UserDefinedSymbol,"$"],void 0]],n[2])):c.push(Et([Ge,[[i.UserDefinedSymbol,`$${e}`],void 0]],n[2]));return Et([i.SpecialExpression,[Mn["0_lambda"],[c,o],a]],n[2])}(e);throw new t(`Illegal operator: ${r}`,n[2])}if(vt(n))return Qt(e);if(pt(n))return function(e){const n=ht(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!yt(e.tryPeek());){at(e.tryPeek(),"...")?(e.advance(),r.push(Et([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!at(n,",")&&!yt(n))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());at(n,",")&&e.advance()}return mt(e.tryPeek()),e.advance(),Et([i.SpecialExpression,[Mn.array,r]],n[2])}(e);const r=n[0];switch(r){case"Number":case"BasePrefixedNumber":return Dt(e);case"string":return Bt(e,n);case"Symbol":{e.storePosition();const n=Xt(e);return n||(e.restorePosition(),Tt(e))}case"ReservedSymbol":return Jt(e);case"RegexpShorthand":return function(e){const n=e.peek();e.advance();const t=n[1].lastIndexOf('"'),r=n[1].substring(2,t),o=n[1].substring(t+1),a=Et([i.String,r],n[2]),s=Et([i.String,o],n[2]);return Et([i.NormalExpression,[Et([i.NormalBuiltinSymbol,We.regexp],n[2]),[a,s]]],n[2])}(e);default:throw new t(`Unknown token type: ${r}`,n[2])}}(e),r=e.tryPeek();for(;at(r,".")||pt(r)||lt(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!et(o))throw new t("Expected symbol",e.peekSourceCodeInfo());n=nr(n,Et([i.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(pt(r)){e.advance();const o=e.parseExpression();if(!yt(e.tryPeek()))throw new t("Expected closing bracket",e.peekSourceCodeInfo());n=nr(n,o,r[2]),e.advance(),r=e.tryPeek()}else lt(r)&&(n=Zt(e,n),r=e.tryPeek());return n}function nr(e,n,t){return Et([i.NormalExpression,[[i.NormalBuiltinSymbol,We.get],[e,n]]],t)}function tr(e,n=0){const r=e.tryPeek();let o;if(et(r))switch(r[1]){case"let":return qt(e,r);case"if":case"unless":o=function(e,n){const t="unless"===n[1];e.advance();const r=e.parseExpression();rt(e.tryPeek(),"then"),e.advance();const o=Ut(e,["else","end"]);let a;return tt(e.tryPeek(),"else")&&(e.advance(),a=Ut(e,["end"])),e.advance(),Et(t?[i.SpecialExpression,[Mn.unless,[r,o,a]]]:[i.SpecialExpression,[Mn.if,[r,o,a]]],n[2])}(e,r);break;case"cond":o=function(e,n){e.advance();const t=[];for(;!e.isAtEnd()&&!tt(e.tryPeek(),"end");){rt(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();rt(e.tryPeek(),"then"),e.advance();const r=Ut(e,["case","end"]);if(t.push([n,r]),tt(e.tryPeek(),"end"))break}return rt(e.tryPeek()),e.advance(),Et([i.SpecialExpression,[Mn.cond,t]],n[2])}(e,r);break;case"match":o=function(e,n){e.advance();const t=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!tt(e.tryPeek(),"end");){rt(e.tryPeek(),"case"),e.advance();const n=_t(e,{allowLiteralPatterns:!0});let t;tt(e.tryPeek(),"when")&&(e.advance(),t=e.parseExpression()),rt(e.tryPeek(),"then"),e.advance();const o=Ut(e,["case","end"]);if(r.push([n,o,t]),tt(e.tryPeek(),"end"))break}return rt(e.tryPeek(),"end"),e.advance(),Et([i.SpecialExpression,[Mn.match,t,r]],n[2])}(e,r);break;case"for":case"doseq":o=function(e,n){const r="doseq"===n[1];e.advance(),ct(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!ft(e.tryPeek());){const n=zt(e),r=o.flatMap(e=>Object.keys(cn(e[0][1][0]))),a=cn(n[0][1][0]);if(Object.keys(a).some(e=>r.includes(e)))throw new t("Duplicate binding",n[0][2]);o.push(n),at(e.tryPeek(),",")&&e.advance()}dt(e.tryPeek()),e.advance(),it(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Et(r?[i.SpecialExpression,[Mn.doseq,o,a]]:[i.SpecialExpression,[Mn.for,o,a]],n[2])}(e,r);break;case"loop":o=function(e,n){e.advance(),ct(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!ft(o);){const n=_t(e,{requireDefaultValue:!0,noRest:!0}),t=n[1][1];n[1][1]=void 0,r.push(Et([i.Binding,[n,t]],n[2])),at(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new t("Expected binding",e.peekSourceCodeInfo());dt(o),e.advance(),it(e.tryPeek(),"->"),e.advance();const a=e.parseExpression();return Et([i.SpecialExpression,[Mn.loop,r,a]],n[2])}(e,r)}else tt(r,"do")&&(o=Rt(e)[0]);o||=er(e);let a=e.tryPeek();for(;!At(e);){if(wt(a)){const t=a[1],r=Mt(t,a[2]);if(r<=n&&(12!==r||12!==n))break;const s=Et(Mn[t]?[i.SpecialBuiltinSymbol,Mn[t]]:[i.NormalBuiltinSymbol,We[t]],a[2]);e.advance();o=jt(a,s,o,tr(e,r),a[2])}else if(et(a)){if(!Jn(a[1]))break;const r=3;if(r<=n)break;const i=Tt(e),s=tr(e,r);if(Fn(i))throw new t("Special expressions are not allowed in binary functional operators",i[2]);o=Ct(i,[o,s],a[2])}else{if("?"!==a?.[1])break;{if(1<=n)break;e.advance();const r=tr(e);if(!at(e.tryPeek(),":"))throw new t("Expected :",e.peekSourceCodeInfo());e.advance();const a=tr(e);o=Et([i.SpecialExpression,[Mn.if,[o,r,a]]],o[2])}}a=e.tryPeek()}return o}function rr(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new t(e[3],e[2])});const n=[],r=function(e){const n=new Ot(e);return n.parseExpression=(e=0)=>tr(n,e),n}(e);for(;!r.isAtEnd();)if(n.push(tr(r,0)),at(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new t("Expected ;",r.peekSourceCodeInfo());return n}function or(e,{removeWhiteSpace:n}){const t=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||n&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:t}}const ar=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],ir=["0","1","2","3","4","5","6","7","8","9",...ar],sr=new Set(ar),ur=new Set(ir),lr=/\s/,cr=[0],fr=(e,n)=>{if('"'!==e[n])return cr;let t='"',r=1,o=e[n+r],a=!1;for(;o&&('"'!==o||a);)r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r];return o?(t+='"',[r+1,["string",t]]):[r,["Error",t,void 0,`Unclosed string at position ${n}`]]};function dr(e,n,t,r){return n===t.slice(r,r+n.length)?[n.length,[e,n]]:cr}const pr=/\d/,hr=/[0-7]/,yr=/[0-9a-f]/i,mr=/[01]/,vr=/[\s)\]}(,;]/,gr=(e,n)=>{let t=e[n];if("'"===t){let r=1,o=e[n+r],a=!1;for(;"'"!==o||a;){if(void 0===o)return[r,["Error",t,void 0,`Unclosed quoted symbol at position ${n}`]];r+=1,a?(a=!1,t+=o):("\\"===o&&(a=!0),t+=o),o=e[n+r]}return t+="'",[r+1,["Symbol",t]]}if(!ur.has(t)){const r=n;let o=e[n+=1];for(;o&&!sr.has(o);)t+=o,o=e[n+=1];return t.endsWith(":")?[n-r-1,["Symbol",t.slice(0,-1)]]:[n-r,["Symbol",t]]}return cr},br=[(e,n)=>{let t=e[n];if(!t||!lr.test(t))return cr;let r=t;for(t=e[n+=1];t&&lr.test(t);)r+=t,t=e[n+=1];return[r.length,["Whitespace",r]]},(e,n)=>{if("/"===e[n]&&"*"===e[n+1]){let t=2,r="/*";for(;("*"!==e[n+t]||"/"!==e[n+t+1])&&n+t+1<e.length;)r+=e[n+t],t+=1;return n+t+1>=e.length?[t,["Error",r,void 0,`Unclosed multi-line comment at position ${n}`]]:(r+="*/",t+=2,[t,["MultiLineComment",r]])}return cr},(e,n)=>{if("/"===e[n]&&"/"===e[n+1]){let t=2,r="//";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return cr},(e,n)=>{const t=gr(e,n);if(0===t[0]||!t[1])return cr;let r=t[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Gt[r]?cr:[t[0],["ReservedSymbol",r]]},(e,n)=>dr("LParen","(",e,n),(e,n)=>dr("RParen",")",e,n),(e,n)=>dr("LBracket","[",e,n),(e,n)=>dr("RBracket","]",e,n),(e,n)=>dr("LBrace","{",e,n),(e,n)=>dr("RBrace","}",e,n),(e,n)=>{if('"'!==e[n]||'"'!==e[n+1]||'"'!==e[n+2])return cr;let t='"""',r=3,o=e[n+r],a=e.slice(n+r,n+r+3),i=!1;for(;o&&('"""'!==a||i);)r+=1,i?(i=!1,t+=o):("\\"===o&&(i=!0),t+=o),o=e[n+r],a=e.slice(n+r,n+r+3);return o?(t+='"""',[r+3,["DocString",t]]):[r,["Error",t,void 0,`Unclosed doc string at position ${n}`]]},fr,(e,n)=>{if("#"!==e[n])return cr;const[t,r]=fr(e,n+1);if(!r)return cr;if("Error"===r[0]){return[t+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${n}`]]}n+=t+1;let o=t+1,a="";for(;"g"===e[n]||"i"===e[n];)if(a+=e[n],o+=1,n+=1,a.includes(e[n]))return[o,["Error",`#${r[1]}${a}`,void 0,`Duplicated regexp option "${e[n]}"`]];return[o,["RegexpShorthand",`#${r[1]}${a}`]]},(e,n)=>{if("0"!==e[n])return cr;const t=e[n+1],r="b"===t||"B"===t?"binary":"o"===t||"O"===t?"octal":"x"===t||"X"===t?"hex":null;if(null===r)return cr;let o;for(o=n+2;o<e.length;o+=1){const n=e[o];if("binary"===r&&!mr.test(n))break;if("octal"===r&&!hr.test(n))break;if("hex"===r&&!yr.test(n))break}const a=o-n;if(a<=2)return cr;const i=e[o];return i&&!vr.test(i)?cr:[a,["BasePrefixedNumber",e.substring(n,o)]]},(e,n)=>{let t;const r="-"===e[n],o="+"===e[n],a=r||o?n+1:n;let i=!1,s=!1;for(t=a;t<e.length;t+=1){const r=e[t];if("_"===r){if(!pr.test(e[t-1])||!pr.test(e[t+1]))return t===a?cr:[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]}else if("."===r){if(t===a)return cr;if(i||s)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];i=!0}else if("e"===r||"E"===r){if(t===a)return cr;if(s)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];if("."===e[t-1]||"+"===e[t-1]||"-"===e[t-1])return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];"+"!==e[t+1]&&"-"!==e[t+1]||(t+=1),s=!0}else if(!pr.test(r))break}if((r||o)&&t===a)return cr;const u=t-n;if(0===u)return cr;const l=e[t];return l&&":"!==l&&!vr.test(l)?[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]:[u,["Number",e.substring(n,t)]]},(e,n)=>{const t=e.slice(n,n+3);if(n+2<e.length&&Qn(t))return[3,["Operator",t]];const r=e.slice(n,n+2);if(n+1<e.length&&Qn(r))return[2,["Operator",r]];const o=e[n]??"";return Qn(o)?[1,["Operator",o]]:cr},gr];function xr(e,n,t){let r=0;const o={tokens:[],filePath:t,hasDebugData:n};for(;r<e.length;){const a=n?wr(e,r,t):void 0,i=kr(e,r),[s,u]=i;r+=s,u&&(a&&(u[2]=a),o.tokens.push(u))}return o}function wr(e,n,t){const r=e.substring(0,n+1).split(/\r\n|\r|\n/),o=r[r.length-1],a=function(e,n){return e.split(/\r\n|\r|\n/)[n]}(e,r.length-1);return{code:a,position:{line:r.length,column:o.length},filePath:t}}function kr(e,n){const t=n;if(0===n){const[r,o]=((e,n)=>{if("#"===e[n]&&"!"===e[n+1]){let t=2,r="#!";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return cr})(e,n);if(n+=r,r>0)return[n-t,o]}for(const r of br){const[o,a]=r(e,n);if(n+=o,0!==o)return[n-t,a]}return[1,["Error",e[t],void 0,"Unrecognized character"]]}function Er(e,n){if("*"===n)return!0;if(n.endsWith(".*")){const t=n.slice(0,-2);return e===t||e.startsWith(`${t}.`)}return e===n}function Sr(e,n){if(!n)return[];const t=[];for(const[r,o]of Object.entries(n))Er(e,r)&&t.push([r,o]);return t}class Ir{k;snapshots;nextSnapshotIndex;meta;_brand="SuspensionSignal";constructor(e,n,t,r){this.k=e,this.snapshots=n,this.nextSnapshotIndex=t,this.meta=r}}function Nr(e){return e instanceof Ir}class Pr{continuation;value;trimToIndex;_brand="ResumeFromSignal";constructor(e,n,t){this.continuation=e,this.value=n,this.trimToIndex=t}}function $r(e){return e instanceof Pr}const Cr=new Map;function Ar(e){let n=Cr.get(e);return n||(n={[d]:!0,name:e},Cr.set(e,n)),n}class jr{_contexts;globalContext;values;modules;valueModules;pure;constructor({contexts:e,values:n,modules:t,valueModules:r,pure:o}){this.globalContext=g(e[0]),this._contexts=e,this.values=n,this.modules=t??new Map,this.valueModules=r??new Map,this.pure=o??!1}getContextsRaw(){return this._contexts}getHostValues(){return this.values}getGlobalContextIndex(){return this._contexts.indexOf(this.globalContext)}static fromDeserialized(e){const n=new jr({contexts:e.contexts,values:e.values,modules:e.modules,pure:e.pure});return e.globalContextIndex>=0&&e.globalContextIndex<e.contexts.length&&(n.globalContext=e.contexts[e.globalContextIndex]),n}setContextsFromDeserialized(e,n){this._contexts=e,n>=0&&n<e.length&&(this.globalContext=e[n])}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,n){this.valueModules.set(e,n)}create(e){const n=this.globalContext,t=new jr({contexts:[e,...this._contexts],values:this.values,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return t.globalContext=n,t}new(e){return new jr({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}addValues(e,n){const r=this._contexts[0];for(const[o,a]of Object.entries(e)){if(r[o])throw new t(`Cannot redefine value "${o}"`,n);const e=Or(o);if(e)throw new t(`Cannot shadow ${e}`,n);r[o]={value:te(a)}}}getValue(e){for(const n of this._contexts){const t=n[e];if(t)return t.value}return this.values?.[e]}lookUp(e){const n=e[1];for(const e of this._contexts){const t=e[n];if(t)return t}const t=this.values?.[n];return void 0!==t?{value:te(t)}:null}evaluateSymbol(e){if(Fn(e)){const n=e[1];switch(n){case Mn["&&"]:case Mn["||"]:case Mn.array:case Mn.object:case Mn["defined?"]:case Mn.recur:case Mn["??"]:{const t=g(Vn.specialExpressions[n],e[2]);return{[c]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity}}default:throw new t(`Unknown special builtin symbol type: ${n}`,e[2])}}if(_n(e)){const n=e[1],t=Ke[n],r=t.name;return{[c]:!0,functionType:"Builtin",normalBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity,name:r}}const n=this.lookUp(e);if(x(r=n)&&void 0!==r.value)return n.value;var r;throw new a(e[1],e[2])}}function Or(e){return Rn.includes(e)?`special expression "${e}"`:Bn.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Mr(e){const n=Or(e);if(n)throw new t(`Cannot shadow ${n}`,void 0)}function Ur(e={},n,r){const o=e.globalContext??{},a=e.contexts?[o,...e.contexts]:[o];let i;if(e.bindings)for(const[n,r]of Object.entries(e.bindings)){if(n.includes("."))throw new t(`Dots are not allowed in binding keys: "${n}"`,void 0);Mr(n),i||(i={}),i[n]=r}const s=new jr({contexts:a,values:i,modules:n,pure:r});return e.globalModuleScope?s:s.create({})}function Vr(e,n){return Math.imul(e^255&n,16777619)}function Br(e,n){return e=Vr(e,n),e=Vr(e,n>>>8),e=Vr(e,n>>>16),e=Vr(e,n>>>24)}function Rr(e,n){for(let t=0;t<n.length;t++){const r=n.charCodeAt(t);e=Vr(e,r),e=Vr(e,r>>>8)}return e}function Tr(e){let n=2166136261;if(null===e)return n=Vr(n,0),n>>>0;if(void 0===e)return n=Vr(n,7),n>>>0;const t=typeof e;if("boolean"===t)return n=Vr(n,e?1:2),n>>>0;if("number"===t)return n=Vr(n,3),n=Rr(n,Object.is(e,-0)?"-0":String(e)),n>>>0;if("string"===t)return n=Vr(n,4),n=Rr(n,e),n>>>0;if(Array.isArray(e)){n=Vr(n,5),n=Br(n,e.length);for(let t=0;t<e.length;t++)n=Br(n,Tr(e[t]));return n>>>0}n=Vr(n,6);const r=Object.keys(e).sort();n=Br(n,r.length);for(const t of r)n=Rr(n,t),n=Br(n,Tr(e[t]));return n>>>0}function Dr(e,n){if(e===n)return!0;if(null===e||null===n)return!1;if(typeof e!=typeof n)return!1;if(Array.isArray(e)){if(!Array.isArray(n))return!1;if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!Dr(e[t],n[t]))return!1;return!0}if("object"!=typeof e)return!1;const t=e,r=n,o=Object.keys(t),a=Object.keys(r);if(o.length!==a.length)return!1;for(const e of o){if(!(e in r))return!1;if(!Dr(t[e],r[e]))return!1}return!0}function _r(e){if(null===e)return 4;if(void 0===e)return 9;const n=typeof e;if("boolean"===n)return e?4:5;if("number"===n)return String(e).length;if("string"===n)return e.length+2;if(Array.isArray(e)){let n=2;for(let t=0;t<e.length;t++)n+=_r(e[t])+1;return n}const t=e,r=Object.keys(t);let o=2;for(const e of r)o+=e.length+2+1+_r(t[e])+1;return o}function Fr(e,n,t,r){if(null===e||"object"!=typeof e)return Tr(e);if(Array.isArray(e))for(let t=0;t<e.length;t++)Fr(e[t],n,{parent:e,key:t});else{const t=e;for(const e of Object.keys(t))Fr(t[e],n,{parent:t,key:e})}const o=Tr(e),a=_r(e);if(t&&a>=1){let r,i=n.get(o);i||(i=[],n.set(o,i));for(const n of i)if(Dr(n.value,e)){r=n;break}r?r.locations.push(t):i.push({hash:o,value:qr(e),size:a,locations:[t]})}return o}function Lr(e,n){if(null===e||"object"!=typeof e)return e;if(function(e){return null!==e&&"object"==typeof e&&"__poolRef"in e&&"number"==typeof e.__poolRef&&1===Object.keys(e).length}(e)){const t=e.__poolRef;if(!(t in n))throw new Error(`Unknown pool ref: ${t}`);return Lr(n[t],n)}if(Array.isArray(e))return e.map(e=>Lr(e,n));const t=e,r={};for(const e of Object.keys(t))r[e]=Lr(t[e],n);return r}function qr(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(e=>qr(e));const n=e,t={};for(const e of Object.keys(n))t[e]=qr(n[e]);return t}function zr(e,n){const t=new Map;let r=0;function o(e){if(e instanceof jr){if(t.has(e))return;t.set(e,r++);for(const n of e.getContextsRaw())for(const e of Object.values(n))o(e.value)}else if(Array.isArray(e))for(const n of e)o(n);else if(null!==e&&"object"==typeof e)for(const n of Object.values(e))o(n)}function a(e,n){if(e instanceof jr)return{__csRef:t.get(e)};if(Array.isArray(e))return e.map((e,n)=>a(e));if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}o(e),void 0!==n&&o(n);const i=Array.from(t.entries()).map(([e,n])=>({id:n,contexts:e.getContextsRaw().map((e,n)=>{const t={};for(const[n,r]of Object.entries(e))t[n]={value:a(r.value)};return t}),globalContextIndex:e.getGlobalContextIndex(),pure:e.pure})),s=a(e),u=void 0!==n?a(n):void 0;return{version:2,contextStacks:i,k:s,...void 0!==u?{meta:u}:{}}}function Wr(e,n,t,r){const o=zr(e,r);n.length>0&&(o.snapshots=n),o.nextSnapshotIndex=t;const a=[o.contextStacks,o.k];if(void 0!==o.meta&&a.push(o.meta),o.snapshots)for(const e of o.snapshots)a.push(e);const{roots:i,pool:s}=function(e,n=200){const t=e.map(e=>qr(e)),r=new Map;for(let e=0;e<t.length;e++)Fr(t[e],r,null);const o={};let a=0;const i=Array.from(r.values()).flat().filter(e=>e.locations.length>1&&e.size>=n).sort((e,n)=>n.size-e.size),s=new Map;for(const e of i){if(s.has(e))continue;const n=a++;o[n]=e.value,s.set(e,n);for(const t of e.locations)Array.isArray(t.parent),t.parent[t.key]={__poolRef:n}}return{roots:t,pool:o}}(a,200);let u=0;if(o.contextStacks=i[u++],o.k=i[u++],void 0!==o.meta&&(o.meta=i[u++]),o.snapshots)for(let e=0;e<o.snapshots.length;e++)o.snapshots[e]=i[u++];return Object.keys(s).length>0&&(o.pool=s),o}function Kr(e,n){let r=e;if(2!==r.version)throw new t(`Unsupported suspension blob version: ${r.version} (expected 2)`,void 0);if(r.pool&&Object.keys(r.pool).length>0){const e=r.pool;r={...r,contextStacks:Lr(r.contextStacks,e),k:Lr(r.k,e),...void 0!==r.meta?{meta:Lr(r.meta,e)}:{},...r.snapshots?{snapshots:r.snapshots.map(n=>Lr(n,e))}:{}},delete r.pool}const o=new Map;for(const e of r.contextStacks){const t=e.contexts.map(()=>({})),r=jr.fromDeserialized({contexts:t,globalContextIndex:e.globalContextIndex,values:n?.values,modules:n?.modules,pure:e.pure});o.set(e.id,r)}function a(e){if(function(e){return null!==e&&"object"==typeof e&&"__csRef"in e&&"number"==typeof e.__csRef}(e)){const n=o.get(e.__csRef);if(!n)throw new t(`Invalid suspension blob: unknown context stack ref ${e.__csRef}`,void 0);return n}if(Array.isArray(e))return e.map(a);if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=a(r);return n}return e}for(const e of r.contextStacks){const n=o.get(e.id),t=e.contexts.map(e=>{const n=e,t={};for(const[e,r]of Object.entries(n))t[e]={value:a(r.value)};return t});n.setContextsFromDeserialized(t,e.globalContextIndex)}return{k:a(r.k),meta:void 0!==r.meta?a(r.meta):void 0,snapshots:r.snapshots??[],nextSnapshotIndex:r.nextSnapshotIndex??0}}function Yr(){return"undefined"!=typeof process&&"function"==typeof process.stdout?.write}function Gr(e){return"string"==typeof e?e:null===e?"null":"number"==typeof e||"boolean"==typeof e?String(e):w(e)?"Builtin"===e.functionType?`<builtin function ${e.normalBuiltinSymbolType}>`:`<function ${e.n??"λ"}>`:B(e)?`<effect ${e.name}>`:U(e)?`/${e.s}/${e.f}`:"object"==typeof e&&e instanceof RegExp?`${e}`:JSON.stringify(Jr(e),null,2)}function Jr(e){if(e===Number.POSITIVE_INFINITY)return"∞";if(e===Number.NEGATIVE_INFINITY)return"-∞";if(w(e))return Gr(e);if(B(e))return Gr(e);if(U(e))return Gr(e);if(Array.isArray(e))return e.map(Jr);if("object"==typeof e&&null!==e){const n={};for(const[t,r]of Object.entries(e))n[t]=Jr(r);return n}return e}const Hr={"dvala.io.print":{handler:function(e,n){const t=e[0],r=Gr(t);return Yr()?process.stdout.write(r):console.log(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.println":{handler:function(e,n){const t=e[0],r=Gr(t);return Yr()?process.stdout.write(`${r}\n`):"function"==typeof globalThis.alert?globalThis.alert(r):console.log(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.error":{handler:(e,n)=>{const t=e[0],r=Gr(t);return Yr()?process.stderr.write(`${r}\n`):console.error(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.read-line":{handler:(e,n,r)=>{const o="string"==typeof e[0]?e[0]:"";if("function"==typeof globalThis.prompt){return{type:"Value",value:globalThis.prompt(o)??null,k:n}}throw new t('dvala.io.read-line is not supported in this environment. In Node.js, register a "dvala.io.read-line" host handler.',r)},arity:{min:0,max:1}},"dvala.io.read-stdin":{handler:(e,n,r)=>{if(!Yr()||!process.stdin)throw new t("dvala.io.read-stdin is not supported in this environment. Node.js is required.",r);return new Promise((e,t)=>{const r=[];process.stdin.setEncoding("utf-8"),process.stdin.on("data",e=>r.push(e)),process.stdin.on("end",()=>e({type:"Value",value:r.join(""),k:n})),process.stdin.on("error",e=>t(e)),process.stdin.resume()})},arity:X(0)},"dvala.random":{handler:(e,n)=>({type:"Value",value:Math.random(),k:n}),arity:X(0)},"dvala.random.uuid":{handler:(e,n)=>({type:"Value",value:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),k:n}),arity:X(0)},"dvala.random.int":{handler:(e,n,r)=>{const o=e[0],a=e[1];if("number"!=typeof o||!Number.isInteger(o))throw new t(`dvala.random.int: min must be an integer, got ${"number"==typeof o?o:typeof o}`,r);if("number"!=typeof a||!Number.isInteger(a))throw new t(`dvala.random.int: max must be an integer, got ${"number"==typeof a?a:typeof a}`,r);if(a<=o)throw new t(`dvala.random.int: max (${a}) must be greater than min (${o})`,r);return{type:"Value",value:Math.floor(Math.random()*(a-o))+o,k:n}},arity:X(2)},"dvala.random.item":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.item: argument must be an array, got "+typeof o,r);if(0===o.length)throw new t("dvala.random.item: cannot pick from an empty array",r);return{type:"Value",value:o[Math.floor(Math.random()*o.length)],k:n}},arity:X(1)},"dvala.random.shuffle":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.shuffle: argument must be an array, got "+typeof o,r);const a=Array.from(o);for(let e=a.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),t=a[e];a[e]=a[n],a[n]=t}return{type:"Value",value:a,k:n}},arity:X(1)},"dvala.time.now":{handler:(e,n)=>({type:"Value",value:Date.now(),k:n}),arity:X(0)},"dvala.time.zone":{handler:(e,n)=>({type:"Value",value:Intl.DateTimeFormat().resolvedOptions().timeZone,k:n}),arity:X(0)},"dvala.checkpoint":{handler:(e,n)=>({type:"Value",value:null,k:n}),arity:{min:0,max:1}},"dvala.sleep":{handler:(e,n,r)=>{const o=e[0];if("number"!=typeof o||o<0)throw new t(`dvala.sleep requires a non-negative number argument, got ${"number"==typeof o?o:typeof o}`,r);return new Promise(e=>{setTimeout(()=>e({type:"Value",value:null,k:n}),o)})},arity:X(1)}};function Xr(e,n){switch(e[0]){case i.Number:case i.String:return e[1];case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.UserDefinedSymbol:return n.evaluateSymbol(e);case i.ReservedSymbol:return ao(e);case i.NormalExpression:{const r=function(e,n){const r=e[2];return en(function(e,n){const r=[],o=[],a=on(e,(e,a)=>qn(e)?en(Xr(e[1],n),n=>{if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${y(e)}`,e[2]);r.push(...n)}):e[0]!==i.ReservedSymbol||"_"!==e[1]?en(Xr(e,n),e=>{r.push(e)}):void o.push(a));return en(a,()=>({params:r,placeholders:o}))}(e[1][1],n),({params:o,placeholders:i})=>{if(Ln(e)){const s=e[1][0];if(i.length>0){return en(Xr(s,n),e=>({[c]:!0,function:T(e,r),functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:r,arity:X(i.length)}))}if(_n(s)){const r=s[1],a=Vn.allNormalExpressions[r];if(n.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,e[2]);return a.dvalaImpl?eo(a.dvalaImpl,o,n,e[2]):a.evaluate(o,e[2],n,{executeFunction:Zr})}{const t=n.getValue(s[1]);if(void 0!==t)return Zr(T(t,r),o,n,r);throw new a(s[1],e[2])}}return en(Xr(e[1][0],n),e=>{const t=T(e,r);if(i.length>0){return{[c]:!0,function:t,functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:r,arity:X(i.length)}}return Zr(t,o,n,r)})})}(e,n);return en(r,n=>{if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e[2]);return xe(n)})}case i.SpecialExpression:{const r={type:"Eval",node:e,env:n,k:[]};try{return xe(Ao(r))}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return jo({type:"Eval",node:e,env:n,k:[]}).then(e=>xe(e))}throw r}}default:throw new t(`${u(e[0])}-node cannot be evaluated`,e[2])}}function Zr(e,n,r,o){if(w(e))return Qr(e,n,r,o);if(Array.isArray(e))return to(e,n,o);if(A(e))return no(e,n,o);if("string"==typeof e)return ro(e,n,o);if(Y(e))return oo(e,n,o);throw new t("Unexpected function type",o)}function Qr(e,n,r,o){switch(e.functionType){case"UserDefined":return eo(e,n,r,o);case"Partial":return function(e,n,r,o){const a=[...e.params];if(n.length!==e.placeholders.length)throw new t(`(partial) expects ${e.placeholders.length} arguments, got ${n.length}.`,o);const i=[...n];for(const n of e.placeholders)a.splice(n,0,i.shift());return Zr(e.function,a,r,o)}(e,n,r,o);case"Comp":return function(e,n,r,o){const{params:a}=e;if(0===a.length){if(1!==n.length)throw new t(`(comp) expects one argument, got ${y(n.length)}.`,o);return N(n[0],o)}let i=n;for(let e=a.length-1;e>=0;e--){const n=a[e];i=en(i,e=>en(Zr(T(n,o),e,r,o),e=>[e]))}return en(i,e=>N(e[0],o))}(e,n,r,o);case"Constantly":return e.value;case"Juxt":return function(e,n,t,r){return function(e,n){const t=[];for(let r=0;r<e.length;r++){const o=n(e[r],r);if(o instanceof Promise)return nn(o,t,e,n,r);t.push(o)}return t}(e.params,e=>Zr(T(e,r),n,t,r))}(e,n,r,o);case"Complement":return en(Zr(e.function,n,r,o),e=>!e);case"EveryPred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>Zr(T(a,r),[e],t,r));return tn(o,(e,n)=>!!e&&en(n(),e=>!!e),!0)}(e,n,r,o);case"SomePred":return function(e,n,t,r){const o=[];for(const a of e.params)for(const e of n)o.push(()=>Zr(T(a,r),[e],t,r));return tn(o,(e,n)=>!!e||en(n(),e=>!!e),!1)}(e,n,r,o);case"Fnull":return function(e,n,t,r){const o=n.map((n,t)=>null===n?te(e.params[t]):n);return Zr(T(e.function,r),o,t,r)}(e,n,r,o);case"EffectMatcher":return function(e,n,t){H({min:1,max:1},n.length,e.sourceCodeInfo??t);const r=n[0];R(r,t);const o=r.name;if("string"===e.matchType)return Er(o,e.pattern);const a=new RegExp(e.pattern,e.flags);return a.test(o)}(e,n,o);case"Builtin":{const a=Vn.allNormalExpressions[e.normalBuiltinSymbolType];return a.dvalaImpl?eo(a.dvalaImpl,n,r,o):function(e,n,r,o){const a=g(Vn.allNormalExpressions[e.normalBuiltinSymbolType],o);if(r.pure&&!1===a.pure)throw new t(`Cannot call impure function '${e.name}' in pure mode`,o);if(a.dvalaImpl)return eo(a.dvalaImpl,n,r,o);return a.evaluate(n,o,r,{executeFunction:Zr})}(e,n,r,o)}case"SpecialBuiltin":return function(e,n,r,o){const a=g(Vn.specialExpressions[e.specialBuiltinSymbolType],o);if(a.evaluateAsNormalExpression)return a.evaluateAsNormalExpression(n,o,r,{executeFunction:Zr});throw new t(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,o)}(e,n,r,o);case"Module":return function(e,n,r,o){const a=r.getModule(e.moduleName);if(!a)throw new t(`Module '${e.moduleName}' not found.`,o);const i=a.functions[e.functionName];if(!i)throw new t(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,o);if(r.pure&&!1===i.pure)throw new t(`Cannot call impure function '${e.functionName}' in pure mode`,o);if(H(i.arity,n.length,o),i.dvalaImpl)return eo(i.dvalaImpl,n,r,o);return i.evaluate(n,o,r,{executeFunction:Zr})}(e,n,r,o)}}function eo(e,r,o,a){function i(r){if(!J(e.arity,r.length))throw new t(`Expected ${e.arity} arguments, got ${r.length}.`,a);const s=e.evaluatedfunction,u=s[0],l=u.filter(e=>e[0]!==Je).length,c=o.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];let p,h;for(let e=0;e<r.length;e+=1)if(e<l){const n=e;p=en(p,()=>{const e=te(r[n]);return en(un(u[n],e,e=>Xr(e,c.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})})})}else d.push(te(r[e]));for(let e=r.length;e<l;e++){const n=e;h=en(h,()=>{const e=u[n];return en(Xr(e[1][1],o.create(f)),n=>en(un(e,n,e=>Xr(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}))})}return en(p,()=>en(h,()=>{const e=u.find(e=>e[0]===Je),t=void 0!==e?en(un(e,d,e=>Xr(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}):void 0;return en(t,()=>{const e=c.create(f),t=tn(s[1],(n,t)=>Xr(t,e),null);return t instanceof Promise?t.catch(e=>{if(e instanceof n)return i(e.params);throw e}):t})}))}for(;;)try{return i(r)}catch(e){if(e instanceof n){r=e.params;continue}throw e}}function no(e,n,r){if(1!==n.length)throw new t("Object as function requires one string parameter.",r);const o=n[0];return F(o,r),te(e[o])}function to(e,n,r){if(1!==n.length)throw new t("Array as function requires one non negative integer parameter.",r);const o=n[0];return G(o,r,{integer:!0,nonNegative:!0}),te(e[o])}function ro(e,n,r){if(1!==n.length)throw new t("String as function requires one Obj parameter.",r);const o=te(n[0]);if(A(o))return te(o[e]);if(Y(o,{integer:!0}))return te(e[o]);throw new t(`string as function expects Obj or integer parameter, got ${y(o)}`,r)}function oo(e,n,r){if(G(e,void 0,{integer:!0}),1!==n.length)throw new t("Number as function requires one Arr parameter.",r);const o=n[0];return C(o,r),te(o[e])}function ao(e){const n=e[1];if(!["true","false","null"].includes(n))throw new t(`Reserved symbol ${n} cannot be evaluated`,e[2]);return g(Gt[n],e[2])}function io(e,n,r){switch(e[0]){case i.Number:case i.String:return{type:"Value",value:e[1],k:r};case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.UserDefinedSymbol:return{type:"Value",value:n.evaluateSymbol(e),k:r};case i.ReservedSymbol:return{type:"Value",value:ao(e),k:r};case i.NormalExpression:return function(e,n,t){const r=e[1][1],o=e[2],a={type:"NanCheck",sourceCodeInfo:o},s={type:"EvalArgs",node:e,index:0,params:[],placeholders:[],env:n,sourceCodeInfo:o};let u=0;for(;u<r.length;){const e=r[u];if(e[0]!==i.ReservedSymbol||"_"!==e[1])break;s.placeholders.push(s.params.length),u++}if(s.index=u,u>=r.length)return so(s,[a,...t]);const l=r[u],c=[s,a,...t];if(qn(l))return{type:"Eval",node:l[1],env:n,k:c};return{type:"Eval",node:l,env:n,k:c}}(e,n,r);case i.SpecialExpression:return function(e,n,r){const o=e[2],a=e[1][0];switch(a){case Mn.if:case Mn.unless:{const[t,i,s]=e[1][1];return{type:"Eval",node:t,env:n,k:[{type:"IfBranch",thenNode:i,elseNode:s,inverted:a===Mn.unless,env:n,sourceCodeInfo:o},...r]}}case Mn["&&"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!0,k:r};const a={type:"And",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Mn["||"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!1,k:r};const a={type:"Or",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Mn["??"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a=t[0];if(Tn(a)&&null===n.lookUp(a)){if(1===t.length)return{type:"Value",value:null,k:r};const e={type:"Qq",nodes:t,index:2,env:n,sourceCodeInfo:o},a=t[1];return Tn(a)&&null===n.lookUp(a)?function(e,n){return po(e,n)}(e,r):2===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[e,...r]}}const i={type:"Qq",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:a,env:n,k:r}:{type:"Eval",node:a,env:n,k:[i,...r]}}case Mn.cond:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const a={type:"Cond",phase:"test",cases:t,index:0,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][0],env:n,k:[a,...r]}}case Mn.match:{const t=e[1][1],a=e[1][2];return{type:"Eval",node:t,env:n,k:[{type:"Match",phase:"matchValue",matchValue:null,cases:a,index:0,bindings:{},env:n,sourceCodeInfo:o},...r]}}case Mn.block:{const t=e[1][1],a=e[1][2],i={},s=n.create(i);let u=r;if(a&&a.length>0){u=[{type:"TryWith",handlers:a.map(([e,t])=>({effectRef:Xr(e,n),handlerNode:t})),env:n,sourceCodeInfo:o},...r]}if(0===t.length)return{type:"Value",value:null,k:u};if(1===t.length)return{type:"Eval",node:t[0],env:s,k:u};const l={type:"Sequence",nodes:t,index:1,env:s,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:s,k:[l,...u]}}case Mn.let:{const t=e[1][1],a=t[1][0];return{type:"Eval",node:t[1][1],env:n,k:[{type:"LetBind",target:a,env:n,sourceCodeInfo:o},...r]}}case Mn.loop:{const t=e[1][1],a=e[1][2];if(0===t.length){const e={},i={type:"LoopIterate",bindingNodes:t,bindingContext:e,body:a,env:n.create(e),sourceCodeInfo:o};return{type:"Eval",node:a,env:n.create(e),k:[i,...r]}}const i={type:"LoopBind",phase:"value",bindingNodes:t,index:0,context:{},body:a,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][1][1],env:n,k:[i,...r]}}case Mn.for:case Mn.doseq:{const t=e[1][1],i=e[1][2],s=a===Mn.for;if(0===t.length)return{type:"Value",value:s?[]:null,k:r};const u={},l=n.create(u),c={type:"ForLoop",returnResult:s,bindingNodes:t,body:i,result:[],phase:"evalCollection",bindingLevel:0,levelStates:[],context:u,env:l,sourceCodeInfo:o};return{type:"Eval",node:t[0][0][1][1],env:l,k:[c,...r]}}case Mn.recur:{const t=e[1][1];if(0===t.length)return xo([],r,o);const a={type:"Recur",nodes:t,index:1,params:[],env:n,sourceCodeInfo:o};if(1===t.length){const e={...a,index:1};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Mn.array:{const t=e[1][1];if(0===t.length)return{type:"Value",value:[],k:r};const a=t[0],i=qn(a),s={type:"ArrayBuild",nodes:t,index:0,result:[],isSpread:i,env:n,sourceCodeInfo:o};return{type:"Eval",node:i?a[1]:a,env:n,k:[s,...r]}}case Mn.object:{const t=e[1][1];if(0===t.length)return{type:"Value",value:{},k:r};const a=t[0],i=qn(a),s={type:"ObjectBuild",nodes:t,index:0,result:{},currentKey:null,isSpread:i,env:n,sourceCodeInfo:o};return{type:"Eval",node:i?a[1]:a,env:n,k:[s,...r]}}case Mn["0_lambda"]:{const t=e[1][1],o=e[1][2]??"",a=function(e,n){const t={},r=e[0].reduce((e,n)=>(Object.keys(cn(n)).forEach(n=>{e[n]={value:null}}),e),{});return zn(e[1],n.new(r),Vn,Xr).forEach(e=>{const r=n.getValue(e);I(r)&&(t[e]={value:r})}),[e[0],e[1],t]}(t,n),i=a[0].filter(e=>e[0]!==Je&&void 0===e[1][1]).length,s={min:i>0?i:void 0,max:a[0].some(e=>e[0]===Je)?void 0:a[0].length};return{type:"Value",value:{[c]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:a,arity:s,docString:o},k:r}}case Mn["defined?"]:{const t=e[1][1];if(!Tn(t))return{type:"Value",value:!0,k:r};return{type:"Value",value:null!==n.lookUp(t),k:r}}case Mn.import:{const a=e[1][1],i=n.getValueModule(a);if(i.found)return{type:"Value",value:i.value,k:r};const s=n.getModule(a);if(!s)throw new t(`Unknown module: '${a}'`,o);const u={};for(const[e,n]of Object.entries(s.functions))u[e]={[c]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:a,functionName:e,arity:n.arity};if(s.source){const e=rr(or(xr(s.source,!1,void 0),{removeWhiteSpace:!0})),t=n.create({}),i={type:"ImportMerge",tsFunctions:u,moduleName:a,module:s,env:n,sourceCodeInfo:o};if(1===e.length)return{type:"Eval",node:e[0],env:t,k:[i,...r]};const l={type:"Sequence",nodes:e,index:1,env:t};return{type:"Eval",node:e[0],env:t,k:[l,i,...r]}}return n.registerValueModule(a,u),{type:"Value",value:u,k:r}}case Mn.effect:return{type:"Value",value:Ar(e[1][1]),k:r};case Mn.perform:{const t=[e[1][1],...e[1][2]];if(1===t.length){const e={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}const a={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[a,...r]}}case Mn.parallel:return{type:"Parallel",branches:e[1][1],env:n,k:r};case Mn.race:return{type:"Race",branches:e[1][1],env:n,k:r};default:throw new t(`Unknown special expression type: ${a}`,o)}}(e,n,r);default:throw new t(`${u(e[0])}-node cannot be evaluated`,e[2])}}function so(e,n){const{node:r,params:o,placeholders:i,env:s,sourceCodeInfo:u}=e;if(Ln(r)){const e=r[1][0];if(i.length>0){const t=s.evaluateSymbol(e);return{type:"Value",value:{[c]:!0,function:T(t,u),functionType:"Partial",params:o,placeholders:i,sourceCodeInfo:u,arity:X(i.length)},k:n}}if(_n(e)){const r=e[1],a=Vn.allNormalExpressions[r];if(s.pure&&!1===a.pure)throw new t(`Cannot call impure function '${a.name}' in pure mode`,u);if(a.dvalaImpl)return lo(a.dvalaImpl,o,s,u,n);return $o(a.evaluate(o,u,s,{executeFunction:Zr}),n)}const l=s.getValue(e[1]);if(void 0!==l)return uo(T(l,u),o,i,s,u,n);throw new a(e[1],u)}return{type:"Eval",node:r[1][0],env:s,k:[{type:"CallFn",params:o,placeholders:i,env:s,sourceCodeInfo:u},...n]}}function uo(e,n,r,o,a,i){if(r.length>0){return{type:"Value",value:{[c]:!0,function:e,functionType:"Partial",params:n,placeholders:r,sourceCodeInfo:a,arity:X(r.length)},k:i}}if(w(e))return function(e,n,t,r,o){switch(e.functionType){case"UserDefined":return lo(e,n,t,r,o);case"Partial":case"Comp":case"Constantly":case"Juxt":case"Complement":case"EveryPred":case"SomePred":case"Fnull":case"EffectMatcher":case"SpecialBuiltin":return $o(Qr(e,n,t,r),o);case"Module":{const a=t.getModule(e.moduleName),i=a?.functions[e.functionName];if(i?.dvalaImpl)return H(i.arity,n.length,r),lo(i.dvalaImpl,n,t,r,o);return $o(Qr(e,n,t,r),o)}case"Builtin":{const a=Vn.allNormalExpressions[e.normalBuiltinSymbolType];if(a.dvalaImpl)return lo(a.dvalaImpl,n,t,r,o);return $o(Qr(e,n,t,r),o)}}}(e,n,o,a,i);if(Array.isArray(e))return{type:"Value",value:to(e,n,a),k:i};if(A(e))return{type:"Value",value:no(e,n,a),k:i};if("string"==typeof e)return{type:"Value",value:ro(e,n,a),k:i};if(Y(e))return{type:"Value",value:oo(e,n,a),k:i};throw new t("Unexpected function type",a)}function lo(e,n,r,o,a){if(!J(e.arity,n.length))throw new t(`Expected ${e.arity} arguments, got ${n.length}.`,o);const i=e.evaluatedfunction,s=i[0],u=s.filter(e=>e[0]!==Je).length,l=r.create(e.evaluatedfunction[2]),c={self:{value:e}},f=[];for(let t=0;t<n.length;t+=1)if(t<u){const i=te(n[t]),u=un(s[t],i,e=>Xr(e,l.create(c)));if(u instanceof Promise){return $o(eo(e,n,r,o),a)}Object.entries(u).forEach(([e,n])=>{c[e]={value:n}})}else f.push(te(n[t]));for(let t=n.length;t<u;t++){const i=s[t],u=Xr(i[1][1],l.create(c));if(u instanceof Promise){return $o(eo(e,n,r,o),a)}const f=un(i,u,e=>Xr(e,l.create(c)));if(f instanceof Promise){return $o(eo(e,n,r,o),a)}Object.entries(f).forEach(([e,n])=>{c[e]={value:n}})}const d=s.find(e=>e[0]===Je);if(d){const t=un(d,f,e=>Xr(e,l.create(c)));if(t instanceof Promise){return $o(eo(e,n,r,o),a)}Object.entries(t).forEach(([e,n])=>{c[e]={value:n}})}const p=i[1],h=l.create(c);if(0===p.length)return{type:"Value",value:null,k:a};const y={type:"FnBody",fn:e,bodyIndex:1,env:h,outerEnv:r,sourceCodeInfo:o};return p.length,{type:"Eval",node:p[0],env:h,k:[y,...a]}}function co(e,n,r){switch(e.type){case"Sequence":return function(e,n,t){const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};const i={...e,index:o+1};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"IfBranch":return function(e,n,t){const{thenNode:r,elseNode:o,inverted:a,env:i}=e,s=a?!n:n;if(s)return{type:"Eval",node:r,env:i,k:t};if(o)return{type:"Eval",node:o,env:i,k:t};return{type:"Value",value:null,k:t}}(e,n,r);case"Cond":return function(e,n,t){const{cases:r,index:o,env:a}=e;if("test"===e.phase){if(n)return{type:"Eval",node:r[o][1],env:a,k:t};const i=o+1;if(i>=r.length)return{type:"Value",value:null,k:t};const s={...e,index:i};return{type:"Eval",node:r[i][0],env:a,k:[s,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"Match":return function(e,n,t){const{cases:r,env:o}=e;if("matchValue"===e.phase){const r=n;return fo({...e,matchValue:r,phase:"guard"},t)}if("guard"===e.phase){if(!n){return fo({...e,index:e.index+1,bindings:{}},t)}const a={};for(const[n,t]of Object.entries(e.bindings))a[n]={value:t};const i=o.create(a);return{type:"Eval",node:r[e.index][1],env:i,k:t}}return{type:"Value",value:n,k:t}}(e,n,r);case"And":return function(e,n,t){if(!n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"Or":return function(e,n,t){if(n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:a}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:a,k:t};const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"Qq":return function(e,n,t){if(null!==n)return{type:"Value",value:n,k:t};return po(e,t)}(e,n,r);case"ArrayBuild":return function(e,n,r){const{nodes:o,result:a,env:i,sourceCodeInfo:s}=e;if(e.isSpread){if(!Array.isArray(n))throw new t("Spread value is not an array",s);a.push(...n)}else a.push(n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const l=o[u],c=qn(l),f={...e,index:u,isSpread:c};return{type:"Eval",node:c?l[1]:l,env:i,k:[f,...r]}}(e,n,r);case"ObjectBuild":return function(e,n,r){const{nodes:o,result:a,env:i,sourceCodeInfo:s}=e;if(e.isSpread){if(!x(n))throw new t("Spread value is not an object",s);Object.assign(a,n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:a,k:r};const l=o[u],c=qn(l),f={...e,index:u,currentKey:null,isSpread:c};return{type:"Eval",node:c?l[1]:l,env:i,k:[f,...r]}}if(null===e.currentKey){F(n,s);const a=o[e.index+1];if(void 0===a)throw new t("Missing value for key",s);return{type:"Eval",node:a,env:i,k:[{...e,currentKey:n},...r]}}{a[e.currentKey]=n;const t=e.index+2;if(t>=o.length)return{type:"Value",value:a,k:r};const s=o[t],u=qn(s),l={...e,index:t,currentKey:null,isSpread:u};return{type:"Eval",node:u?s[1]:s,env:i,k:[l,...r]}}}(e,n,r);case"LetBind":return function(e,n,t){const{target:r,env:o,sourceCodeInfo:a}=e,i=un(r,n,e=>Xr(e,o));return en(i,e=>(o.addValues(e,a),{type:"Value",value:n,k:t}))}(e,n,r);case"LoopBind":return function(e,n,t){const{bindingNodes:r,index:o,context:a,body:i,env:s,sourceCodeInfo:u}=e,l=r[o],c=un(l[1][0],n,e=>Xr(e,s.create(a)));return en(c,n=>{Object.entries(n).forEach(([e,n])=>{a[e]={value:n}});const l=o+1;if(l>=r.length){const e=s.create(a);return{type:"Eval",node:i,env:e,k:[{type:"LoopIterate",bindingNodes:r,bindingContext:a,body:i,env:e,sourceCodeInfo:u},...t]}}const c={...e,index:l};return{type:"Eval",node:r[l][1][1],env:s.create(a),k:[c,...t]}})}(e,n,r);case"LoopIterate":return function(e,n,t){return{type:"Value",value:n,k:t}}(0,n,r);case"ForLoop":return function(e,n,r){const{returnResult:o,bindingNodes:a,result:i,env:s,sourceCodeInfo:u,context:l}=e,{asColl:c,isSeq:f}={asColl:(e,n)=>{if("string"==typeof e||Array.isArray(e)||A(e))return e;throw new t(`Expected collection, got ${y(e)}`,n)},isSeq:e=>"string"==typeof e||Array.isArray(e)};switch(e.phase){case"evalCollection":{const t=c(n,u),o=f(t)?t:Object.entries(t);if(0===o.length)return ho(e,r);const i=[...e.levelStates];i[e.bindingLevel]={collection:o,index:0};const d=a[e.bindingLevel];return en(un(d[0][1][0],N(o[0],u),e=>Xr(e,s)),n=>{Object.entries(n).forEach(([e,n])=>{l[e]={value:n}});const t=d[1];return t.length>0?mo(e,i,t,0,r):vo(e,i,r)})}case"evalLet":throw new t("ForLoop evalLet should not reach applyFrame",u);case"evalWhen":{if(!n)return yo(e,r);const t=a[e.bindingLevel][3];if(t){const n={...e,phase:"evalWhile"};return{type:"Eval",node:t,env:s,k:[n,...r]}}return go(e,r)}case"evalWhile":if(!n){const n=[...e.levelStates];return n[e.bindingLevel]={...n[e.bindingLevel],index:Number.POSITIVE_INFINITY},yo({...e,levelStates:n},r)}return go(e,r);case"evalBody":return o&&i.push(n),yo(e,r);case"evalElement":throw new t(`Unexpected ForLoop phase: ${e.phase}`,u)}return{type:"Value",value:null,k:r}}(e,n,r);case"Recur":return function(e,n,t){const{nodes:r,index:o,params:a,env:i}=e;if(a.push(n),o>=r.length)return xo(a,t,e.sourceCodeInfo);const s={...e,index:o+1};return{type:"Eval",node:r[o],env:i,k:[s,...t]}}(e,n,r);case"PerformArgs":return function(e,n,t){const{argNodes:r,index:o,params:a,env:i}=e;if(a.push(n),o>=r.length){const n=a[0];R(n,e.sourceCodeInfo);return{type:"Perform",effect:n,args:a.slice(1),k:t,sourceCodeInfo:e.sourceCodeInfo}}const s={...e,index:o+1};return{type:"Eval",node:r[o],env:i,k:[s,...t]}}(e,n,r);case"TryWith":return function(e,n){return{type:"Value",value:e,k:n}}(n,r);case"EffectResume":return function(e,n){return{type:"Value",value:n,k:e.resumeK}}(e,n);case"ParallelResume":return function(e,n,t){return{type:"ParallelResume",value:n,branchCount:e.branchCount,completedBranches:e.completedBranches,suspendedBranches:e.suspendedBranches,k:t}}(e,n,r);case"EvalArgs":return function(e,n,r){const{node:o,params:a,placeholders:s,env:u}=e,l=o[1][1],c=l[e.index];if(qn(c)){if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${y(n)}`,c[2]);a.push(...n)}else a.push(n);let f=e.index+1;for(;f<l.length;){const e=l[f];if(e[0]!==i.ReservedSymbol||"_"!==e[1])break;s.push(a.length),f++}if(f>=l.length)return so({...e,index:f},r);const d={...e,index:f},p=l[f];if(qn(p))return{type:"Eval",node:p[1],env:u,k:[d,...r]};return{type:"Eval",node:p,env:u,k:[d,...r]}}(e,n,r);case"CallFn":return function(e,n,t){const r=T(n,e.sourceCodeInfo);return uo(r,e.params,e.placeholders,e.env,e.sourceCodeInfo,t)}(e,n,r);case"FnBody":return function(e,n,t){const{fn:r,bodyIndex:o,env:a}=e,i=r.evaluatedfunction[1];if(o>=i.length)return{type:"Value",value:n,k:t};const s={...e,bodyIndex:o+1};return{type:"Eval",node:i[o],env:a,k:[s,...t]}}(e,n,r);case"BindingDefault":return function(e,n,r){const{target:o,record:a,env:i,sourceCodeInfo:s}=e,u=un(o,n,e=>Xr(e,i));if(u instanceof Promise)throw new t("Async binding default evaluation not supported in trampoline yet",s);return Object.assign(a,u),{type:"Value",value:n,k:r}}(e,n,r);case"NanCheck":return function(e,n,r){if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e.sourceCodeInfo);return{type:"Value",value:xe(n),k:r}}(e,n,r);case"DebugStep":return function(e,n,t){if("awaitValue"===e.phase){const r={expression:e.sourceCodeInfo?.code??"",value:n,location:e.sourceCodeInfo?{line:e.sourceCodeInfo.position.line,column:e.sourceCodeInfo.position.column}:{line:0,column:0},env:Po(e.env)},o={type:"DebugStep",phase:"awaitPerform",sourceCodeInfo:e.sourceCodeInfo,env:e.env};return{type:"Perform",effect:Ar("dvala.debug.step"),args:[r],k:[o,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"ImportMerge":{const t=A(n)?n:{};for(const[n,r]of Object.entries(t)){const t=e.module.functions[n];t&&E(r)&&(t.dvalaImpl=r)}const o={};for(const[n,r]of Object.entries(t))e.module.functions[n]||(o[n]=r);const a={...e.tsFunctions,...o};return e.env.registerValueModule(e.moduleName,a),{type:"Value",value:a,k:r}}default:throw new t(`Unhandled frame type: ${e.type}`,void 0)}}function fo(e,n){const{matchValue:r,cases:o,index:a,env:i,sourceCodeInfo:s}=e;for(let u=a;u<o.length;u++){const[a,l,c]=o[u],f=dn(a,r,e=>Xr(e,i));if(f instanceof Promise)throw new t("Async pattern matching not supported in trampoline yet",s);if(null===f)continue;if(c){const t={};for(const[e,n]of Object.entries(f))t[e]={value:n};return{type:"Eval",node:c,env:i.create(t),k:[{...e,phase:"guard",index:u,bindings:f},...n]}}const d={};for(const[e,n]of Object.entries(f))d[e]={value:n};return{type:"Eval",node:l,env:i.create(d),k:n}}return{type:"Value",value:null,k:n}}function po(e,n){const{nodes:t,env:r}=e;let{index:o}=e;for(;o<t.length;){const e=t[o];if(!Tn(e)||null!==r.lookUp(e))break;o++}if(o>=t.length)return{type:"Value",value:null,k:n};if(o===t.length-1)return{type:"Eval",node:t[o],env:r,k:n};const a={...e,index:o+1};return{type:"Eval",node:t[o],env:r,k:[a,...n]}}function ho(e,n){return{type:"Value",value:e.returnResult?e.result:null,k:n}}function yo(e,n){const{bindingNodes:t,env:r,sourceCodeInfo:o,context:a}=e,i=[...e.levelStates],s=e.bindingLevel,u=i[s],l=u.index+1;if(l>=u.collection.length)return 0===s?ho(e,n):yo({...e,bindingLevel:s-1},n);i[s]={...u,index:l};const c=t[s];return en(un(c[0][1][0],N(u.collection[l],o),e=>Xr(e,r)),t=>{Object.entries(t).forEach(([e,n])=>{a[e]={value:n}});const r=c[1];return r.length>0?mo({...e,levelStates:i,bindingLevel:s},i,r,0,n):vo({...e,levelStates:i,bindingLevel:s},i,n)})}function mo(e,n,t,r,o){const{env:a,context:i}=e;let s;for(let e=r;e<t.length;e++){const n=e;s=en(s,()=>{const e=t[n],[r,o]=e[1];return en(Xr(o,a),e=>en(un(r,e,e=>Xr(e,a)),e=>{Object.entries(e).forEach(([e,n])=>{i[e]={value:n}})}))})}return en(s,()=>vo({...e,levelStates:n},n,o))}function vo(e,n,t){const{bindingNodes:r,env:o}=e,a=r[e.bindingLevel],i=a[2],s=a[3];if(i){return{type:"Eval",node:i,env:o,k:[{...e,levelStates:n,phase:"evalWhen"},...t]}}if(s){return{type:"Eval",node:s,env:o,k:[{...e,levelStates:n,phase:"evalWhile"},...t]}}return go({...e,levelStates:n},t)}function go(e,n){const{bindingNodes:t,body:r,env:o}=e,a=e.bindingLevel+1;if(a<t.length){return{type:"Eval",node:t[a][0][1][1],env:o,k:[{...e,phase:"evalCollection",bindingLevel:a},...n]}}const i={...e,phase:"evalBody"};return{type:"Eval",node:r,env:o.create(e.context),k:[i,...n]}}function bo(e,n,t,r,o){const a=Ar("dvala.error"),i=[e.shortMessage];for(let t=0;t<n.length;t++){const r=n[t];if("TryWith"===r.type)for(const o of r.handlers)if(wo(o,a,r.env,e.sourceCodeInfo))return ko(o,r,i,n,t,e.sourceCodeInfo)}const s=Sr("dvala.error",t);return s.length>0?So("dvala.error",s,i,n,r,e.sourceCodeInfo,o):null}function xo(e,n,r){for(let o=0;o<n.length;o++){const a=n[o];if("LoopIterate"===a.type){const{bindingNodes:i,bindingContext:s,body:u,env:l}=a,c=n.slice(o+1);if(e.length!==i.length)throw new t(`recur expected ${i.length} parameters, got ${e.length}`,r);const f=on(i,(n,t)=>en(un(n[1][0],te(e[t]),e=>Xr(e,l)),e=>{Object.entries(e).forEach(([e,n])=>{s[e]={value:n}})}));return en(f,()=>{const e=l.getContextsRaw()[0];if(e!==s)for(const[n,t]of Object.entries(s))e[n]=t;const n={type:"LoopIterate",bindingNodes:i,bindingContext:s,body:u,env:l,sourceCodeInfo:a.sourceCodeInfo};return{type:"Eval",node:u,env:l,k:[n,...c]}})}if("FnBody"===a.type){const{fn:t,outerEnv:r}=a,i=n.slice(o+1);return lo(t,e,r,a.sourceCodeInfo,i)}}throw new t("recur called outside of loop or function body",r)}function wo(e,n,r,o){if(B(e.effectRef))return e.effectRef.name===n.name;if(w(e.effectRef)){const a=Zr(e.effectRef,[n],r,o);if(a instanceof Promise)throw new t("Effect handler predicates must be synchronous",o);return!!a}return!1}function ko(e,n,t,r,o,a){const i=[{type:"EffectResume",resumeK:r,sourceCodeInfo:a},...r.slice(o+1)];return uo(T(Xr(e.handlerNode,n.env),n.sourceCodeInfo),[t],[],n.env,a,i)}function Eo(e,n,o,a,i,s,u){if("dvala.checkpoint"===e.name&&u){const e=n[0],t={continuation:zr(o),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};u.snapshots.push(t),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift()}for(let t=0;t<o.length;t++){const r=o[t];if("TryWith"===r.type)for(const i of r.handlers)if(wo(i,e,r.env,a))return ko(i,r,n,o,t,a)}const l=Sr(e.name,i);if(l.length>0)return So(e.name,l,n,o,s,a,u);const c=function(e){const n=Hr[e];if(n)return(e,t,r)=>(H(n.arity,e.length,r),n.handler(e,t,r))}(e.name);if(c)return c(n,o,a);if("dvala.error"===e.name){const e="string"==typeof n[0]?n[0]:String(n[0]??"Unknown error");throw new r(e,a)}throw new t(`Unhandled effect: '${e.name}'`,a)}function So(e,n,o,a,i,s,u){const l=i??(new AbortController).signal,c=Array.from(o);return function o(i){if(i>=n.length){if("dvala.error"===e){const e="string"==typeof c[0]?c[0]:String(c[0]??"Unknown error");return Promise.reject(new r(e,s))}return Promise.reject(new t(`Unhandled effect: '${e}'`,s))}const[,f]=n[i];return new Promise((n,r)=>{let d=!1;function p(e){if(d)throw new t(`Effect handler called ${e}() after already calling another operation`,s);d=!0}f({effectName:e,args:c,signal:l,resume:e=>{p("resume"),e instanceof Promise?e.then(e=>{n({type:"Value",value:e,k:a})},e=>{n({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,s),k:a})}):n({type:"Value",value:e,k:a})},fail:r=>{p("fail");n({type:"Error",error:new t(r??`Effect handler failed for '${e}'`,s),k:a})},suspend:e=>{p("suspend"),r(new Ir(a,u?u.snapshots:[],u?u.nextSnapshotIndex:0,e))},next:()=>{p("next"),o(i+1).then(n,r)},get snapshots(){return u?[...u.snapshots]:[]},checkpoint:e=>{if(!u)throw new t("checkpoint is not available outside effect-enabled execution",s);const n={continuation:zr(a),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};return u.snapshots.push(n),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift(),n},resumeFrom:(e,n)=>{if(d)throw new t("Effect handler called resumeFrom() after already calling another operation",s);if(!u)throw new t("resumeFrom is not available outside effect-enabled execution",s);const o=u.snapshots.find(n=>n.index===e.index&&n.runId===e.runId);if(!o)throw new t(`Invalid snapshot: no snapshot with index ${e.index} found in current run`,s);d=!0,r(new Pr(o.continuation,n,o.index))}}).catch(e=>{d||(d=!0,Nr(e)||$r(e)?r(e):n({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,s),k:a}))})})}(0)}function Io(e,n){throw new Ir(e,[],0,n)}async function No(e,n,t,r){return Bo({type:"Eval",node:e,env:n,k:[]},t,r)}function Po(e){const n={},t=e.getHostValues();if(t)for(const[e,r]of Object.entries(t))n[e]=r;const r=e.getContextsRaw();for(let e=r.length-1;e>=0;e--)for(const[t,o]of Object.entries(r[e]))n[t]=o.value;return n}function $o(e,n){return e instanceof Promise?e.then(e=>({type:"Value",value:e,k:n}),e=>({type:"Error",error:e instanceof t?e:new t(`${e}`,void 0),k:n})):{type:"Value",value:e,k:n}}function Co(e,n,r,o){try{switch(e.type){case"Value":{if(0===e.k.length)return e;const[n,...t]=e.k;return co(n,e.value,t)}case"Eval":return io(e.node,e.env,e.k);case"Apply":return co(e.frame,e.value,e.k);case"Perform":return Eo(e.effect,e.args,e.k,e.sourceCodeInfo,n,r,o);case"Parallel":return async function(e,n,r,o,a){const i=a??(new AbortController).signal,s=e.map(e=>No(e,n,o,i)),u=await Promise.allSettled(s),l=[],c=[],f=[];for(let e=0;e<u.length;e++){const n=u[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const t=n.value;switch(t.type){case"completed":l.push({index:e,value:t.value});break;case"suspended":c.push({index:e,snapshot:t.snapshot});break;case"error":f.push(t.error)}}}if(f.length>0)throw f[0];if(c.length>0)return Io([{type:"ParallelResume",branchCount:e.length,completedBranches:l,suspendedBranches:c.slice(1)},...r],c[0].snapshot.meta);const d=Array.from({length:e.length});for(const{index:e,value:n}of l)d[e]=n;return{type:"Value",value:d,k:r}}(e.branches,e.env,e.k,n,r);case"Race":return async function(e,n,r,o,a){const i=a??(new AbortController).signal,s=e.map(()=>new AbortController),u=()=>{for(const e of s)e.abort(i.reason)};i.addEventListener("abort",u,{once:!0});try{let a=-1,i=null;const u=e.map(async(e,t)=>{const r=s[t].signal,u=await No(e,n,o,r);if("completed"===u.type&&a<0){a=t,i=u.value;for(let e=0;e<s.length;e++)e!==t&&s[e].abort("race: branch lost")}return u}),l=await Promise.allSettled(u);if(a>=0)return{type:"Value",value:i,k:r};const c=[],f=[];for(let e=0;e<l.length;e++){const n=l[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const e=n.value;switch(e.type){case"suspended":c.push(e.snapshot.meta??null);break;case"error":f.push(e.error)}}}c.length>0&&Io(r,{type:"race",branches:c});const d=f.map(e=>e.message).join("; ");throw new t(`race: all branches failed: ${d}`,void 0)}finally{i.removeEventListener("abort",u)}}(e.branches,e.env,e.k,n,r);case"ParallelResume":return function(e){const{value:n,branchCount:t,completedBranches:r,suspendedBranches:o,k:a}=e,i=new Set(r.map(e=>e.index)),s=new Set(o.map(e=>e.index));let u=-1;for(let e=0;e<t;e++)if(!i.has(e)&&!s.has(e)){u=e;break}const l=[...r,{index:u,value:n}];if(o.length>0){const e=o[0];return Io([{type:"ParallelResume",branchCount:t,completedBranches:l,suspendedBranches:o.slice(1)},...a],e.snapshot.meta)}const c=Array.from({length:t});for(const{index:e,value:n}of l)c[e]=n;return{type:"Value",value:c,k:a}}(e);case"Error":{const t=bo(e.error,e.k,n,r,o);if(null!==t)return t;throw e.error}}}catch(a){if(Nr(a))throw a;if(a instanceof t){const t=bo(a,"Value"===e.type?e.k.slice(1):e.k,n,r,o);if(null!==t)return t}throw a}}function Ao(e){let n=e;for(;;){if(n instanceof Promise)throw new t("Unexpected async operation in synchronous context. Use async.run() for async operations.",void 0);if("Value"===n.type&&0===n.k.length)return n.value;n=Co(n)}}async function jo(e){let n=e;for(;;){if(n instanceof Promise&&(n=await n),"Value"===n.type&&0===n.k.length)return n.value;n=Co(n)}}function Oo(e,n){if(0===e.length)return{type:"Value",value:null,k:[]};if(1===e.length)return{type:"Eval",node:e[0],env:n,k:[]};const t={type:"Sequence",nodes:e,index:1,env:n};return{type:"Eval",node:e[0],env:n,k:[t]}}function Mo(e,n){const r=Oo(e.body,n);try{return Ao(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return jo(Oo(e.body,n))}throw r}}function Uo(e,n){const r={type:"Eval",node:e,env:n,k:[]};try{return Ao(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return jo({type:"Eval",node:e,env:n,k:[]})}throw r}}async function Vo(e,n,t,r,o){const a=(new AbortController).signal;return Bo(Oo(e.body,n),t,a,void 0,r,o)}async function Bo(e,n,r,o,a,s){const u=null!=n&&"dvala.debug.step"in n,l={snapshots:o?o.snapshots:[],nextSnapshotIndex:o?o.nextSnapshotIndex:0,runId:"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),...void 0!==a?{maxSnapshots:a}:{}};let c=e;for(;;)try{for(;;){if(c instanceof Promise&&(c=await c),"Value"===c.type&&0===c.k.length)return{type:"completed",value:c.value};if(u&&"Eval"===c.type&&c.node[2]){const e=c.node[0];if(e===i.NormalExpression||e===i.SpecialExpression){const e={type:"DebugStep",phase:"awaitValue",sourceCodeInfo:c.node[2],env:c.env};c={...c,k:[e,...c.k]}}}c=Co(c,n,r,l)}}catch(e){if($r(e)){const{k:n}=Kr(e.continuation,s),t=l.snapshots.findIndex(n=>n.index>e.trimToIndex);-1!==t&&l.snapshots.splice(t),c={type:"Value",value:e.value,k:n};continue}if(Nr(e)){return{type:"suspended",snapshot:{continuation:Wr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:l.nextSnapshotIndex++,runId:l.runId,meta:e.meta}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}new Set(Object.keys(Hr));const Ro=new Set([...Bn,...Rn,...Object.keys(Gt)]);class To{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,n,t,r){this.originalProgram=e,this.originalPosition=n;const o=this.originalProgram.slice(0,this.originalPosition),a=t.tokenize(o).tokens.at(-1);a&&"Error"!==a[0]&&(this.searchString=a[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const n=new Set(["0_defn","0_lambda"]),t=this.generateWithPredicate(e,e=>!n.has(e)&&e.startsWith(this.searchString));t.forEach(e=>n.add(e));const r=this.generateWithPredicate(e,e=>!n.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>n.add(e));const o=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString));o.forEach(e=>n.add(e));const a=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString.toLowerCase()));return a.forEach(e=>n.add(e)),[...t,...r,...o,...a]}generateWithPredicate(e,n){const t=new Set;return Ro.forEach(e=>{n(e)&&t.add(e)}),Object.keys(e.globalContext??{}).filter(n).forEach(e=>t.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(n).forEach(e=>t.add(e))}),Object.keys(e.bindings??{}).filter(n).forEach(e=>t.add(e)),[...t].sort((e,n)=>e.localeCompare(n))}}function Do(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}const _o={collection:'{\n map: (first-coll, ...args) -> do\n let fn = last(args);\n let other-colls = slice(args, 0, count(args) - 1);\n let all-colls = [first-coll, ...other-colls];\n\n cond\n case object?(first-coll) then do\n let expected-keys = keys(first-coll) |> sort;\n doseq (obj in other-colls) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), "Expected object")\n end;\n let obj-keys = keys(obj) |> sort;\n if not(obj-keys == expected-keys) then\n perform(effect(dvala.error), ++(\n "All objects must have the same keys. Expected: ",\n join(expected-keys, ", "),\n ". Found: ",\n join(obj-keys, ", ")\n ))\n end\n end;\n reduce(keys(first-coll), (acc, k) -> do\n let a = for (coll in all-colls) -> coll(k);\n assoc(acc, k, apply(fn, a))\n end, {})\n end\n\n case string?(first-coll) then do\n doseq (s in other-colls) -> do\n if not(string?(s)) then\n perform(effect(dvala.error), "Expected string")\n end\n end;\n let len = reduce(other-colls, (m, s) -> min(m, count(s)), count(first-coll));\n let mapped = for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end;\n reduce(mapped, (acc, ch) -> do\n if not(string?(ch)) then\n perform(effect(dvala.error), "Expected string")\n end;\n ++(acc, ch)\n end, "")\n end\n\n case true then do\n doseq (x in other-colls) -> do\n if not(array?(x)) then\n perform(effect(dvala.error), "Expected array")\n end\n end;\n let len = reduce(other-colls, (m, x) -> min(m, count(x)), count(first-coll));\n for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end\n end\n end\n end,\n\n filter: (coll, fn) -> do\n cond\n case array?(coll) then\n reduce(coll, (acc, elem) -> if fn(elem) then [...acc, elem] else acc end, [])\n\n case string?(coll) then\n reduce(coll, (acc, ch) -> if fn(ch) then ++(acc, ch) else acc end, "")\n\n case object?(coll) then\n reduce(keys(coll), (acc, k) -> do\n if fn(coll(k)) then\n assoc(acc, k, coll(k))\n else\n acc\n end\n end, {})\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end,\n\n reduce: (coll, fn, initial) -> do\n cond\n case string?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case array?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case object?(coll) then do\n let values = vals(coll);\n loop (acc = initial, i = 0) -> do\n if i >= count(values) then\n acc\n else\n recur(fn(acc, nth(values, i)), i + 1)\n end\n end\n end\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end\n}',sequence:'{\n some: (seq, fn) -> do\n if null?(seq) then null\n else do\n loop (i = 0) -> do\n if i >= count(seq) then\n null\n else do\n let elem = nth(seq, i);\n if fn(elem) then elem\n else recur(i + 1)\n end\n end\n end\n end\n end\n end\n end,\n\n take-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, 0, idx)\n end,\n\n drop-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, idx)\n end,\n\n sort: (seq, ...args) -> do\n let cmp = if count(args) == 0 then compare else first(args) end;\n let is-str = string?(seq);\n let arr = if is-str then split(seq, "") else seq end;\n let len = count(arr);\n\n // merge two sorted arrays\n let merge-arrays = (left, right) -> do\n let left-len = count(left);\n let right-len = count(right);\n loop (result = [], li = 0, ri = 0) -> do\n if li >= left-len then\n ++(result, slice(right, ri))\n else if ri >= right-len then\n ++(result, slice(left, li))\n else do\n let l = nth(left, li);\n let r = nth(right, ri);\n if cmp(l, r) <= 0 then\n recur(push(result, l), li + 1, ri)\n else\n recur(push(result, r), li, ri + 1)\n end\n end\n end\n end\n end\n end;\n\n // recursive merge-sort\n let merge-sort = (a) -> do\n let n = count(a);\n if n <= 1 then a\n else do\n let mid = floor(n / 2);\n let left = merge-sort(slice(a, 0, mid));\n let right = merge-sort(slice(a, mid));\n merge-arrays(left, right)\n end\n end\n end;\n\n let sorted = merge-sort(arr);\n if is-str then join(sorted, "") else sorted end\n end\n}\n',array:'{\n mapcat: (arr, fn) -> do\n flatten(map(arr, fn), 1)\n end,\n\n moving-fn: (arr, window-size, fn) -> do\n if window-size > count(arr) then\n perform(effect(dvala.error), "Expected window-size <= array length")\n end;\n for (i in range(count(arr) - window-size + 1)) -> do\n fn(slice(arr, i, i + window-size))\n end\n end,\n\n running-fn: (arr, fn) -> do\n for (i in range(count(arr))) -> do\n fn(slice(arr, 0, i + 1))\n end\n end\n}\n',functional:'{\n "|>": (a, b) -> b(a),\n\n apply: (fn, ...args) -> do\n let arr = last(args);\n let leading = slice(args, 0, count(args) - 1);\n fn(...leading, ...arr)\n end\n}\n',object:'{\n merge-with: (...args) -> do\n let fn = last(args);\n let objs = slice(args, 0, count(args) - 1);\n if not(function?(fn)) then\n perform(effect(dvala.error), str("Expected function, got: ", type(fn)))\n end;\n if count(objs) == 0 then\n perform(effect(dvala.error), "Expected at least one object argument")\n end;\n reduce(rest(objs), (result, obj) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(obj)))\n end;\n reduce(keys(obj), (res, key) -> do\n if contains?(res, key) then\n assoc(res, key, fn(get(res, key), get(obj, key)))\n else\n assoc(res, key, get(obj, key))\n end\n end, result)\n end, do\n let f = first(objs);\n if not(object?(f)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(f)))\n end;\n f\n end)\n end\n}\n'};let Fo=!1;function Lo(){if(!Fo){Fo=!0;for(const[,e]of Object.entries(_o)){const n=Mo({body:rr(or(xr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1},Ur());if(n instanceof Promise)throw new TypeError("Core dvala sources must be synchronous");if(!A(n))continue;const t=n;for(const[e,n]of Object.entries(t)){const t=ze[e];t&&w(n)&&"UserDefined"===n.functionType&&(t.dvalaImpl=n)}}}}class qo{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var n;if(this.maxSize=null===e?null:(n=e,Math.max(0,Math.ceil(n))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${y(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[n,t])=>(e[n]=t.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,n){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const t={value:n,nextEntry:void 0,key:e};for(this.cache[e]=t,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=t),this.lastEntry=t,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}function zo(e){if(e)for(const[n,t]of Object.entries(e))Wo(t,`bindings["${n}"]`)}function Wo(e,n){if(null!=e&&"boolean"!=typeof e&&"string"!=typeof e)if("number"!=typeof e){if("function"==typeof e)throw new TypeError(`${n} is not serializable (function)`);if("object"!=typeof e)throw new TypeError(`${n} is not serializable`);if(c in e)return;if(f in e||d in e)return;if(Array.isArray(e))return void e.forEach((e,t)=>Wo(e,`${n}[${t}]`));if(Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${n} is not serializable (not a plain object)`);for(const[t,r]of Object.entries(e))Wo(r,`${n}.${t}`)}else if(!Number.isFinite(e))throw new TypeError(`${n} is not serializable (${e})`)}function Ko(e){return{body:rr(or(xr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1}}exports.Dvala=class{astCache;astCacheSize;debug;modules;constructor(e={}){if(Lo(),this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new qo(this.astCacheSize);const n=e.initialCache??{};for(const e of Object.keys(n))this.astCache.set(e,n[e])}else this.astCache=null;const n=e.modules??[];this.modules=new Map(n.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}async={run:async(e,n={})=>{if(zo(n.bindings),Do(e))return this.runBundle(e,n);const t=this.generateAst(e,n);if(n.handlers){const e=Ur(n,this.modules,n.pure),r=await Vo(t,e,n.handlers);if("completed"===r.type)return r.value;if("error"===r.type)throw r.error;throw new TypeError("Unexpected suspension in Dvala.async.run(). Use the standalone effects API for suspend/resume.")}return this.evaluateAsync(t,n)},apply:async(e,n,t={})=>this.apply(e,n,t)};run(e,n={}){if(zo(n.bindings),Do(e))return this.runBundle(e,n);const t=this.generateAst(e,n),r=this.evaluate(t,n);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous run(). Use dvala.async.run() for async operations.");return r}runBundle(e,n={}){const t=Ur(n,this.modules,n.pure),r=t.pure;t.pure=!0;for(const[r,o]of e.fileModules){const e=Mo(this.generateAst(o,n),t.create({}));t.registerValueModule(r,e)}t.pure=r;const o=Mo(this.generateAst(e.program,n),t);if(o instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use dvala.async.run() for async operations.");return o}getUndefinedSymbols(e,n={}){const t="string"==typeof e?this.generateAst(e,n):e,r=Ur(n,this.modules);return zn(t,r,Vn,Uo)}tokenize(e,n={}){const t=xr(e,this.debug,n.filePath);return n.minify?or(t,{removeWhiteSpace:!1}):t}parse(e){const n={body:[],hasDebugData:(e=or(e,{removeWhiteSpace:!0})).hasDebugData};return n.body=rr(e),n}evaluate(e,n){return Mo(e,Ur(n,this.modules,n.pure))}evaluateAsync(e,n){return function(e,n){return jo(Oo(e.body,n))}(e,Ur(n,this.modules,n.pure))}transformSymbols(e,n){return function(e,n){return{...e,tokens:e.tokens.map(e=>et(e)?[e[0],n(e[1])]:e)}}(e,n)}untokenize(e){return function(e){return e.tokens.reduce((e,n)=>`${e}${n[1]}`,"")}(e)}apply(e,n,t={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",o=this.generateApplyFunctionCall(r,n),a=this.generateAst(o,t),i=n.reduce((e,n,t)=>(e[`${r}_${t}`]=n,e),{[r]:e});return t.bindings={...t.bindings,...i},this.evaluate(a,t)}generateApplyFunctionCall(e,n){const t=n.map((n,t)=>`${e}_${t}`).join(", ");return`${e}(${t})`}generateAst(e,n){if(this.astCache){const n=this.astCache.get(e);if(n)return n}const t=this.tokenize(e,{filePath:n.filePath}),r=this.parse(t);return this.astCache?.set(e,r),r}getAutoCompleter(e,n,t={}){return new To(e,n,this,t)}},exports.asDvalaFunction=function(e,n){return k(e,n),e},exports.asUserDefinedFunction=function(e,n){return S(e,n),e},exports.assertDvalaFunction=k,exports.assertUserDefinedFunction=S,exports.isBuiltinFunction=function(e){return x(e)&&"Builtin"===e.functionType},exports.isDvalaBundle=Do,exports.isDvalaError=function(e){return e instanceof t},exports.isDvalaFunction=w,exports.isGrid=Se,exports.isMatrix=Ie,exports.isUserDefinedFunction=E,exports.isVector=we,exports.normalExpressionKeys=Bn,exports.resume=async function(e,n,r){try{const t=r?.modules?new Map(r.modules.map(e=>[e.name,e])):void 0,o=Kr(e.continuation,{values:r?.bindings,modules:t}),a={values:r?.bindings,modules:t};return await async function(e,n,t,r,o){return Bo({type:"Value",value:n,k:e},t,(new AbortController).signal,r,r?.maxSnapshots,o)}(o.k,n,r?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:r?.maxSnapshots},a)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}},exports.run=async function(e,n){try{Lo();const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=Ur({bindings:n?.bindings},t),o=Ko(e),a={values:n?.bindings,modules:t};return await Vo(o,r,n?.handlers,n?.maxSnapshots,a)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}},exports.runSync=function(e,n){Lo();const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=Ur({bindings:n?.bindings},t),o=Mo(Ko(e),r);if(o instanceof Promise)throw new TypeError("Unexpected async operation in runSync(). Use run() for async operations.");return o},exports.specialExpressionKeys=Rn;
1
+ "use strict";function e(e){if(!e.position||!e.code)return"";const n=e.position.column-1,t=e.code.length-n-1;return`${" ".repeat(Math.max(n,0))}^${" ".repeat(Math.max(t,0))}`}class n extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,n.prototype),this.name="RecurSignal",this.params=e}}class t extends Error{sourceCodeInfo;shortMessage;constructor(n,r){const o=n instanceof Error?n.message:`${n}`;super(function(n,t){if(!t)return n;const r=`${t.position.line}:${t.position.column}`;return`${n}${t.filePath?`\n${t.filePath}:${r}`:`\nLocation ${r}`}\n${t.code}\n${e(t)}`}(o,r)),this.shortMessage=o,this.sourceCodeInfo=r,Object.setPrototypeOf(this,t.prototype),this.name="DvalaError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends t{userMessage;constructor(e,n){super(e,n),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class o extends t{constructor(e,n){super(e,n),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class s extends t{symbol;constructor(e,n){super(`Undefined symbol '${e}'.`,n),this.symbol=e,Object.setPrototypeOf(this,s.prototype),this.name="UndefinedSymbolError"}}const a={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},i=new Set(Object.values(a));function u(e){return Object.keys(a).find(n=>a[n]===e)}const c=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","EffectMatcher","Builtin","SpecialBuiltin","Module"]);const l="^^fn^^",f="^^re^^",d="^^ef^^";function p(e){return null!==e&&"object"==typeof e&&(l in e&&"functionType"in e&&function(e){return"string"==typeof e&&c.has(e)}(e.functionType))}function h(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&i.has(e)}(e[0])}function y(e){return p(e)?`<function ${e.name||"λ"}>`:h(e)?`${u(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function m(e,n){return e?.sourceCodeInfo??n}function v(e,n,r){return new t(`Expected ${e}, got ${y(n)}.`,m(n,r))}function g(e,n){return b(e,n),e}function b(e,n){if(!function(e){return void 0!==e}(e))throw new t("Unexpected undefined",m(e,n))}function x(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function w(e){return null!==e&&"object"==typeof e&&!!e[l]}function k(e,n){if(!w(e))throw v("DvalaFunction",e,n)}function E(e){return w(e)&&"UserDefined"===e.functionType}function S(e,n){if(!E(e))throw v("UserDefinedFunction",e,n)}function I(e){return void 0!==e}function N(e,n){return A(e,n),e}function A(e,n){if(!I(e))throw v("not undefined",e,n)}function P(e){return Array.isArray(e)||"string"==typeof e}function $(e,n){if(!P(e))throw v("string or array",e,n)}function C(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||w(e)||V(e)||B(e))}function j(e,n){if(!C(e))throw v("object",e,n)}function O(e){return P(e)||C(e)}function M(e,n){if(!O(e))throw v("string, array or object",e,n)}function V(e){return null!==e&&"object"==typeof e&&!!e[f]}function U(e,n){if(!function(e){return V(e)||"string"==typeof e}(e))throw v("string or RegularExpression",e,n)}function B(e){return null!==e&&"object"==typeof e&&!!e[d]}function R(e,n){if(!B(e))throw v("Effect",e,n)}function T(e,n){return D(e,n),e}function D(e,n){if(!function(e){return"number"==typeof e||!!O(e)||!!w(e)}(e))throw v("FunctionLike",e,n)}function _(e,n={}){return"string"==typeof e&&((!n.nonEmpty||0!==e.length)&&(!n.char||1===e.length))}function F(e,n,t={}){if(!_(e,t))throw v(""+(t.nonEmpty?"non empty string":t.char?"character":"string"),e,n)}function L(e,n,t={}){return F(e,n,t),e}function q(e){return"string"==typeof e||"number"==typeof e}function z(e,n){return W(e,n),e}function W(e,n){if(!q(e))throw v("string or number",e,n)}const K={assert:{evaluate:(e,n)=>{const t=e[0],r=2===e.length?e[1]:`${t}`;if(F(r,n),!t)throw new o(r,n);return N(t,n)},arity:{min:1,max:2}}};function Y(e,n={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(n.integer&&!Number.isInteger(e))&&(!(n.finite&&!Number.isFinite(e))&&((!n.zero||0===e)&&((!n.nonZero||0!==e)&&(!(n.positive&&e<=0)&&(!(n.negative&&e>=0)&&(!(n.nonPositive&&e>0)&&(!(n.nonNegative&&e<0)&&(!("number"==typeof n.gt&&e<=n.gt)&&(!("number"==typeof n.gte&&e<n.gte)&&(!("number"==typeof n.lt&&e>=n.lt)&&!("number"==typeof n.lte&&e>n.lte)))))))))))))}function G(e,n,r={}){if(!Y(e,r))throw new t(`Expected ${function(e){if(e.zero)return"zero";const n=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),t=e.integer?"integer":"number",r=e.finite?"finite":"",o=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[n,r,t,o].filter(e=>!!e).join(" ")}(r)}, got ${y(e)}.`,m(e,n))}function H(e,n){const{min:t}=e;return!("number"==typeof t&&n<t)}function J(e,n,r){const{min:o,max:s}=e;if("number"==typeof o&&n<o)throw new t(`Wrong number of arguments, expected at least ${o}, got ${y(n)}.`,r);if("number"==typeof s&&n>s)throw new t(`Wrong number of arguments, expected at most ${s}, got ${y(n)}.`,r)}function X(e){return{min:e,max:e}}const Z={"<<":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e<<n),arity:X(2)},">>":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e>>n),arity:X(2)},">>>":{evaluate:([e,n],t)=>(G(e,t,{integer:!0}),G(n,t,{integer:!0,nonNegative:!0}),e>>>n),arity:X(2)},"&":{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e&n),e)),arity:{min:2}},"|":{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e|n),e)),arity:{min:2}},xor:{evaluate:([e,...n],t)=>(G(e,t,{integer:!0}),n.reduce((e,n)=>(G(n,t,{integer:!0}),e^n),e)),arity:{min:2}}};function Q(e,n){return!!O(e)&&("string"==typeof e||Array.isArray(e)?!!Y(n,{integer:!0})&&(n>=0&&n<e.length):!!Object.getOwnPropertyDescriptor(e,n))}function ee(e,n,r){if(W(e,r),W(n,r),"string"==typeof e&&"string"==typeof n)return e<n?-1:e>n?1:0;if("number"==typeof e&&"number"==typeof n)return Math.sign(e-n);throw new t(`Cannot compare values of different types: ${typeof e} and ${typeof n}`,r)}function ne(e,n,t){if(e===n)return!0;if("number"==typeof e&&"number"==typeof n)return function(e,n,t=se){if(e===n)return!0;const r=Math.abs(e-n);if(0===e||0===n||r<t)return r<t;const o=Math.abs(e),s=Math.abs(n);return r/(o+s)<t}(e,n);if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let r=0;r<e.length;r+=1)if(!ne(N(e[r],t),N(n[r],t),t))return!1;return!0}if(V(e)&&V(n))return e.s===n.s&&e.f===n.f;if(x(e)&&x(n)){const r=Object.keys(e),o=Object.keys(n);if(r.length!==o.length)return!1;for(let o=0;o<r.length;o+=1){const s=L(r[o],t);if(!ne(e[s],n[s],t))return!1}return!0}return!1}function te(e){return e??null}function re(...e){const n=new Set;for(const t of e)t.forEach(e=>n.add(e));return n}function oe(e,n){n.forEach(n=>e.add(n))}const se=1e-10;function ae(e,n=0){const t=e.split("\n");for(;t[0]?.match(/^\s*$/);)t.shift();for(;t[t.length-1]?.match(/^\s*$/);)t.pop();const r=t.reduce((e,n)=>{if(n.match(/^\s*$/))return e;const t=n.match(/^\s*/)[0].length;return Math.min(e,t)},1/0);return t.map(e=>" ".repeat(n)+e.slice(r)).join("\n").trimEnd()}function ie(e,n){if(!Array.isArray(e))throw v("array",e,n)}function ue(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw v("array of strings",e,n)}function ce(e,n){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw v("array of strings",e,n)}const le={filter:{evaluate:()=>{throw new Error("filter is implemented in Dvala")},arity:X(2)},map:{evaluate:()=>{throw new Error("map is implemented in Dvala")},arity:{min:2}},reduce:{evaluate:()=>{throw new Error("reduce is implemented in Dvala")},arity:X(3)},get:{evaluate:(e,n)=>{const[t,r]=e,o=te(e[2]);if(W(r,n),null===t)return o;M(t,n);const s=function(e,n){if(C(e)){if("string"==typeof n&&Q(e,n))return te(e[n])}else if(Y(n,{nonNegative:!0,integer:!0})&&n>=0&&n<e.length)return te(e[n])}(t,r);return void 0===s?o:s},arity:{min:2,max:3}},count:{evaluate:([e],n)=>null===e?0:"string"==typeof e?e.length:(M(e,n),Array.isArray(e)?e.length:Object.keys(e).length),arity:X(1)},"contains?":{evaluate:([e,n],t)=>null!==e&&(M(e,t),_(e)?(F(n,t),e.includes(n)):P(e)?(A(n,t),!!e.find(e=>ne(N(e),n,t))):(F(n,t),n in e)),arity:X(2)},assoc:{evaluate:([e,n,t],r)=>(M(e,r),W(n,r),A(t,r),function(e,n,t,r){if(M(e,r),W(n,r),Array.isArray(e)||"string"==typeof e){if(G(n,r,{integer:!0}),G(n,r,{gte:0}),G(n,r,{lte:e.length}),"string"==typeof e)return F(t,r,{char:!0}),`${e.slice(0,n)}${t}${e.slice(n+1)}`;const o=[...e];return o[n]=t,o}F(n,r);const o={...e};return o[n]=t,o}(e,n,t,r)),arity:X(3)},"++":{evaluate:(e,n)=>(Y(e[0])||M(e[0],n),Array.isArray(e[0])?e.reduce((e,t)=>(ie(t,n),e.concat(t)),[]):q(e[0])?e.reduce((e,t)=>(W(t,n),`${e}${t}`),""):e.reduce((e,t)=>(j(t,n),Object.assign(e,t)),{})),arity:{min:1}}},fe={range:{evaluate:(e,n)=>{const[t,r,o]=e;let s,a,i;G(t,n,{finite:!0}),1===e.length?(s=0,a=t,i=a>=0?1:-1):2===e.length?(G(r,n,{finite:!0}),s=t,a=r,i=a>=s?1:-1):(G(r,n,{finite:!0}),G(o,n,{finite:!0}),s=t,a=r,i=o,G(i,n,a>s?{positive:!0}:a<s?{negative:!0}:{nonZero:!0}));const u=[];for(let e=s;i<0?e>a:e<a;e+=i)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,n],t)=>{G(n,t,{integer:!0,nonNegative:!0});const r=[];for(let t=0;t<n;t+=1)r.push(e);return r},arity:X(2)},flatten:{evaluate:([e,n],t)=>{ie(e,t);const r=void 0===n||n===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,n,t={}){return G(e,n,t),e}(n,t,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:()=>{throw new Error("mapcat is implemented in Dvala")},arity:X(2)},"moving-fn":{evaluate:()=>{throw new Error("moving-fn is implemented in Dvala")},arity:X(3)},"running-fn":{evaluate:()=>{throw new Error("running-fn is implemented in Dvala")},arity:X(2)}},de={nth:{evaluate:(e,n)=>{const[t,r]=e,o=te(e[2]);if(G(r,n,{integer:!0}),null===t)return o;if($(t,n),r>=0&&r<t.length){return te(t[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],n)=>{if(null===e)return null;$(e,n);return te(e[0])},arity:X(1)},last:{evaluate:([e],n)=>{if(null===e)return null;$(e,n);return te(e.at(-1))},arity:X(1)},pop:{evaluate:([e],n)=>($(e,n),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:X(1)},"index-of":{evaluate:([e,n],t)=>{if(A(n,t),null===e)return null;if($(e,t),"string"==typeof e){F(n,t);const r=e.indexOf(n);return-1!==r?r:null}{const r=e.findIndex(e=>ne(N(e,t),n),t);return-1!==r?r:null}},arity:X(2)},push:{evaluate:([e,...n],t)=>($(e,t),"string"==typeof e?(ce(n,t),[e,...n].join("")):[...e,...n]),arity:{min:2}},rest:{evaluate:([e],n)=>($(e,n),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:X(1)},next:{evaluate:([e],n)=>($(e,n),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:X(1)},reverse:{evaluate:([e],n)=>null===e?null:($(e,n),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:X(1)},second:{evaluate:([e],n)=>null===e?null:($(e,n),te(e[1])),arity:X(1)},slice:{evaluate:(e,n)=>{const[t,r,o]=e;return $(t,n),G(r,n,{integer:!0}),2===e.length?(Array.isArray(t),t.slice(r)):(G(o,n,{integer:!0}),Array.isArray(t),t.slice(r,o))},arity:{min:2,max:3}},some:{evaluate:()=>{throw new Error("some is implemented in Dvala")},arity:X(2)},sort:{evaluate:()=>{throw new Error("sort is implemented in Dvala")},arity:{min:1,max:2}},take:{evaluate:([e,n],t)=>{G(n,t),$(e,t);const r=Math.max(Math.ceil(n),0);return e.slice(0,r)},arity:X(2)},"take-last":{evaluate:([e,n],t)=>{$(e,t),G(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(o)},arity:X(2)},drop:{evaluate:([e,n],t)=>{G(n,t);const r=Math.max(Math.ceil(n),0);return $(e,t),e.slice(r)},arity:X(2)},"drop-last":{evaluate:([e,n],t)=>{$(e,t),G(n,t);const r=Math.max(Math.ceil(n),0),o=e.length-r;return e.slice(0,o)},arity:X(2)},"take-while":{evaluate:()=>{throw new Error("take-while is implemented in Dvala")},arity:X(2)},"drop-while":{evaluate:()=>{throw new Error("drop-while is implemented in Dvala")},arity:X(2)}},pe=new WeakSet,he=new WeakSet,ye=new WeakSet,me=new WeakSet,ve=new WeakSet,ge=new WeakSet,be=new WeakSet;function xe(e){return Array.isArray(e)?(pe.has(e)||(we(e),Ie(e)||Se(e)),e):e}function we(e){return!!Array.isArray(e)&&(!!he.has(e)||!ye.has(e)&&(e.every(e=>Y(e))?(pe.add(e),he.add(e),!0):(ye.add(e),!1)))}function ke(e,n){if(!we(e))throw new t(`Expected a vector, but got ${e}`,n)}function Ee(e,n){if(ke(e,n),0===e.length)throw new t(`Expected a non empty vector, but got ${e}`,n)}function Se(e,n){if(!Array.isArray(e))return!1;if(ge.has(e))return!0;if(be.has(e))return!1;if(0===e.length)return be.add(e),!1;if(!Array.isArray(e[0]))return be.add(e),!1;const t=e[0].length;if(0===t)return be.add(e),!1;for(const r of e){if(!Array.isArray(r))return be.add(e),!1;if(r.length!==t)return be.add(e),!1;if(n&&r.some(e=>!n(e)))return!1}return pe.add(e),ge.add(e),!0}function Ie(e){return Se(e,Y)?(me.add(e),!0):(Array.isArray(e)&&ve.add(e),!1)}function Ne(e,n){let r=!1,o=!1;for(const s of e)if(we(s))r=!0;else if(Ie(s))o=!0;else if(!Y(s))throw new t("Invalid parameter type: "+typeof s,n);if(o){if(r)throw new t("Cannot mix vector and matrix types",n);let o=null,s=null;for(const r of e)if(Ie(r))if(null===o)o=r.length,s=r[0].length;else if(r.length!==o||r[0].length!==s)throw new t("Matrix dimensions do not match",n);return["matrix",e.map(e=>Ie(e)?e:Array.from({length:o},()=>Array.from({length:s},()=>e)))]}if(r){let r=null;for(const o of e)if(we(o))if(null===r)r=o.length;else if(o.length!==r)throw new t("Vector lengths do not match",n);return["vector",e.map(e=>we(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function Ae(e){return(n,t)=>{const[r,o]=Ne(n,t);return"number"===r?e(o[0]):"vector"===r?o[0].map(n=>e(n)):o[0].map(n=>n.map(n=>e(n)))}}function Pe(e){return(n,t)=>{const[r,o]=Ne(n,t);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((n,t)=>e(n,o[1][t])):o[0].map((n,t)=>n.map((n,r)=>e(n,o[1][t][r])))}}function $e(e,n){return(t,r)=>{if(0===t.length)return e;const[o,s]=Ne(t,r);if("number"===o)return s.reduce((e,t)=>n(e,t),e);if("vector"===o){const[e,...t]=s;return t.reduce((e,t)=>e.map((e,r)=>n(e,t[r])),e)}{const[e,...t]=s;return t.reduce((e,t)=>e.map((e,r)=>e.map((e,o)=>n(e,t[r][o]))),e)}}}const Ce={inc:{evaluate:Ae(e=>e+1),arity:X(1)},dec:{evaluate:Ae(e=>e-1),arity:X(1)},"+":{evaluate:$e(0,(e,n)=>e+n),arity:{}},"*":{evaluate:$e(1,(e,n)=>e*n),arity:{}},"/":{evaluate:(e,n)=>{if(0===e.length)return 1;const[t,r]=Ne(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?1/e:n.reduce((e,n)=>e/n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e/n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e/n[t][r])),e)}},arity:{}},"-":{evaluate:(e,n)=>{if(0===e.length)return 0;const[t,r]=Ne(e,n);if("number"===t){const[e,...n]=r;return 0===n.length?-e:n.reduce((e,n)=>e-n,e)}if("vector"===t){const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e-n[t]),e)}{const e=r[0];return r.slice(1).reduce((e,n)=>e.map((e,t)=>e.map((e,r)=>e-n[t][r])),e)}},arity:{}},quot:{evaluate:Pe((e,n)=>Math.trunc(e/n)),arity:X(2)},mod:{evaluate:Pe((e,n)=>e-n*Math.floor(e/n)),arity:X(2)},"%":{evaluate:Pe((e,n)=>e%n),arity:X(2)},sqrt:{evaluate:Ae(e=>Math.sqrt(e)),arity:X(1)},cbrt:{evaluate:Ae(e=>Math.cbrt(e)),arity:X(1)},"^":{evaluate:Pe((e,n)=>e**n),arity:X(2)},round:{evaluate:([e,n],t)=>{const[r,o]=Ne([e],t);if("number"===r){if(void 0===n||0===n)return Math.round(o[0]);{G(n,t,{integer:!0,positive:!0});const e=10**n;return Math.round(o[0]*e)/e}}if("vector"===r){const e=o[0];if(void 0===n||0===n)return e.map(e=>Math.round(e));{G(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>Math.round(e*r)/r)}}{const e=o[0];if(void 0===n||0===n)return e.map(e=>e.map(e=>Math.round(e)));{G(n,t,{integer:!0,positive:!0});const r=10**n;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:Ae(e=>Math.trunc(e)),arity:X(1)},floor:{evaluate:Ae(e=>Math.floor(e)),arity:X(1)},ceil:{evaluate:Ae(e=>Math.ceil(e)),arity:X(1)},min:{evaluate:(e,n)=>{if(1===e.length&&we(e[0])){const t=e[0];return Ee(t,n),t.reduce((e,n)=>Math.min(e,n),1/0)}const[t,...r]=e;return G(t,n),r.reduce((e,t)=>(G(t,n),Math.min(e,t)),t)},arity:{min:1}},max:{evaluate:(e,n)=>{if(1===e.length&&we(e[0])){const t=e[0];return Ee(t,n),t.reduce((e,n)=>Math.max(e,n),-1/0)}const[t,...r]=e;return G(t,n),r.reduce((e,t)=>(G(t,n),Math.max(e,t)),t)},arity:{min:1}},abs:{evaluate:Ae(e=>Math.abs(e)),arity:X(1)},sign:{evaluate:Ae(e=>Math.sign(e)),arity:X(1)}};function je([e,...n],t){const r=N(e,t);for(const e of n)if(!ne(r,N(e,t),t))return!1;return!0}const Oe={"==":{evaluate:(e,n)=>je(e,n),arity:{min:1}},"!=":{evaluate:(e,n)=>!je(e,n),arity:{min:1}},"identical?":{evaluate:e=>function([e,...n]){for(const t of n)if(t!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)<=0)return!1;r=z(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)>=0)return!1;r=z(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)<0)return!1;r=z(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...n],t)=>{let r=z(e);for(const e of n){if(ee(r,z(e),t)>0)return!1;r=z(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:X(1)},"epoch->iso-date":{evaluate:([e],n)=>(G(e,n),new Date(e).toISOString()),arity:X(1)},"iso-date->epoch":{evaluate:([e],n)=>{F(e,n);const t=new Date(e).valueOf();return G(t,n,{finite:!0}),t},arity:X(1)},boolean:{evaluate:([e])=>!!e,arity:X(1)},compare:{evaluate:([e,n],t)=>(W(e,t),W(n,t),ee(e,n,t)),arity:X(2)},"json-parse":{evaluate:([e],n)=>(F(e,n),JSON.parse(e)),arity:X(1)},"json-stringify":{evaluate:([e,n],t)=>(A(e,t),void 0===n?JSON.stringify(e):(G(n,t),JSON.stringify(e,null,n))),arity:{min:1,max:2}},"effect-name":{evaluate:([e],n)=>function(e,n){return R(e,n),e}(e,n).name,arity:X(1)},"effect-matcher":{evaluate:([e],n)=>{if("string"==typeof e)return{[l]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"string",pattern:e,flags:"",arity:X(1)};if(V(e))return{[l]:!0,sourceCodeInfo:n,functionType:"EffectMatcher",matchType:"regexp",pattern:e.s,flags:e.f,arity:X(1)};throw new t("effect-matcher expects a string or regexp pattern",n)},arity:X(1)},"type-of":{evaluate:([e])=>null==e?"null":"boolean"==typeof e?"boolean":"number"==typeof e?"number":"string"==typeof e?"string":B(e)?"effect":V(e)?"regexp":w(e)?"function":Array.isArray(e)?"array":"object",arity:X(1)}},Me={keys:{evaluate:([e],n)=>(j(e,n),Object.keys(e)),arity:X(1)},vals:{evaluate:([e],n)=>(j(e,n),Object.values(e)),arity:X(1)},entries:{evaluate:([e],n)=>(j(e,n),Object.entries(e)),arity:X(1)},find:{evaluate:([e,n],t)=>(j(e,t),F(n,t),Q(e,n)?[n,e[n]]:null),arity:X(2)},dissoc:{evaluate:([e,n],t)=>{j(e,t),F(n,t);const r={...e};return delete r[n],r},arity:X(2)},merge:{evaluate:(e,n)=>{if(0===e.length)return null;const[t,...r]=e;return j(t,n),r.reduce((e,t)=>(j(t,n),{...e,...t}),{...t})},arity:{min:0}},"merge-with":{evaluate:()=>{throw new Error("merge-with is implemented in Dvala")},arity:{min:2}},zipmap:{evaluate:([e,n],t)=>{ue(e,t),ie(n,t);const r=Math.min(e.length,n.length),o={};for(let s=0;s<r;s+=1){o[L(e[s],t)]=te(n[s])}return o},arity:X(2)},"select-keys":{evaluate:([e,n],t)=>(ue(n,t),j(e,t),n.reduce((n,t)=>(Q(e,t)&&(n[t]=te(e[t])),n),{})),arity:X(2)}},Ve={"function?":{evaluate:([e])=>w(e),arity:X(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:X(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:X(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&Y(e,{integer:!0}),arity:X(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:X(1)},"null?":{evaluate:([e])=>null==e,arity:X(1)},"zero?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),Math.abs(e)<se),arity:X(1)},"pos?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e>0),arity:X(1)},"neg?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e<0),arity:X(1)},"even?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),e%2==0),arity:X(1)},"odd?":{evaluate:([e],n)=>(G(e,n,{finite:!0}),Y(e,{integer:!0})&&e%2!=0),arity:X(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:X(1)},"collection?":{evaluate:([e])=>O(e),arity:X(1)},"sequence?":{evaluate:([e])=>P(e),arity:X(1)},"object?":{evaluate:([e])=>C(e),arity:X(1)},"regexp?":{evaluate:([e])=>V(e),arity:X(1)},"effect?":{evaluate:([e])=>B(e),arity:X(1)},"finite?":{evaluate:([e],n)=>(G(e,n),Number.isFinite(e)),arity:X(1)},"positive-infinity?":{evaluate:([e],n)=>(G(e,n),e===Number.POSITIVE_INFINITY),arity:X(1)},"negative-infinity?":{evaluate:([e],n)=>(G(e,n),e===Number.NEGATIVE_INFINITY),arity:X(1)},"true?":{evaluate:([e])=>!0===e,arity:X(1)},"false?":{evaluate:([e])=>!1===e,arity:X(1)},"empty?":{evaluate:([e],n)=>null===e||(M(e,n),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:X(1)},"not-empty?":{evaluate:([e],n)=>null!==e&&(M(e,n),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:X(1)},"vector?":{evaluate:([e])=>we(e),arity:X(1)},"matrix?":{evaluate:([e])=>Ie(e),arity:X(1)},"grid?":{evaluate:([e])=>Se(e),arity:X(1)}},Ue={regexp:{evaluate:([e,n],r)=>{F(e,r);const o=e||"(?:)",s="string"==typeof n?n:"";try{new RegExp(o,s)}catch(e){throw new t(`Invalid regular expression: ${o} ${s}`,r)}return{[f]:!0,sourceCodeInfo:r,s:o,f:s}},arity:{min:1,max:2}},"re-match":{evaluate:([e,n],t)=>{if(function(e,n){if(!V(e))throw v("RegularExpression",e,n)}(n,t),!_(e))return null;const r=new RegExp(n.s,n.f).exec(e);return r?[...r]:null},arity:X(2)},replace:{evaluate:([e,n,t],r)=>{F(e,r),U(n,r),F(t,r);const o=V(n)?new RegExp(n.s,`${n.f}`):n;return e.replace(o,t)},arity:X(3)},"replace-all":{evaluate:([e,n,t],r)=>{F(e,r),U(n,r),F(t,r);const o=V(n)?new RegExp(n.s,`${n.f.includes("g")?n.f:`${n.f}g`}`):n;return e.replaceAll(o,t)},arity:X(3)}},Be=/^\s*$/,Re={str:{evaluate:e=>e.reduce((e,n)=>e+(null==n?"":C(n)||Array.isArray(n)?JSON.stringify(n):`${n}`),""),arity:{}},number:{evaluate:([e],n)=>{F(e,n);const r=Number(e);if(Number.isNaN(r))throw new t(`Could not convert '${e}' to a number.`,n);return r},arity:X(1)},"lower-case":{evaluate:([e],n)=>(F(e,n),e.toLowerCase()),arity:X(1)},"upper-case":{evaluate:([e],n)=>(F(e,n),e.toUpperCase()),arity:X(1)},trim:{evaluate:([e],n)=>(F(e,n),e.trim()),arity:X(1)},join:{evaluate:([e,n],t)=>(ie(e,t),e.forEach(e=>W(e,t)),F(n,t),e.join(n)),arity:X(2)},split:{evaluate:([e,n,t],r)=>{F(e,r),U(n,r),void 0!==t&&G(t,r,{integer:!0,nonNegative:!0});const o="string"==typeof n?n:new RegExp(n.s,n.f);return e.split(o,t)},arity:{min:2,max:3}},"blank?":{evaluate:([e],n)=>null===e||(F(e,n),Be.test(e)),arity:X(1)}},Te={"|>":{evaluate:()=>{throw new Error("|> is implemented in Dvala")},arity:X(2)},apply:{evaluate:()=>{throw new Error("apply is implemented in Dvala")},arity:{min:2}},identity:{evaluate:([e])=>te(e),arity:X(1)},comp:{evaluate:(e,n)=>{return e.forEach(e=>D(e,n)),{[l]:!0,sourceCodeInfo:n,functionType:"Comp",params:e,arity:e.length>0?(t=e.at(-1),"number"==typeof t||O(t)?X(1):t.arity):{min:1,max:1}};var t},arity:{}},constantly:{evaluate:([e],n)=>({[l]:!0,sourceCodeInfo:n,functionType:"Constantly",value:te(e),arity:{}}),arity:X(1)}};function De(e){return ae(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function(e){const{title:n,variants:t,args:r,returns:o}=e,s=!_e(e)&&e._isOperator,a=t.map(t=>{if(_e(e)){const e=t.argumentNames.length>0?`, ${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")}`:"";return` perform(effect(${n})${e}) -> ${Fe(o)}`}return`${` ${n}(${t.argumentNames.map(e=>{let n="";return r[e].rest&&(n+="..."),n+=e,n}).join(", ")})`} -> ${Fe(o)}`}),i=s?["","Operator:",` a ${n} b -> ${Fe(o)}`]:[];return[...a,...i]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,n])=>`${e}: ${Fe(n)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ae(e,4)).join("\n\n")}`)}function _e(e){return"effect"in e}function Fe(e){const n=e.type,t=(Array.isArray(n)?n:[n]).join(" | ");return e.array||e.rest?`Array<${t}>`:t}const Le={sum:{evaluate:([e],n)=>(ke(e,n),e.reduce((e,n)=>e+n,0)),arity:X(1)},prod:{evaluate:([e],n)=>(ke(e,n),e.reduce((e,n)=>e*n,1)),arity:X(1)},mean:{evaluate:([e],n)=>(Ee(e,n),e.reduce((e,n)=>e+n,0)/e.length),arity:X(1)},median:{evaluate:([e],n)=>(Ee(e,n),function(e){const n=[...e].sort((e,n)=>e-n),t=Math.floor(n.length/2);return n.length%2==0?(n[t-1]+n[t])/2:n[t]}(e)),arity:X(1)}},qe={...K,...Z,...le,...fe,...de,...Ce,...function(e,n){return{doc:{evaluate:([t],r)=>{if(b(e),B(t)){const e=`-effect-${t.name}`,r=n[e];return r?De(r):""}if(D(t,r),!w(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?De(n):""}return"UserDefined"===t.functionType?t.docString:""},arity:X(1)},"with-doc":{evaluate:([e,n],t)=>{if(D(e,t),F(n,t),!w(e)||"UserDefined"!==e.functionType)throw new Error("with-doc can only be used with user-defined functions");return{...e,[l]:!0,docString:n}},arity:X(2)},arity:{evaluate:([e],t)=>{if(B(e)){const t=`-effect-${e.name}`,r=n[t];if(!r)return{};const o=r.variants.map(e=>e.argumentNames.length);return{min:Math.min(...o),max:Math.max(...o)}}return D(e,t),w(e)?e.arity:X(1)},arity:X(1)}}}({},{}),...Oe,...Me,...Ve,...Ue,...Re,...Te,...Le};Object.entries(qe).forEach(([e,n])=>{n.name=e});const ze={...qe},We={},Ke=[];Object.entries(ze).forEach(([e,n],t)=>{We[e]=t,Ke.push(n)});const Ye={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!0;for(const r of e)if(t=N(r,n),!t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Ge=11,He=12,Je=13,Xe=14,Ze=15,Qe=16;function en(e,n){return e instanceof Promise?e.then(n):n(e)}async function nn(e,n,t,r,o){n.push(await e);for(let e=o+1;e<t.length;e++)n.push(await r(t[e],e));return n}function tn(e,n,t){let r=t;for(let t=0;t<e.length;t++){const o=n(r,e[t],t);if(o instanceof Promise)return rn(o,e,n,t);r=o}return r}async function rn(e,n,t,r){let o=await e;for(let e=r+1;e<n.length;e++)o=await t(o,n[e],e);return o}function on(e,n){for(let t=0;t<e.length;t++){const r=n(e[t],t);if(r instanceof Promise)return sn(r,e,n,t)}}async function sn(e,n,t,r){await e;for(let e=r+1;e<n.length;e++)await t(n[e],e)}function an(e,n){if(e[0]===Je)Object.values(e[1][0]).forEach(e=>{e[1][1]&&n(e[1][1]),an(e,n)});else if(e[0]===Xe)for(let t=0;t<e[1][0].length;t+=1){const r=e[1][0][t]??null;null!==r&&(r[1][1]&&n(r[1][1]),an(r,n))}}function un(e,n,t){const r=e[2],o={};return en(cn(e,n,t,r,o),()=>o)}function cn(e,n,r,o,s){if(e[0]===Je){!function(e,n){if(!x(e))throw new t(`Expected UnknownRecord, got ${y(e)}.`,m(e,n))}(n,o);const a=new Set;let i;return en(on(Object.entries(e[1][0]),([e,t])=>{if(t[0]===He)return void(i=t);a.add(e);const u=n[e];return en(void 0!==u?u:t[1][1]?r(t[1][1]):null,e=>{const n=e??null;return A(n,o),cn(t,n,r,o,s)})}),()=>{if(i){const e=Object.entries(n).filter(([e])=>!a.has(e)).reduce((e,[n,t])=>(e[n]=N(t),e),{});s[i[1][0]]=e}})}if(e[0]===Xe){let t=null;ie(n,o);const a=[];for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;if(null!==r){if(r[0]===He){t=n;break}a.push({element:r,index:n})}}return en(on(a,({element:e,index:t})=>{const a=n[t];return en(void 0!==a?a:e[1][1]?r(e[1][1]):null,n=>{const t=n??null;return A(t,o),cn(e,t,r,o,s)})}),()=>{if(null!==t){const r=n.slice(t),o=e[1][0][t];s[o[1][0]]=r}})}e[0]===He?s[e[1][0]]=N(n):s[e[1][0][1]]=N(n)}function ln(e){const n={};return fn(e,n),n}function fn(e,n){if(null!==e)if(e[0]===Xe)for(const t of e[1][0])fn(t,n);else if(e[0]===Je)for(const t of Object.values(e[1][0]))fn(t,n);else if(e[0]===He){if(n[e[1][0]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0]]=!0}else if(e[0]===Ge){if(n[e[1][0][1]])throw new t(`Duplicate binding name: ${e[1][0]}`,e[2]);n[e[1][0][1]]=!0}}function dn(e,n,t){const r={};return en(pn(e,n,t,r),e=>e?r:null)}function pn(e,n,t,r){if(e[0]===Qe)return!0;if(e[0]===Ze){const r=e[1][0];return en(t(r),e=>ne(n,e))}if(e[0]===Ge){const o=e[1][0],s=e[1][1];if(null==n){if(s)return en(t(s),e=>(r[o[1]]=N(e),!0));r[o[1]]=n??null}else r[o[1]]=N(n);return!0}if(e[0]===Je){if(!x(n))return!1;const o=new Set;let s;const a=Object.entries(e[1][0]);let i=!0;for(const[e,u]of a)i=en(i,a=>{if(!a)return!1;if(u[0]===He)return s=u,!0;o.add(e);const i=n[e];if(void 0===i&&u[0]===Ze)return en(t(u[1][0]),e=>ne(void 0,e));return en(void 0!==i?i:u[1]&&u[1][1]?t(u[1][1]):null,e=>pn(u,e??null,t,r))});return en(i,e=>{if(!e)return!1;if(s){const e=Object.entries(n).filter(([e])=>!o.has(e)).reduce((e,[n,t])=>(e[n]=N(t),e),{});r[s[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(n))return!1;const s=o[1][0];let a=null;for(let e=0;e<s.length;e+=1){const n=s[e];if(null!==n&&n[0]===He){a=e;break}}if(null===a&&n.length!==s.length)return!1;if(null!==a&&n.length<a)return!1;let i=!0;for(let e=0;e<s.length;e+=1){const o=s[e];if(null===o)continue;if(o[0]===He){r[o[1][0]]=n.slice(e);break}const a=o;i=en(i,o=>!!o&&pn(a,N(n[e]),t,r))}return i}}const hn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const s=new Set;t([e[1][1]],n,r,o).forEach(e=>s.add(e));for(const[a,i,u]of e[1][2]){const e={};Object.assign(e,ln(a));const c=n.create(e);u&&t([u],c,r,o).forEach(e=>s.add(e)),t([i],c,r,o).forEach(e=>s.add(e))}return s}},yn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t([e[1][1]],n,r,o)},mn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const s=t(e[1][1],n.create({}),r,o),a=e[1][2];if(!a||0===a.length)return s;let i=new Set;for(const[e,s]of a){i=re(i,t([e],n,r,o),t([s],n,r,o))}return re(s,i)}},vn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>function(e,n,t,r,o){const s=new Set,a={self:{value:null}};e[0].forEach(e=>{Object.assign(a,ln(e)),an(e,e=>{oe(s,t([e],n,r,o))})});const i=n.create(a),u=t(e[1],i,r,o);return oe(s,u),s}(e[1][1],n,t,r,o)};const gn={arity:X(0),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const s=e[1][1],a=s[1][0],i=s[1][1],u=t([i],n,r,o);return an(a,e=>{oe(u,t([e],n,r,o))}),n.addValues(ln(a),a[2]),u}},bn={arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const s=e[1][1],a=s.reduce((e,n)=>{const t=ln(n[1][0]);return Object.keys(t).forEach(n=>{e[n]={value:!0}}),e},{});return re(t(s.map(e=>e[1][1]),n,r,o),t([e[1][2]],n.create(a),r,o))}};function xn(e,n,t,r,o){const s=new Set,a={},[,i,u]=e[1];return i.forEach(e=>{const[i,u,c,l]=e,[f,d]=i[1];t([d],n.create(a),r,o).forEach(e=>s.add(e)),Object.assign(a,ln(f)),u&&u.forEach(e=>{const[i,u]=e[1];t([u],n.create(a),r,o).forEach(e=>s.add(e)),Object.assign(a,ln(i))}),c&&t([c],n.create(a),r,o).forEach(e=>s.add(e)),l&&t([l],n.create(a),r,o).forEach(e=>s.add(e))}),t([u],n.create(a),r,o).forEach(e=>s.add(e)),s}const wn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>xn(e,n,t,r,o)},kn={arity:X(1),getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>xn(e,n,t,r,o)},En={arity:{},evaluateAsNormalExpression:(e,n)=>{let t=!1;for(const r of e)if(t=N(r,n),t)break;return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Sn={arity:{min:1},evaluateAsNormalExpression:(e,n)=>{for(const t of e){const e=N(t,n);if(null!==e)return e}return null},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},In={arity:{},evaluateAsNormalExpression:e=>{throw new n(e)},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},Nn={arity:{},evaluateAsNormalExpression:(e,n)=>{const t=[];for(const r of e)t.push(N(r,n));return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},An={arity:{},getUndefinedSymbols:()=>new Set},Pn={arity:{},evaluateAsNormalExpression:(e,n)=>{const t={};for(let r=0;r<e.length;r+=2){const o=e[r],s=e[r+1];F(o,n),t[o]=s??null}return t},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1],n,r,o)},$n={arity:X(1),getUndefinedSymbols:()=>new Set},Cn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>re(...e[1][1].map(e=>t([e],n,r,o)))},jn={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>{const[,s,a]=e[1];return re(t([s],n,r,o),t(a,n,r,o))}},On={arity:{min:1},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>re(...e[1][1].map(e=>t([e],n,r,o)))},Mn={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,unless:16,import:17,effect:18,perform:19,parallel:20,race:21},Vn=[Sn,Ye,En,Nn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].flat(),n,r,o)},yn,mn,kn,vn,wn,{arity:{min:2,max:3},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},gn,bn,Pn,In,hn,{arity:{},getUndefinedSymbols:(e,n,{getUndefinedSymbols:t,builtin:r,evaluateNode:o})=>t(e[1][1].filter(e=>!!e),n,r,o)},$n,An,jn,Cn,On],Un={normalExpressions:ze,specialExpressions:Vn,allNormalExpressions:Ke},Bn=Object.keys(ze),Rn=Object.keys(Mn);function Tn(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}function Dn(e){return a.UserDefinedSymbol===e[0]}function _n(e,n){return function(e,n){if(!Dn(e))throw v("UserDefinedSymbolNode",e,n)}(e,n),e}function Fn(e){return a.NormalBuiltinSymbol===e[0]}function Ln(e){return a.SpecialBuiltinSymbol===e[0]}function qn(e){return!!function(e){return e[0]===a.NormalExpression}(e)&&function(e){const n=e[0];return a.UserDefinedSymbol===n||a.NormalBuiltinSymbol===n||a.SpecialBuiltinSymbol===n}(e[1][0])}function zn(e){return e[0]===a.Spread}const Wn=(e,n,t,r)=>{const o=Array.isArray(e)?e:[[a.SpecialExpression,[Mn.block,e.body,void 0]]],s=new Set;for(const e of o)Kn(e,n,t,r)?.forEach(e=>s.add(e));return s};function Kn(e,n,r,o){const s=e[0];switch(s){case a.UserDefinedSymbol:{const t=e;return null===n.lookUp(t)?new Set([t[1]]):null}case a.NormalBuiltinSymbol:case a.SpecialBuiltinSymbol:case a.String:case a.Number:case a.ReservedSymbol:case a.Binding:return null;case a.NormalExpression:{const t=e,s=new Set;if(qn(t)){const[,[e]]=t;if(Dn(e)){null===n.lookUp(e)&&s.add(e[1])}}else{const[,[e]]=t;Kn(e,n,r,o)?.forEach(e=>s.add(e))}for(const e of t[1][1])Kn(e,n,r,o)?.forEach(e=>s.add(e));return s}case a.SpecialExpression:{const t=e,s=t[1][0];return(0,r.specialExpressions[s].getUndefinedSymbols)(t,n,{getUndefinedSymbols:Wn,builtin:r,evaluateNode:o})}case a.Spread:return Kn(e[1],n,r,o);default:throw new t(`Unhandled node type: ${s}`,e[2])}}const Yn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],Gn=[...Yn,"?",":","->","...",".",",","=",":",";"],Hn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","unless","while"]);function Jn(e){return!Hn.has(e)}const Xn=new Set(Yn);function Zn(e){return Xn.has(e)}const Qn=new Set(Gn);function et(e){return Qn.has(e)}function nt(e,n){return"Symbol"===e?.[0]&&(!n||e[1]===n)}function tt(e,n){return function(e,n){nt(e,n)||Et("Symbol",void 0,e)}(e,n),e}function rt(e,n){return"ReservedSymbol"===e?.[0]&&(!n||e[1]===n)}function ot(e,n){rt(e,n)||Et("ReservedSymbol",n,e)}function st(e,n){return ot(e,n),e}function at(e,n){return"Operator"===e?.[0]&&(!n||e[1]===n)}function it(e,n){at(e,n)||Et("Operator",n,e)}function ut(e){return"Number"===e?.[0]}function ct(e){return"BasePrefixedNumber"===e?.[0]}function lt(e){return"LParen"===e?.[0]}function ft(e){lt(e)||Et("LParen",void 0,e)}function dt(e){return"RParen"===e?.[0]}function pt(e){dt(e)||Et("RParen",void 0,e)}function ht(e){return"LBracket"===e?.[0]}function yt(e){return function(e){ht(e)||Et("LBracket",void 0,e)}(e),e}function mt(e){return"RBracket"===e?.[0]}function vt(e){mt(e)||Et("RBracket",void 0,e)}function gt(e){return"LBrace"===e?.[0]}function bt(e){return function(e){gt(e)||Et("LBrace",void 0,e)}(e),e}function xt(e){return"RBrace"===e?.[0]}function wt(e){return"string"===e?.[0]}function kt(e){return"Operator"===e?.[0]&&Zn(e[1])}function Et(e,n,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new t(`Unexpected token: ${o}, expected ${e}${n?` '${n}'`:""}`,r?.[2])}function St(e,n){return n&&(e[2]=n),e}function It(e,n){return void 0!==Mn[e]&&"fn"!==e&&"defn"!==e?St([a.SpecialBuiltinSymbol,Mn[e]],n):void 0!==We[e]?St([a.NormalBuiltinSymbol,We[e]],n):St([a.UserDefinedSymbol,e],n)}function Nt(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,n,t,r)=>n?"\\":t?"'":`\\${r}`)}const At=Object.entries(We).reduce((e,[n,t])=>(e[t]=n,e),[]),Pt=Object.entries(Mn).reduce((e,[n,t])=>(e[t]=n,e),[]);function $t(e){return Dn(e)?e[1]:Fn(e)?At[e[1]]:Pt[e[1]]}function Ct(e,n,t){const r=St([a.NormalExpression,[e,n]],t);return Fn(e)&&J(Ke[e[1]].arity,r[1][1].length,t),r}function jt(e){if(e.isAtEnd())return!0;const n=e.tryPeek();return at(n)?[";",",",":"].includes(n[1]):!!rt(n)&&["else","when","while","case","let","then","end","do"].includes(n[1])}function Ot(e,n,r,o,s){const i=e[1];switch(i){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"&":case"xor":case"|":case"|>":return Ct(n,[r,o],s);case"&&":case"||":case"??":return St([a.SpecialExpression,[Mn[i],[r,o]]],s);default:throw new t(`Unknown binary operator: ${i}`,s)}}class Mt{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),n=e?e[2]:void 0;throw new t("Unexpected end of input",n)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Vt(e,n){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new t(`Unknown binary operator: ${e}`,n)}}function Ut(e,n){const r=[];for(;!e.isAtEnd()&&!Bt(e,n);)at(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,n){if(!Bt(e,n))throw new t(`Expected ${n.map(e=>e[1]).join(" or ")}`,e.peekSourceCodeInfo())}(e,n),0===r.length)throw new t("Expected expression",e.peekSourceCodeInfo());return 1===r.length?r[0]:St([a.SpecialExpression,[Mn.block,r,void 0]],e.peekSourceCodeInfo())}function Bt(e,n){for(const t of n)if(rt(e.tryPeek(),t))return!0;return!1}function Rt(e){const n=st(e.tryPeek(),"do");e.advance();const r=[];for(;!e.isAtEnd()&&!rt(e.tryPeek(),"end")&&!rt(e.tryPeek(),"with");)if(r.push(e.parseExpression()),at(e.tryPeek(),";"))e.advance();else if(!rt(e.tryPeek(),"end")&&!rt(e.tryPeek(),"with"))throw new t("Expected end",e.peekSourceCodeInfo());let o;if(rt(e.tryPeek(),"with"))for(e.advance(),o=[];!e.isAtEnd()&&!rt(e.tryPeek(),"end");){ot(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();ot(e.tryPeek(),"then"),e.advance();const t=Ut(e,["case","end"]);o.push([n,t])}return ot(e.tryPeek(),"end"),e.advance(),St([a.SpecialExpression,[Mn.block,r,o]],n[2])}function Tt(e){const n=e.peek();if(e.advance(),!nt(n))throw new t(`Expected symbol token, got ${n[0]}`,n[2]);return"'"===n[1][0]?It(Nt(n[1]),n[2]):It(n[1],n[2])}function Dt(e,n){e.advance();const t=n[1].substring(1,n[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,n,t,r,o,s,a,i,u)=>n?"\\":r?"\n":o?"\t":s?"\r":a?"\b":i?"\f":t?'"':u);return St([a.String,t],n[2])}function _t(e){const n=e.peek();e.advance();const t=n[1],r="-"===t[0],o=(r?t.substring(1):t).replace(/_/g,"");return St([a.Number,r?-Number(o):Number(o)],n[2])}function Ft(e,{requireDefaultValue:n,noRest:r,allowLiteralPatterns:o}={}){const s=e.tryPeek();if(o&&rt(s,"_"))return e.advance(),St([Qe,[]],s[2]);if(o&&qt(s)){if(ut(s)||ct(s)){const n=_t(e);return St([Ze,[n]],s[2])}if(wt(s)){const n=Dt(e,s);return St([Ze,[n]],s[2])}if(rt(s,"true")){e.advance();const n=St([a.ReservedSymbol,"true"],s[2]);return St([Ze,[n]],s[2])}if(rt(s,"false")){e.advance();const n=St([a.ReservedSymbol,"false"],s[2]);return St([Ze,[n]],s[2])}if(rt(s,"null")){e.advance();const n=St([a.ReservedSymbol,"null"],s[2]);return St([Ze,[n]],s[2])}}if(nt(s)){const r=Tt(e);if(!Dn(r))throw new t("Expected user defined symbol",s[2]);const o=Lt(e);if(n&&!o)throw new t("Expected assignment",e.peekSourceCodeInfo());return St([Ge,[r,o]],s[2])}if(at(s,"...")){if(r)throw new t("Rest element not allowed",s[2]);e.advance();const n=_n(Tt(e));if(at(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());return St([He,[n[1],void 0]],s[2])}if(ht(s)){e.advance();const r=[];let a=e.peek(),i=!1;for(;!mt(a);){if(i)throw new t("Rest argument must be last",a[2]);if(at(a,",")){r.push(null),e.advance(),a=e.peek();continue}const n=Ft(e,{allowLiteralPatterns:o});n[0]===He&&(i=!0),r.push(n),a=e.peek(),mt(a)||(it(a,","),e.advance()),a=e.peek()}e.advance();const u=Lt(e);if(n&&!u)throw new t("Expected assignment",e.peekSourceCodeInfo());return St([Xe,[r,u]],s[2])}if(gt(s)){e.advance();const r={};let a=e.peek(),i=!1;for(;!xt(a);){if(i)throw new t("Rest argument must be last",a[2]);at(a,"...")&&(i=!0,e.advance());const n=Tt(e),u=$t(n);if(a=e.peek(),rt(a,"as")){if(i)throw new t("Rest argument can not have alias",a[2]);e.advance();const n=_n(Tt(e));if(r[n[1]])throw new t(`Duplicate binding name: ${n}`,a[2]);r[u]=St([Ge,[n,Lt(e)]],s[2])}else if(xt(a)||at(a,",")||at(a,"=")){const o=_n(n,n[2]);if(r[o[1]])throw new t(`Duplicate binding name: ${o}`,a[2]);if(i&&at(e.tryPeek(),"="))throw new t("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=St(i?[He,[o[1],Lt(e)]]:[Ge,[o,Lt(e)]],s[2])}else if(at(a,":")){if(e.advance(),a=e.peek(),o){if(!gt(a)&&!ht(a)&&!qt(a))throw new t("Expected literal, object or array pattern",a[2])}else if(!gt(a)&&!ht(a))throw new t("Expected object or array",a[2]);r[u]=Ft(e,{allowLiteralPatterns:o})}xt(e.peek())||(it(e.peek(),","),e.advance()),a=e.peek()}e.advance(),a=e.peek();const u=Lt(e);if(n&&!u)throw new t("Expected assignment",a[2]);return St([Je,[r,u]],s[2])}throw new t("Expected symbol",e.peekSourceCodeInfo())}function Lt(e){if(at(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function qt(e){return ut(e)||ct(e)||wt(e)||rt(e,"true")||rt(e,"false")||rt(e,"null")}function zt(e,n){e.advance();const t=Ft(e,{requireDefaultValue:!0,noRest:!0}),r=t[1][1];t[1][1]=void 0;const o=St([a.Binding,[t,r]],n[2]);return St([a.SpecialExpression,[Mn.let,o]],n[2])}function Wt(e){const n=function(e){const n=tt(e.tryPeek()),t=_n(Tt(e));ot(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return St([a.Binding,[St([Ge,[t,void 0]],n[2]),r]],n[2])}(e),r=[];let o=e.peek();Kt(o,["let","when","while"]);const s=[];if("let"===o[1])for(r.push("&let");nt(o,"let");){const n=zt(e,o),r=s.flatMap(e=>Object.keys(ln(e[1][0])));if(Object.keys(ln(n[1][1][1][0])).some(e=>r.includes(e)))throw new t("Duplicate binding",n[1][1][2]);s.push(n[1][1]),o=e.peek(),Kt(o,["let","when","while"]),o=e.peek()}let i,u;for(;rt(o,"when")||rt(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),i=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Kt(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Kt(o,[]),[n,s,i,u]}function Kt(e,n){if(!function(e,n){if(at(e,",")||dt(e))return!0;for(const t of n){if("let"===t&&nt(e,"let"))return!0;if(["when","while"].includes(t)&&rt(e,t))return!0}return!1}(e,n)){const r=`${[...n,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new t(`Expected symbol ${r}`,e[2])}}const Yt=(1+Math.sqrt(5))/2,Gt={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Yt,"-PHI":-Yt,"φ":Yt,"-φ":-Yt,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Ht={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,function:null,as:null,then:null,end:null,with:null,_:null,...Gt};function Jt(e){const n=st(e.tryPeek());e.advance();const t=n[1];return function(e){return e in Gt}(t)?St([a.Number,Gt[t]],n[2]):St([a.ReservedSymbol,n[1]],n[2])}const Xt=/^\$([1-9]\d?)?$/;function Zt(e){const n=e.peek();if(lt(n)&&nt(e.peekAhead(1))&&at(e.peekAhead(2),"->"))return null;try{const r=function(e){const n=e.peek();if(nt(n))return[St([Ge,[Tt(e),void 0]],n[2])];ft(n),e.advance();let r=!1,o=!1;const s=[];for(;!e.isAtEnd()&&!dt(e.peek())&&!nt(e.peek(),"let");){if(r)throw new t("Rest argument must be last",e.peekSourceCodeInfo());const n=Ft(e);if(void 0!==n[1][1]&&(o=!0),n[0]===He&&(r=!0),o&&!n[1][1])throw new t("Default arguments must be last",e.peekSourceCodeInfo());if(s.push(n),!at(e.peek(),",")&&!dt(e.peek())&&!nt(e.peek(),"let"))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());at(e.peek(),",")&&e.advance()}if(!dt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),s}(e);if(!at(e.peek(),"->"))return null;let o;if(e.advance(),rt(e.peek(),"do")){const n=Rt(e),t=n[1][2];o=t&&t.length>0?[n]:n[1][1]}else o=[e.parseExpression()];return St([a.SpecialExpression,[Mn["0_lambda"],[r,o]]],n[2])}catch{return null}}function Qt(e,n){if(e.advance(),Ln(n)&&n[1]===Mn.effect)return function(e,n){const r=n[2],o=e.peek();if(!nt(o))throw new t("effect expects a dotted name identifier",o[2]);let s=o[1];e.advance();for(;at(e.tryPeek(),".");){e.advance();const n=e.peek();if(!nt(n))throw new t("Expected identifier after dot in effect name",n[2]);s+=`.${n[1]}`,e.advance()}if(!dt(e.tryPeek()))throw new t("Expected closing parenthesis after effect name",e.peekSourceCodeInfo());return e.advance(),St([a.SpecialExpression,[Mn.effect,s]],r)}(e,n);const r=[];for(;!e.isAtEnd()&&!dt(e.tryPeek());){at(e.tryPeek(),"...")?(e.advance(),r.push(St([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!at(n,",")&&!dt(n))throw new t("Expected comma or closing parenthesis",e.tryPeek()?.[2]);at(n,",")&&e.advance()}if(!dt(e.tryPeek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Ln(n))return Fn(n)||Dn(n)?Ct(n,r,n[2]):St([a.NormalExpression,[n,r]],n[2]);{const e=n[1];if(e===Mn.import){if(1!==r.length)throw new t(`import expects exactly 1 argument, got ${r.length}`,n[2]);const o=r[0];if(!Dn(o))throw new t("import expects a module name (symbol), got a non-symbol argument",o[2]??n[2]);const s=o[1];return St([a.SpecialExpression,[e,s]],n[2])}const o=e;switch(J(Un.specialExpressions[o].arity,r.length,n[2]),o){case Mn["||"]:case Mn["&&"]:case Mn.recur:case Mn.array:case Mn.object:case Mn["??"]:return St([a.SpecialExpression,[o,r]],n[2]);case Mn["defined?"]:{const[e]=r;return St([a.SpecialExpression,[o,e]],n[2])}case Mn.perform:{const[e,...t]=r;return St([a.SpecialExpression,[o,e,t]],n[2])}case Mn.parallel:case Mn.race:return St([a.SpecialExpression,[o,r]],n[2]);case Mn["0_lambda"]:throw new t(`${o} is not allowed`,n[2]);default:throw new t(`Unknown special expression: ${o}`,n[2])}}}function er(e){const n=bt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!xt(e.tryPeek());){if(at(e.tryPeek(),"..."))e.advance(),r.push(St([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const n=e.tryPeek();if(wt(n)){const t=Dt(e,n);r.push(St([a.String,t[1]],n[2]))}else if(nt(n)){const t=n[1].startsWith("'")?Nt(n[1]):n[1];r.push(St([a.String,t],n[2])),e.advance()}else{if(!ht(n))throw new t("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),vt(e.tryPeek()),e.advance()}it(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const n=e.tryPeek();if(!at(n,",")&&!xt(n))throw new t("Expected comma or closing brace",e.peekSourceCodeInfo());at(n,",")&&e.advance()}var o;return xt(o=e.tryPeek())||Et("RBrace",void 0,o),e.advance(),St([a.SpecialExpression,[Mn.object,r]],n[2])}function nr(e){let n=function(e){const n=e.peek();if(lt(n)){e.storePosition();const n=Zt(e);if(n)return n;e.restorePosition(),e.advance();const r=e.parseExpression();if(!dt(e.peek()))throw new t("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(at(n)){const r=n[1];if(Zn(r))return e.advance(),St(void 0!==Mn[r]?[a.SpecialBuiltinSymbol,Mn[r]]:[a.NormalBuiltinSymbol,We[r]],n[2]);if("->"===r)return function(e){const n=e.peek();e.advance();const r=e.getPosition();let o;if(rt(e.peek(),"do")){const n=Rt(e),t=n[1][2];o=t&&t.length>0?[n]:n[1][1]}else o=[e.parseExpression()];const s=e.getPosition()-1;let i=0,u="NOT_SET";for(let o=r;o<=s;o+=1){const r=e.getTokenAt(o);if(nt(r)){const e=Xt.exec(r[1]);if(e){const r=e[1]??"1";if("1"===r){if(!e[1]&&"WITH_1"===u||e[1]&&"NAKED"===u)throw new t("Please make up your mind, either use $ or $1",n[2]);u=e[1]?"WITH_1":"NAKED"}if(i=Math.max(i,Number(r)),i>20)throw new t("Can't specify more than 20 arguments",n[2])}}}const c=[];for(let e=1;e<=i;e+=1)1===e&&"NAKED"===u?c.push(St([Ge,[[a.UserDefinedSymbol,"$"],void 0]],n[2])):c.push(St([Ge,[[a.UserDefinedSymbol,`$${e}`],void 0]],n[2]));return St([a.SpecialExpression,[Mn["0_lambda"],[c,o]]],n[2])}(e);throw new t(`Illegal operator: ${r}`,n[2])}if(gt(n))return er(e);if(ht(n))return function(e){const n=yt(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!mt(e.tryPeek());){at(e.tryPeek(),"...")?(e.advance(),r.push(St([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const n=e.tryPeek();if(!at(n,",")&&!mt(n))throw new t("Expected comma or closing parenthesis",e.peekSourceCodeInfo());at(n,",")&&e.advance()}return vt(e.tryPeek()),e.advance(),St([a.SpecialExpression,[Mn.array,r]],n[2])}(e);const r=n[0];switch(r){case"Number":case"BasePrefixedNumber":return _t(e);case"string":return Dt(e,n);case"Symbol":{e.storePosition();const n=Zt(e);return n||(e.restorePosition(),Tt(e))}case"ReservedSymbol":return Jt(e);case"RegexpShorthand":return function(e){const n=e.peek();e.advance();const t=n[1].lastIndexOf('"'),r=n[1].substring(2,t),o=n[1].substring(t+1),s=St([a.String,r],n[2]),i=St([a.String,o],n[2]);return St([a.NormalExpression,[St([a.NormalBuiltinSymbol,We.regexp],n[2]),[s,i]]],n[2])}(e);default:throw new t(`Unknown token type: ${r}`,n[2])}}(e),r=e.tryPeek();for(;at(r,".")||ht(r)||lt(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!nt(o))throw new t("Expected symbol",e.peekSourceCodeInfo());n=tr(n,St([a.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(ht(r)){e.advance();const o=e.parseExpression();if(!mt(e.tryPeek()))throw new t("Expected closing bracket",e.peekSourceCodeInfo());n=tr(n,o,r[2]),e.advance(),r=e.tryPeek()}else lt(r)&&(n=Qt(e,n),r=e.tryPeek());return n}function tr(e,n,t){return St([a.NormalExpression,[[a.NormalBuiltinSymbol,We.get],[e,n]]],t)}function rr(e,n=0){const r=e.tryPeek();let o;if(nt(r))switch(r[1]){case"let":return zt(e,r);case"if":case"unless":o=function(e,n){const t="unless"===n[1];e.advance();const r=e.parseExpression();ot(e.tryPeek(),"then"),e.advance();const o=Ut(e,["else","end"]);let s;return rt(e.tryPeek(),"else")&&(e.advance(),s=Ut(e,["end"])),e.advance(),St(t?[a.SpecialExpression,[Mn.unless,[r,o,s]]]:[a.SpecialExpression,[Mn.if,[r,o,s]]],n[2])}(e,r);break;case"cond":o=function(e,n){e.advance();const t=[];for(;!e.isAtEnd()&&!rt(e.tryPeek(),"end");){ot(e.tryPeek(),"case"),e.advance();const n=e.parseExpression();ot(e.tryPeek(),"then"),e.advance();const r=Ut(e,["case","end"]);if(t.push([n,r]),rt(e.tryPeek(),"end"))break}return ot(e.tryPeek()),e.advance(),St([a.SpecialExpression,[Mn.cond,t]],n[2])}(e,r);break;case"match":o=function(e,n){e.advance();const t=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!rt(e.tryPeek(),"end");){ot(e.tryPeek(),"case"),e.advance();const n=Ft(e,{allowLiteralPatterns:!0});let t;rt(e.tryPeek(),"when")&&(e.advance(),t=e.parseExpression()),ot(e.tryPeek(),"then"),e.advance();const o=Ut(e,["case","end"]);if(r.push([n,o,t]),rt(e.tryPeek(),"end"))break}return ot(e.tryPeek(),"end"),e.advance(),St([a.SpecialExpression,[Mn.match,t,r]],n[2])}(e,r);break;case"for":case"doseq":o=function(e,n){const r="doseq"===n[1];e.advance(),ft(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!dt(e.tryPeek());){const n=Wt(e),r=o.flatMap(e=>Object.keys(ln(e[0][1][0]))),s=ln(n[0][1][0]);if(Object.keys(s).some(e=>r.includes(e)))throw new t("Duplicate binding",n[0][2]);o.push(n),at(e.tryPeek(),",")&&e.advance()}pt(e.tryPeek()),e.advance(),it(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return St(r?[a.SpecialExpression,[Mn.doseq,o,s]]:[a.SpecialExpression,[Mn.for,o,s]],n[2])}(e,r);break;case"loop":o=function(e,n){e.advance(),ft(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!dt(o);){const n=Ft(e,{requireDefaultValue:!0,noRest:!0}),t=n[1][1];n[1][1]=void 0,r.push(St([a.Binding,[n,t]],n[2])),at(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new t("Expected binding",e.peekSourceCodeInfo());pt(o),e.advance(),it(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return St([a.SpecialExpression,[Mn.loop,r,s]],n[2])}(e,r)}else rt(r,"do")&&(o=Rt(e));o||=nr(e);let s=e.tryPeek();for(;!jt(e);){if(kt(s)){const t=s[1],r=Vt(t,s[2]);if(r<=n&&(12!==r||12!==n))break;const i=St(Mn[t]?[a.SpecialBuiltinSymbol,Mn[t]]:[a.NormalBuiltinSymbol,We[t]],s[2]);e.advance();o=Ot(s,i,o,rr(e,r),s[2])}else if(nt(s)){if(!Jn(s[1]))break;const r=3;if(r<=n)break;const a=Tt(e),i=rr(e,r);if(Ln(a))throw new t("Special expressions are not allowed in binary functional operators",a[2]);o=Ct(a,[o,i],s[2])}else{if("?"!==s?.[1])break;{if(1<=n)break;e.advance();const r=rr(e);if(!at(e.tryPeek(),":"))throw new t("Expected :",e.peekSourceCodeInfo());e.advance();const s=rr(e);o=St([a.SpecialExpression,[Mn.if,[o,r,s]]],o[2])}}s=e.tryPeek()}return o}function or(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new t(e[3],e[2])});const n=[],r=function(e){const n=new Mt(e);return n.parseExpression=(e=0)=>rr(n,e),n}(e);for(;!r.isAtEnd();)if(n.push(rr(r,0)),at(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new t("Expected ;",r.peekSourceCodeInfo());return n}function sr(e,{removeWhiteSpace:n}){const t=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||n&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:t}}const ar=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],ir=["0","1","2","3","4","5","6","7","8","9",...ar],ur=new Set(ar),cr=new Set(ir),lr=/\s/,fr=[0],dr=(e,n)=>{if('"'!==e[n])return fr;let t='"',r=1,o=e[n+r],s=!1;for(;o&&('"'!==o||s);)r+=1,s?(s=!1,t+=o):("\\"===o&&(s=!0),t+=o),o=e[n+r];return o?(t+='"',[r+1,["string",t]]):[r,["Error",t,void 0,`Unclosed string at position ${n}`]]};function pr(e,n,t,r){return n===t.slice(r,r+n.length)?[n.length,[e,n]]:fr}const hr=/\d/,yr=/[0-7]/,mr=/[0-9a-f]/i,vr=/[01]/,gr=/[\s)\]}(,;]/,br=(e,n)=>{let t=e[n];if("'"===t){let r=1,o=e[n+r],s=!1;for(;"'"!==o||s;){if(void 0===o)return[r,["Error",t,void 0,`Unclosed quoted symbol at position ${n}`]];r+=1,s?(s=!1,t+=o):("\\"===o&&(s=!0),t+=o),o=e[n+r]}return t+="'",[r+1,["Symbol",t]]}if(!cr.has(t)){const r=n;let o=e[n+=1];for(;o&&!ur.has(o);)t+=o,o=e[n+=1];return t.endsWith(":")?[n-r-1,["Symbol",t.slice(0,-1)]]:[n-r,["Symbol",t]]}return fr},xr=[(e,n)=>{let t=e[n];if(!t||!lr.test(t))return fr;let r=t;for(t=e[n+=1];t&&lr.test(t);)r+=t,t=e[n+=1];return[r.length,["Whitespace",r]]},(e,n)=>{if("/"===e[n]&&"*"===e[n+1]){let t=2,r="/*";for(;("*"!==e[n+t]||"/"!==e[n+t+1])&&n+t+1<e.length;)r+=e[n+t],t+=1;return n+t+1>=e.length?[t,["Error",r,void 0,`Unclosed multi-line comment at position ${n}`]]:(r+="*/",t+=2,[t,["MultiLineComment",r]])}return fr},(e,n)=>{if("/"===e[n]&&"/"===e[n+1]){let t=2,r="//";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return fr},(e,n)=>{const t=br(e,n);if(0===t[0]||!t[1])return fr;let r=t[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Ht[r]?fr:[t[0],["ReservedSymbol",r]]},(e,n)=>pr("LParen","(",e,n),(e,n)=>pr("RParen",")",e,n),(e,n)=>pr("LBracket","[",e,n),(e,n)=>pr("RBracket","]",e,n),(e,n)=>pr("LBrace","{",e,n),(e,n)=>pr("RBrace","}",e,n),dr,(e,n)=>{if("#"!==e[n])return fr;const[t,r]=dr(e,n+1);if(!r)return fr;if("Error"===r[0]){return[t+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${n}`]]}n+=t+1;let o=t+1,s="";for(;"g"===e[n]||"i"===e[n];)if(s+=e[n],o+=1,n+=1,s.includes(e[n]))return[o,["Error",`#${r[1]}${s}`,void 0,`Duplicated regexp option "${e[n]}"`]];return[o,["RegexpShorthand",`#${r[1]}${s}`]]},(e,n)=>{if("0"!==e[n])return fr;const t=e[n+1],r="b"===t||"B"===t?"binary":"o"===t||"O"===t?"octal":"x"===t||"X"===t?"hex":null;if(null===r)return fr;let o;for(o=n+2;o<e.length;o+=1){const n=e[o];if("binary"===r&&!vr.test(n))break;if("octal"===r&&!yr.test(n))break;if("hex"===r&&!mr.test(n))break}const s=o-n;if(s<=2)return fr;const a=e[o];return a&&!gr.test(a)?fr:[s,["BasePrefixedNumber",e.substring(n,o)]]},(e,n)=>{let t;const r="-"===e[n],o="+"===e[n],s=r||o?n+1:n;let a=!1,i=!1;for(t=s;t<e.length;t+=1){const r=e[t];if("_"===r){if(!hr.test(e[t-1])||!hr.test(e[t+1]))return t===s?fr:[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]}else if("."===r){if(t===s)return fr;if(a||i)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];a=!0}else if("e"===r||"E"===r){if(t===s)return fr;if(i)return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];if("."===e[t-1]||"+"===e[t-1]||"-"===e[t-1])return[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]];"+"!==e[t+1]&&"-"!==e[t+1]||(t+=1),i=!0}else if(!hr.test(r))break}if((r||o)&&t===s)return fr;const u=t-n;if(0===u)return fr;const c=e[t];return c&&":"!==c&&!gr.test(c)?[t-n+1,["Error",e.substring(n,t+1),void 0,`Invalid number format at position ${t+1}`]]:[u,["Number",e.substring(n,t)]]},(e,n)=>{const t=e.slice(n,n+3);if(n+2<e.length&&et(t))return[3,["Operator",t]];const r=e.slice(n,n+2);if(n+1<e.length&&et(r))return[2,["Operator",r]];const o=e[n]??"";return et(o)?[1,["Operator",o]]:fr},br];function wr(e,n,t){let r=0;const o={tokens:[],filePath:t,hasDebugData:n};for(;r<e.length;){const s=n?kr(e,r,t):void 0,a=Er(e,r),[i,u]=a;r+=i,u&&(s&&(u[2]=s),o.tokens.push(u))}return o}function kr(e,n,t){const r=e.substring(0,n+1).split(/\r\n|\r|\n/),o=r[r.length-1],s=function(e,n){return e.split(/\r\n|\r|\n/)[n]}(e,r.length-1);return{code:s,position:{line:r.length,column:o.length},filePath:t}}function Er(e,n){const t=n;if(0===n){const[r,o]=((e,n)=>{if("#"===e[n]&&"!"===e[n+1]){let t=2,r="#!";for(;"\n"!==e[n+t]&&n+t<e.length;)r+=e[n+t],t+=1;return[t,["SingleLineComment",r]]}return fr})(e,n);if(n+=r,r>0)return[n-t,o]}for(const r of xr){const[o,s]=r(e,n);if(n+=o,0!==o)return[n-t,s]}return[1,["Error",e[t],void 0,"Unrecognized character"]]}function Sr(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)})}function Ir(e,n){if("*"===n)return!0;if(n.endsWith(".*")){const t=n.slice(0,-2);return e===t||e.startsWith(`${t}.`)}return e===n}function Nr(e,n){if(!n)return[];const t=[];for(const[r,o]of Object.entries(n))Ir(e,r)&&t.push([r,o]);return t}class Ar{k;snapshots;nextSnapshotIndex;meta;effectName;effectArgs;_brand="SuspensionSignal";constructor(e,n,t,r,o,s){this.k=e,this.snapshots=n,this.nextSnapshotIndex=t,this.meta=r,this.effectName=o,this.effectArgs=s}}function Pr(e){return e instanceof Ar}class $r{continuation;value;trimToIndex;_brand="ResumeFromSignal";constructor(e,n,t){this.continuation=e,this.value=n,this.trimToIndex=t}}function Cr(e){return e instanceof $r}const jr=new Map;function Or(e){let n=jr.get(e);return n||(n={[d]:!0,name:e},jr.set(e,n)),n}class Mr{_contexts;globalContext;values;modules;valueModules;pure;constructor({contexts:e,values:n,modules:t,valueModules:r,pure:o}){this.globalContext=g(e[0]),this._contexts=e,this.values=n,this.modules=t??new Map,this.valueModules=r??new Map,this.pure=o??!1}getContextsRaw(){return this._contexts}getHostValues(){return this.values}getModuleScopeBindings(){const e=this._contexts[0],n={};for(const[t,r]of Object.entries(e))n[t]=r.value;return n}getGlobalContextIndex(){return this._contexts.indexOf(this.globalContext)}static fromDeserialized(e){const n=new Mr({contexts:e.contexts,values:e.values,modules:e.modules,pure:e.pure});return e.globalContextIndex>=0&&e.globalContextIndex<e.contexts.length&&(n.globalContext=e.contexts[e.globalContextIndex]),n}setContextsFromDeserialized(e,n){this._contexts=e,n>=0&&n<e.length&&(this.globalContext=e[n])}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,n){this.valueModules.set(e,n)}create(e){const n=this.globalContext,t=new Mr({contexts:[e,...this._contexts],values:this.values,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return t.globalContext=n,t}new(e){return new Mr({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}addValues(e,n){const r=this._contexts[0];for(const[o,s]of Object.entries(e)){if(r[o])throw new t(`Cannot redefine value "${o}"`,n);const e=Vr(o);if(e)throw new t(`Cannot shadow ${e}`,n);r[o]={value:te(s)}}}getValue(e){for(const n of this._contexts){const t=n[e];if(t)return t.value}return this.values?.[e]}lookUp(e){const n=e[1];for(const e of this._contexts){const t=e[n];if(t)return t}const t=this.values?.[n];return void 0!==t?{value:te(t)}:null}evaluateSymbol(e){if(Ln(e)){const n=e[1];switch(n){case Mn["&&"]:case Mn["||"]:case Mn.array:case Mn.object:case Mn["defined?"]:case Mn.recur:case Mn["??"]:{const t=g(Un.specialExpressions[n],e[2]);return{[l]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity}}default:throw new t(`Unknown special builtin symbol type: ${n}`,e[2])}}if(Fn(e)){const n=e[1],t=Ke[n],r=t.name;return{[l]:!0,functionType:"Builtin",normalBuiltinSymbolType:n,sourceCodeInfo:e[2],arity:t.arity,name:r}}const n=this.lookUp(e);if(x(r=n)&&void 0!==r.value)return n.value;var r;throw new s(e[1],e[2])}}function Vr(e){return Rn.includes(e)?`special expression "${e}"`:Bn.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Ur(e){const n=Vr(e);if(n)throw new t(`Cannot shadow ${n}`,void 0)}function Br(e={},n,r){const o=e.globalContext??{},s=e.contexts?[o,...e.contexts]:[o];let a;if(e.bindings)for(const[n,r]of Object.entries(e.bindings)){if(n.includes("."))throw new t(`Dots are not allowed in binding keys: "${n}"`,void 0);Ur(n),a||(a={}),a[n]=r}const i=new Mr({contexts:s,values:a,modules:n,pure:r});return e.globalModuleScope?i:i.create({})}function Rr(e,n){return Math.imul(e^255&n,16777619)}function Tr(e,n){return e=Rr(e,n),e=Rr(e,n>>>8),e=Rr(e,n>>>16),e=Rr(e,n>>>24)}function Dr(e,n){for(let t=0;t<n.length;t++){const r=n.charCodeAt(t);e=Rr(e,r),e=Rr(e,r>>>8)}return e}function _r(e){let n=2166136261;if(null===e)return n=Rr(n,0),n>>>0;if(void 0===e)return n=Rr(n,7),n>>>0;const t=typeof e;if("boolean"===t)return n=Rr(n,e?1:2),n>>>0;if("number"===t)return n=Rr(n,3),n=Dr(n,Object.is(e,-0)?"-0":String(e)),n>>>0;if("string"===t)return n=Rr(n,4),n=Dr(n,e),n>>>0;if(Array.isArray(e)){n=Rr(n,5),n=Tr(n,e.length);for(let t=0;t<e.length;t++)n=Tr(n,_r(e[t]));return n>>>0}n=Rr(n,6);const r=Object.keys(e).sort();n=Tr(n,r.length);for(const t of r)n=Dr(n,t),n=Tr(n,_r(e[t]));return n>>>0}function Fr(e,n){if(e===n)return!0;if(null===e||null===n)return!1;if(typeof e!=typeof n)return!1;if(Array.isArray(e)){if(!Array.isArray(n))return!1;if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!Fr(e[t],n[t]))return!1;return!0}if("object"!=typeof e)return!1;const t=e,r=n,o=Object.keys(t),s=Object.keys(r);if(o.length!==s.length)return!1;for(const e of o){if(!(e in r))return!1;if(!Fr(t[e],r[e]))return!1}return!0}function Lr(e){if(null===e)return 4;if(void 0===e)return 9;const n=typeof e;if("boolean"===n)return e?4:5;if("number"===n)return String(e).length;if("string"===n)return e.length+2;if(Array.isArray(e)){let n=2;for(let t=0;t<e.length;t++)n+=Lr(e[t])+1;return n}const t=e,r=Object.keys(t);let o=2;for(const e of r)o+=e.length+2+1+Lr(t[e])+1;return o}function qr(e,n,t,r){if(null===e||"object"!=typeof e)return _r(e);if(Array.isArray(e))for(let t=0;t<e.length;t++)qr(e[t],n,{parent:e,key:t});else{const t=e;for(const e of Object.keys(t))qr(t[e],n,{parent:t,key:e})}const o=_r(e),s=Lr(e);if(t&&s>=1){let r,a=n.get(o);a||(a=[],n.set(o,a));for(const n of a)if(Fr(n.value,e)){r=n;break}r?r.locations.push(t):a.push({hash:o,value:Wr(e),size:s,locations:[t]})}return o}function zr(e,n){if(null===e||"object"!=typeof e)return e;if(function(e){return null!==e&&"object"==typeof e&&"__poolRef"in e&&"number"==typeof e.__poolRef&&1===Object.keys(e).length}(e)){const t=e.__poolRef;if(!(t in n))throw new Error(`Unknown pool ref: ${t}`);return zr(n[t],n)}if(Array.isArray(e))return e.map(e=>zr(e,n));const t=e,r={};for(const e of Object.keys(t))r[e]=zr(t[e],n);return r}function Wr(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(e=>Wr(e));const n=e,t={};for(const e of Object.keys(n))t[e]=Wr(n[e]);return t}function Kr(e,n){const t=new Map;let r=0;function o(e){if(e instanceof Mr){if(t.has(e))return;t.set(e,r++);for(const n of e.getContextsRaw())for(const e of Object.values(n))o(e.value)}else if(Array.isArray(e))for(const n of e)o(n);else if(null!==e&&"object"==typeof e)for(const n of Object.values(e))o(n)}function s(e,n){if(e instanceof Mr)return{__csRef:t.get(e)};if(Array.isArray(e))return e.map((e,n)=>s(e));if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=s(r);return n}return e}o(e),void 0!==n&&o(n);const a=Array.from(t.entries()).map(([e,n])=>({id:n,contexts:e.getContextsRaw().map((e,n)=>{const t={};for(const[n,r]of Object.entries(e))t[n]={value:s(r.value)};return t}),globalContextIndex:e.getGlobalContextIndex(),pure:e.pure})),i=s(e),u=void 0!==n?s(n):void 0;return{version:2,contextStacks:a,k:i,...void 0!==u?{meta:u}:{}}}function Yr(e,n,t,r){const o=Kr(e,r);n.length>0&&(o.snapshots=n),o.nextSnapshotIndex=t;const s=[o.contextStacks,o.k];if(void 0!==o.meta&&s.push(o.meta),o.snapshots)for(const e of o.snapshots)s.push(e);const{roots:a,pool:i}=function(e,n=200){const t=e.map(e=>Wr(e)),r=new Map;for(let e=0;e<t.length;e++)qr(t[e],r,null);const o={};let s=0;const a=Array.from(r.values()).flat().filter(e=>e.locations.length>1&&e.size>=n).sort((e,n)=>n.size-e.size),i=new Map;for(const e of a){if(i.has(e))continue;const n=s++;o[n]=e.value,i.set(e,n);for(const t of e.locations)Array.isArray(t.parent),t.parent[t.key]={__poolRef:n}}return{roots:t,pool:o}}(s,200);let u=0;if(o.contextStacks=a[u++],o.k=a[u++],void 0!==o.meta&&(o.meta=a[u++]),o.snapshots)for(let e=0;e<o.snapshots.length;e++)o.snapshots[e]=a[u++];return Object.keys(i).length>0&&(o.pool=i),o}function Gr(e,n){let r=e;if(2!==r.version)throw new t(`Unsupported suspension blob version: ${r.version} (expected 2)`,void 0);if(r.pool&&Object.keys(r.pool).length>0){const e=r.pool;r={...r,contextStacks:zr(r.contextStacks,e),k:zr(r.k,e),...void 0!==r.meta?{meta:zr(r.meta,e)}:{},...r.snapshots?{snapshots:r.snapshots.map(n=>zr(n,e))}:{}},delete r.pool}const o=new Map;for(const e of r.contextStacks){const t=e.contexts.map(()=>({})),r=Mr.fromDeserialized({contexts:t,globalContextIndex:e.globalContextIndex,values:n?.values,modules:n?.modules,pure:e.pure});o.set(e.id,r)}function s(e){if(function(e){return null!==e&&"object"==typeof e&&"__csRef"in e&&"number"==typeof e.__csRef}(e)){const n=o.get(e.__csRef);if(!n)throw new t(`Invalid suspension blob: unknown context stack ref ${e.__csRef}`,void 0);return n}if(Array.isArray(e))return e.map(s);if(null!==e&&"object"==typeof e){const n={};for(const[t,r]of Object.entries(e))n[t]=s(r);return n}return e}for(const e of r.contextStacks){const n=o.get(e.id),t=e.contexts.map(e=>{const n=e,t={};for(const[e,r]of Object.entries(n))t[e]={value:s(r.value)};return t});n.setContextsFromDeserialized(t,e.globalContextIndex)}return{k:s(r.k),meta:void 0!==r.meta?s(r.meta):void 0,snapshots:r.snapshots??[],nextSnapshotIndex:r.nextSnapshotIndex??0}}function Hr(){return"undefined"!=typeof process&&"function"==typeof process.stdout?.write}function Jr(e){return"string"==typeof e?e:null===e?"null":"number"==typeof e||"boolean"==typeof e?String(e):w(e)?"Builtin"===e.functionType?`<builtin function ${e.normalBuiltinSymbolType}>`:`<function ${e.n??"λ"}>`:B(e)?`<effect ${e.name}>`:V(e)?`/${e.s}/${e.f}`:"object"==typeof e&&e instanceof RegExp?`${e}`:JSON.stringify(Xr(e),null,2)}function Xr(e){if(e===Number.POSITIVE_INFINITY)return"∞";if(e===Number.NEGATIVE_INFINITY)return"-∞";if(w(e))return Jr(e);if(B(e))return Jr(e);if(V(e))return Jr(e);if(Array.isArray(e))return e.map(Xr);if("object"==typeof e&&null!==e){const n={};for(const[t,r]of Object.entries(e))n[t]=Xr(r);return n}return e}const Zr={"dvala.io.print":{handler:function(e,n){const t=e[0],r=Jr(t);return Hr()?process.stdout.write(r):console.log(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.println":{handler:function(e,n){const t=e[0],r=Jr(t);return Hr()?process.stdout.write(`${r}\n`):"function"==typeof globalThis.alert?globalThis.alert(r):console.log(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.error":{handler:(e,n)=>{const t=e[0],r=Jr(t);return Hr()?process.stderr.write(`${r}\n`):console.error(r),{type:"Value",value:t,k:n}},arity:X(1)},"dvala.io.read-line":{handler:(e,n,r)=>{const o="string"==typeof e[0]?e[0]:"";if("function"==typeof globalThis.prompt){return{type:"Value",value:globalThis.prompt(o)??null,k:n}}throw new t('dvala.io.read-line is not supported in this environment. In Node.js, register a "dvala.io.read-line" host handler.',r)},arity:{min:0,max:1}},"dvala.io.read-stdin":{handler:(e,n,r)=>{if(!Hr()||!process.stdin)throw new t("dvala.io.read-stdin is not supported in this environment. Node.js is required.",r);return new Promise((e,t)=>{const r=[];process.stdin.setEncoding("utf-8"),process.stdin.on("data",e=>r.push(e)),process.stdin.on("end",()=>e({type:"Value",value:r.join(""),k:n})),process.stdin.on("error",e=>t(e)),process.stdin.resume()})},arity:X(0)},"dvala.random":{handler:(e,n)=>({type:"Value",value:Math.random(),k:n}),arity:X(0)},"dvala.random.uuid":{handler:(e,n)=>({type:"Value",value:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}),k:n}),arity:X(0)},"dvala.random.int":{handler:(e,n,r)=>{const o=e[0],s=e[1];if("number"!=typeof o||!Number.isInteger(o))throw new t(`dvala.random.int: min must be an integer, got ${"number"==typeof o?o:typeof o}`,r);if("number"!=typeof s||!Number.isInteger(s))throw new t(`dvala.random.int: max must be an integer, got ${"number"==typeof s?s:typeof s}`,r);if(s<=o)throw new t(`dvala.random.int: max (${s}) must be greater than min (${o})`,r);return{type:"Value",value:Math.floor(Math.random()*(s-o))+o,k:n}},arity:X(2)},"dvala.random.item":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.item: argument must be an array, got "+typeof o,r);if(0===o.length)throw new t("dvala.random.item: cannot pick from an empty array",r);return{type:"Value",value:o[Math.floor(Math.random()*o.length)],k:n}},arity:X(1)},"dvala.random.shuffle":{handler:(e,n,r)=>{const o=e[0];if(!Array.isArray(o))throw new t("dvala.random.shuffle: argument must be an array, got "+typeof o,r);const s=Array.from(o);for(let e=s.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1)),t=s[e];s[e]=s[n],s[n]=t}return{type:"Value",value:s,k:n}},arity:X(1)},"dvala.time.now":{handler:(e,n)=>({type:"Value",value:Date.now(),k:n}),arity:X(0)},"dvala.time.zone":{handler:(e,n)=>({type:"Value",value:Intl.DateTimeFormat().resolvedOptions().timeZone,k:n}),arity:X(0)},"dvala.checkpoint":{handler:(e,n)=>({type:"Value",value:null,k:n}),arity:{min:0,max:1}},"dvala.sleep":{handler:(e,n,r)=>{const o=e[0];if("number"!=typeof o||o<0)throw new t(`dvala.sleep requires a non-negative number argument, got ${"number"==typeof o?o:typeof o}`,r);return new Promise(e=>{setTimeout(()=>e({type:"Value",value:null,k:n}),o)})},arity:X(1)}};function Qr(e){const n=Zr[e];if(n)return(e,t,r)=>(J(n.arity,e.length,r),n.handler(e,t,r))}function eo(e,n){switch(e[0]){case a.Number:case a.String:return e[1];case a.NormalBuiltinSymbol:case a.SpecialBuiltinSymbol:case a.UserDefinedSymbol:return n.evaluateSymbol(e);case a.ReservedSymbol:return uo(e);case a.NormalExpression:{const r=function(e,n){const r=e[2];return en(function(e,n){const r=[],o=[],s=on(e,(e,s)=>zn(e)?en(eo(e[1],n),n=>{if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${y(e)}`,e[2]);r.push(...n)}):e[0]!==a.ReservedSymbol||"_"!==e[1]?en(eo(e,n),e=>{r.push(e)}):void o.push(s));return en(s,()=>({params:r,placeholders:o}))}(e[1][1],n),({params:o,placeholders:a})=>{if(qn(e)){const i=e[1][0];if(a.length>0){return en(eo(i,n),e=>({[l]:!0,function:T(e,r),functionType:"Partial",params:o,placeholders:a,sourceCodeInfo:r,arity:X(a.length)}))}if(Fn(i)){const r=i[1],s=Un.allNormalExpressions[r];if(n.pure&&!1===s.pure)throw new t(`Cannot call impure function '${s.name}' in pure mode`,e[2]);return s.dvalaImpl?ro(s.dvalaImpl,o,n,e[2]):s.evaluate(o,e[2],n,{executeFunction:no})}{const t=n.getValue(i[1]);if(void 0!==t)return no(T(t,r),o,n,r);throw new s(i[1],e[2])}}return en(eo(e[1][0],n),e=>{const t=T(e,r);if(a.length>0){return{[l]:!0,function:t,functionType:"Partial",params:o,placeholders:a,sourceCodeInfo:r,arity:X(a.length)}}return no(t,o,n,r)})})}(e,n);return en(r,n=>{if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e[2]);return xe(n)})}case a.SpecialExpression:{const r={type:"Eval",node:e,env:n,k:[]};try{return xe(Mo(r))}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo({type:"Eval",node:e,env:n,k:[]}).then(e=>xe(e))}throw r}}default:throw new t(`${u(e[0])}-node cannot be evaluated`,e[2])}}function no(e,n,r,o){if(w(e))return to(e,n,r,o);if(Array.isArray(e))return so(e,n,o);if(C(e))return oo(e,n,o);if("string"==typeof e)return ao(e,n,o);if(Y(e))return io(e,n,o);throw new t("Unexpected function type",o)}function to(e,n,r,o){switch(e.functionType){case"UserDefined":return ro(e,n,r,o);case"Partial":return function(e,n,r,o){const s=[...e.params];if(n.length!==e.placeholders.length)throw new t(`(partial) expects ${e.placeholders.length} arguments, got ${n.length}.`,o);const a=[...n];for(const n of e.placeholders)s.splice(n,0,a.shift());return no(e.function,s,r,o)}(e,n,r,o);case"Comp":return function(e,n,r,o){const{params:s}=e;if(0===s.length){if(1!==n.length)throw new t(`(comp) expects one argument, got ${y(n.length)}.`,o);return N(n[0],o)}let a=n;for(let e=s.length-1;e>=0;e--){const n=s[e];a=en(a,e=>en(no(T(n,o),e,r,o),e=>[e]))}return en(a,e=>N(e[0],o))}(e,n,r,o);case"Constantly":return e.value;case"Juxt":return function(e,n,t,r){return function(e,n){const t=[];for(let r=0;r<e.length;r++){const o=n(e[r],r);if(o instanceof Promise)return nn(o,t,e,n,r);t.push(o)}return t}(e.params,e=>no(T(e,r),n,t,r))}(e,n,r,o);case"Complement":return en(no(e.function,n,r,o),e=>!e);case"EveryPred":return function(e,n,t,r){const o=[];for(const s of e.params)for(const e of n)o.push(()=>no(T(s,r),[e],t,r));return tn(o,(e,n)=>!!e&&en(n(),e=>!!e),!0)}(e,n,r,o);case"SomePred":return function(e,n,t,r){const o=[];for(const s of e.params)for(const e of n)o.push(()=>no(T(s,r),[e],t,r));return tn(o,(e,n)=>!!e||en(n(),e=>!!e),!1)}(e,n,r,o);case"Fnull":return function(e,n,t,r){const o=n.map((n,t)=>null===n?te(e.params[t]):n);return no(T(e.function,r),o,t,r)}(e,n,r,o);case"EffectMatcher":return function(e,n,t){J({min:1,max:1},n.length,e.sourceCodeInfo??t);const r=n[0];R(r,t);const o=r.name;if("string"===e.matchType)return Ir(o,e.pattern);const s=new RegExp(e.pattern,e.flags);return s.test(o)}(e,n,o);case"Builtin":{const s=Un.allNormalExpressions[e.normalBuiltinSymbolType];return s.dvalaImpl?ro(s.dvalaImpl,n,r,o):function(e,n,r,o){const s=g(Un.allNormalExpressions[e.normalBuiltinSymbolType],o);if(r.pure&&!1===s.pure)throw new t(`Cannot call impure function '${e.name}' in pure mode`,o);if(s.dvalaImpl)return ro(s.dvalaImpl,n,r,o);return s.evaluate(n,o,r,{executeFunction:no})}(e,n,r,o)}case"SpecialBuiltin":return function(e,n,r,o){const s=g(Un.specialExpressions[e.specialBuiltinSymbolType],o);if(s.evaluateAsNormalExpression)return s.evaluateAsNormalExpression(n,o,r,{executeFunction:no});throw new t(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,o)}(e,n,r,o);case"Module":return function(e,n,r,o){const s=r.getModule(e.moduleName);if(!s)throw new t(`Module '${e.moduleName}' not found.`,o);const a=s.functions[e.functionName];if(!a)throw new t(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,o);if(r.pure&&!1===a.pure)throw new t(`Cannot call impure function '${e.functionName}' in pure mode`,o);if(J(a.arity,n.length,o),a.dvalaImpl)return ro(a.dvalaImpl,n,r,o);return a.evaluate(n,o,r,{executeFunction:no})}(e,n,r,o)}}function ro(e,r,o,s){function a(r){if(!H(e.arity,r.length))throw new t(`Expected ${e.arity} arguments, got ${r.length}.`,s);const i=e.evaluatedfunction,u=i[0],c=u.filter(e=>e[0]!==He).length,l=o.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];let p,h;for(let e=0;e<r.length;e+=1)if(e<c){const n=e;p=en(p,()=>{const e=te(r[n]);return en(un(u[n],e,e=>eo(e,l.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})})})}else d.push(te(r[e]));for(let e=r.length;e<c;e++){const n=e;h=en(h,()=>{const e=u[n];return en(eo(e[1][1],o.create(f)),n=>en(un(e,n,e=>eo(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}))})}return en(p,()=>en(h,()=>{const e=u.find(e=>e[0]===He),t=void 0!==e?en(un(e,d,e=>eo(e,o.create(f))),e=>{Object.entries(e).forEach(([e,n])=>{f[e]={value:n}})}):void 0;return en(t,()=>{const e=l.create(f),t=tn(i[1],(n,t)=>eo(t,e),null);return t instanceof Promise?t.catch(e=>{if(e instanceof n)return a(e.params);throw e}):t})}))}for(;;)try{return a(r)}catch(e){if(e instanceof n){r=e.params;continue}throw e}}function oo(e,n,r){if(1!==n.length)throw new t("Object as function requires one string parameter.",r);const o=n[0];return F(o,r),te(e[o])}function so(e,n,r){if(1!==n.length)throw new t("Array as function requires one non negative integer parameter.",r);const o=n[0];return G(o,r,{integer:!0,nonNegative:!0}),te(e[o])}function ao(e,n,r){if(1!==n.length)throw new t("String as function requires one Obj parameter.",r);const o=te(n[0]);if(C(o))return te(o[e]);if(Y(o,{integer:!0}))return te(e[o]);throw new t(`string as function expects Obj or integer parameter, got ${y(o)}`,r)}function io(e,n,r){if(G(e,void 0,{integer:!0}),1!==n.length)throw new t("Number as function requires one Arr parameter.",r);const o=n[0];return $(o,r),te(o[e])}function uo(e){const n=e[1];if(!["true","false","null"].includes(n))throw new t(`Reserved symbol ${n} cannot be evaluated`,e[2]);return g(Ht[n],e[2])}function co(e,n,r){switch(e[0]){case a.Number:case a.String:return{type:"Value",value:e[1],k:r};case a.NormalBuiltinSymbol:case a.SpecialBuiltinSymbol:case a.UserDefinedSymbol:return{type:"Value",value:n.evaluateSymbol(e),k:r};case a.ReservedSymbol:return{type:"Value",value:uo(e),k:r};case a.NormalExpression:return function(e,n,t){const r=e[1][1],o=e[2],s={type:"NanCheck",sourceCodeInfo:o},i={type:"EvalArgs",node:e,index:0,params:[],placeholders:[],env:n,sourceCodeInfo:o};let u=0;for(;u<r.length;){const e=r[u];if(e[0]!==a.ReservedSymbol||"_"!==e[1])break;i.placeholders.push(i.params.length),u++}if(i.index=u,u>=r.length)return lo(i,[s,...t]);const c=r[u],l=[i,s,...t];if(zn(c))return{type:"Eval",node:c[1],env:n,k:l};return{type:"Eval",node:c,env:n,k:l}}(e,n,r);case a.SpecialExpression:return function(e,n,r){const o=e[2],s=e[1][0];switch(s){case Mn.if:case Mn.unless:{const[t,a,i]=e[1][1];return{type:"Eval",node:t,env:n,k:[{type:"IfBranch",thenNode:a,elseNode:i,inverted:s===Mn.unless,env:n,sourceCodeInfo:o},...r]}}case Mn["&&"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!0,k:r};const s={type:"And",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[s,...r]}}case Mn["||"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:!1,k:r};const s={type:"Or",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:t[0],env:n,k:r}:{type:"Eval",node:t[0],env:n,k:[s,...r]}}case Mn["??"]:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const s=t[0];if(Dn(s)&&null===n.lookUp(s)){if(1===t.length)return{type:"Value",value:null,k:r};const e={type:"Qq",nodes:t,index:2,env:n,sourceCodeInfo:o},s=t[1];return Dn(s)&&null===n.lookUp(s)?function(e,n){return mo(e,n)}(e,r):2===t.length?{type:"Eval",node:s,env:n,k:r}:{type:"Eval",node:s,env:n,k:[e,...r]}}const a={type:"Qq",nodes:t,index:1,env:n,sourceCodeInfo:o};return 1===t.length?{type:"Eval",node:s,env:n,k:r}:{type:"Eval",node:s,env:n,k:[a,...r]}}case Mn.cond:{const t=e[1][1];if(0===t.length)return{type:"Value",value:null,k:r};const s={type:"Cond",phase:"test",cases:t,index:0,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][0],env:n,k:[s,...r]}}case Mn.match:{const t=e[1][1],s=e[1][2];return{type:"Eval",node:t,env:n,k:[{type:"Match",phase:"matchValue",matchValue:null,cases:s,index:0,bindings:{},env:n,sourceCodeInfo:o},...r]}}case Mn.block:{const t=e[1][1],s=e[1][2],a={},i=n.create(a);let u=r;if(s&&s.length>0){u=[{type:"TryWith",handlers:s.map(([e,t])=>({effectRef:eo(e,n),handlerNode:t})),env:n,sourceCodeInfo:o},...r]}if(0===t.length)return{type:"Value",value:null,k:u};if(1===t.length)return{type:"Eval",node:t[0],env:i,k:u};const c={type:"Sequence",nodes:t,index:1,env:i,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:i,k:[c,...u]}}case Mn.let:{const t=e[1][1],s=t[1][0];return{type:"Eval",node:t[1][1],env:n,k:[{type:"LetBind",target:s,env:n,sourceCodeInfo:o},...r]}}case Mn.loop:{const t=e[1][1],s=e[1][2];if(0===t.length){const e={},a={type:"LoopIterate",bindingNodes:t,bindingContext:e,body:s,env:n.create(e),sourceCodeInfo:o};return{type:"Eval",node:s,env:n.create(e),k:[a,...r]}}const a={type:"LoopBind",phase:"value",bindingNodes:t,index:0,context:{},body:s,env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0][1][1],env:n,k:[a,...r]}}case Mn.for:case Mn.doseq:{const t=e[1][1],a=e[1][2],i=s===Mn.for;if(0===t.length)return{type:"Value",value:i?[]:null,k:r};const u={},c=n.create(u),l={type:"ForLoop",returnResult:i,bindingNodes:t,body:a,result:[],phase:"evalCollection",bindingLevel:0,levelStates:[],context:u,env:c,sourceCodeInfo:o};return{type:"Eval",node:t[0][0][1][1],env:c,k:[l,...r]}}case Mn.recur:{const t=e[1][1];if(0===t.length)return Eo([],r,o);const s={type:"Recur",nodes:t,index:1,params:[],env:n,sourceCodeInfo:o};if(1===t.length){const e={...s,index:1};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}return{type:"Eval",node:t[0],env:n,k:[s,...r]}}case Mn.array:{const t=e[1][1];if(0===t.length)return{type:"Value",value:[],k:r};const s=t[0],a=zn(s),i={type:"ArrayBuild",nodes:t,index:0,result:[],isSpread:a,env:n,sourceCodeInfo:o};return{type:"Eval",node:a?s[1]:s,env:n,k:[i,...r]}}case Mn.object:{const t=e[1][1];if(0===t.length)return{type:"Value",value:{},k:r};const s=t[0],a=zn(s),i={type:"ObjectBuild",nodes:t,index:0,result:{},currentKey:null,isSpread:a,env:n,sourceCodeInfo:o};return{type:"Eval",node:a?s[1]:s,env:n,k:[i,...r]}}case Mn["0_lambda"]:{const t=function(e,n){const t={},r=e[0].reduce((e,n)=>(Object.keys(ln(n)).forEach(n=>{e[n]={value:null}}),e),{});return Wn(e[1],n.new(r),Un,eo).forEach(e=>{const r=n.getValue(e);I(r)&&(t[e]={value:r})}),[e[0],e[1],t]}(e[1][1],n),o=t[0].filter(e=>e[0]!==He&&void 0===e[1][1]).length,s={min:o>0?o:void 0,max:t[0].some(e=>e[0]===He)?void 0:t[0].length};return{type:"Value",value:{[l]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:t,arity:s,docString:""},k:r}}case Mn["defined?"]:{const t=e[1][1];if(!Dn(t))return{type:"Value",value:!0,k:r};return{type:"Value",value:null!==n.lookUp(t),k:r}}case Mn.import:{const s=e[1][1],a=n.getValueModule(s);if(a.found)return{type:"Value",value:a.value,k:r};const i=n.getModule(s);if(!i)throw new t(`Unknown module: '${s}'`,o);const u={};for(const[e,n]of Object.entries(i.functions))u[e]={[l]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:s,functionName:e,arity:n.arity};if(i.source){const e=or(sr(wr(i.source,!1,void 0),{removeWhiteSpace:!0})),t=n.create({}),a={type:"ImportMerge",tsFunctions:u,moduleName:s,module:i,env:n,sourceCodeInfo:o};if(1===e.length)return{type:"Eval",node:e[0],env:t,k:[a,...r]};const c={type:"Sequence",nodes:e,index:1,env:t};return{type:"Eval",node:e[0],env:t,k:[c,a,...r]}}return n.registerValueModule(s,u),{type:"Value",value:u,k:r}}case Mn.effect:return{type:"Value",value:Or(e[1][1]),k:r};case Mn.perform:{const t=[e[1][1],...e[1][2]];if(1===t.length){const e={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[e,...r]}}const s={type:"PerformArgs",argNodes:t,index:1,params:[],env:n,sourceCodeInfo:o};return{type:"Eval",node:t[0],env:n,k:[s,...r]}}case Mn.parallel:return{type:"Parallel",branches:e[1][1],env:n,k:r};case Mn.race:return{type:"Race",branches:e[1][1],env:n,k:r};default:throw new t(`Unknown special expression type: ${s}`,o)}}(e,n,r);default:throw new t(`${u(e[0])}-node cannot be evaluated`,e[2])}}function lo(e,n){const{node:r,params:o,placeholders:a,env:i,sourceCodeInfo:u}=e;if(qn(r)){const e=r[1][0];if(a.length>0){const t=i.evaluateSymbol(e);return{type:"Value",value:{[l]:!0,function:T(t,u),functionType:"Partial",params:o,placeholders:a,sourceCodeInfo:u,arity:X(a.length)},k:n}}if(Fn(e)){const r=e[1],s=Un.allNormalExpressions[r];if(i.pure&&!1===s.pure)throw new t(`Cannot call impure function '${s.name}' in pure mode`,u);if(s.dvalaImpl)return po(s.dvalaImpl,o,i,u,n);return jo(s.evaluate(o,u,i,{executeFunction:no}),n)}const c=i.getValue(e[1]);if(void 0!==c)return fo(T(c,u),o,a,i,u,n);throw new s(e[1],u)}return{type:"Eval",node:r[1][0],env:i,k:[{type:"CallFn",params:o,placeholders:a,env:i,sourceCodeInfo:u},...n]}}function fo(e,n,r,o,s,a){if(r.length>0){return{type:"Value",value:{[l]:!0,function:e,functionType:"Partial",params:n,placeholders:r,sourceCodeInfo:s,arity:X(r.length)},k:a}}if(w(e))return function(e,n,t,r,o){switch(e.functionType){case"UserDefined":return po(e,n,t,r,o);case"Partial":case"Comp":case"Constantly":case"Juxt":case"Complement":case"EveryPred":case"SomePred":case"Fnull":case"EffectMatcher":case"SpecialBuiltin":return jo(to(e,n,t,r),o);case"Module":{const s=t.getModule(e.moduleName),a=s?.functions[e.functionName];if(a?.dvalaImpl)return J(a.arity,n.length,r),po(a.dvalaImpl,n,t,r,o);return jo(to(e,n,t,r),o)}case"Builtin":{const s=Un.allNormalExpressions[e.normalBuiltinSymbolType];if(s.dvalaImpl)return po(s.dvalaImpl,n,t,r,o);return jo(to(e,n,t,r),o)}}}(e,n,o,s,a);if(Array.isArray(e))return{type:"Value",value:so(e,n,s),k:a};if(C(e))return{type:"Value",value:oo(e,n,s),k:a};if("string"==typeof e)return{type:"Value",value:ao(e,n,s),k:a};if(Y(e))return{type:"Value",value:io(e,n,s),k:a};throw new t("Unexpected function type",s)}function po(e,n,r,o,s){if(!H(e.arity,n.length))throw new t(`Expected ${e.arity} arguments, got ${n.length}.`,o);const a=e.evaluatedfunction,i=a[0],u=i.filter(e=>e[0]!==He).length,c=r.create(e.evaluatedfunction[2]),l={self:{value:e}},f=[];for(let t=0;t<n.length;t+=1)if(t<u){const a=te(n[t]),u=un(i[t],a,e=>eo(e,c.create(l)));if(u instanceof Promise){return jo(ro(e,n,r,o),s)}Object.entries(u).forEach(([e,n])=>{l[e]={value:n}})}else f.push(te(n[t]));for(let t=n.length;t<u;t++){const a=i[t],u=eo(a[1][1],c.create(l));if(u instanceof Promise){return jo(ro(e,n,r,o),s)}const f=un(a,u,e=>eo(e,c.create(l)));if(f instanceof Promise){return jo(ro(e,n,r,o),s)}Object.entries(f).forEach(([e,n])=>{l[e]={value:n}})}const d=i.find(e=>e[0]===He);if(d){const t=un(d,f,e=>eo(e,c.create(l)));if(t instanceof Promise){return jo(ro(e,n,r,o),s)}Object.entries(t).forEach(([e,n])=>{l[e]={value:n}})}const p=a[1],h=c.create(l);if(0===p.length)return{type:"Value",value:null,k:s};const y={type:"FnBody",fn:e,bodyIndex:1,env:h,outerEnv:r,sourceCodeInfo:o};return p.length,{type:"Eval",node:p[0],env:h,k:[y,...s]}}function ho(e,n,r){switch(e.type){case"Sequence":return function(e,n,t){const{nodes:r,index:o,env:s}=e;if(o>=r.length)return{type:"Value",value:n,k:t};const a={...e,index:o+1};if(o===r.length-1)return{type:"Eval",node:r[o],env:s,k:t};return{type:"Eval",node:r[o],env:s,k:[a,...t]}}(e,n,r);case"IfBranch":return function(e,n,t){const{thenNode:r,elseNode:o,inverted:s,env:a}=e,i=s?!n:n;if(i)return{type:"Eval",node:r,env:a,k:t};if(o)return{type:"Eval",node:o,env:a,k:t};return{type:"Value",value:null,k:t}}(e,n,r);case"Cond":return function(e,n,t){const{cases:r,index:o,env:s}=e;if("test"===e.phase){if(n)return{type:"Eval",node:r[o][1],env:s,k:t};const a=o+1;if(a>=r.length)return{type:"Value",value:null,k:t};const i={...e,index:a};return{type:"Eval",node:r[a][0],env:s,k:[i,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"Match":return function(e,n,t){const{cases:r,env:o}=e;if("matchValue"===e.phase){const r=n;return yo({...e,matchValue:r,phase:"guard"},t)}if("guard"===e.phase){if(!n){return yo({...e,index:e.index+1,bindings:{}},t)}const s={};for(const[n,t]of Object.entries(e.bindings))s[n]={value:t};const a=o.create(s);return{type:"Eval",node:r[e.index][1],env:a,k:t}}return{type:"Value",value:n,k:t}}(e,n,r);case"And":return function(e,n,t){if(!n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:s}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:s,k:t};const a={...e,index:o+1};return{type:"Eval",node:r[o],env:s,k:[a,...t]}}(e,n,r);case"Or":return function(e,n,t){if(n)return{type:"Value",value:n,k:t};const{nodes:r,index:o,env:s}=e;if(o>=r.length)return{type:"Value",value:n,k:t};if(o===r.length-1)return{type:"Eval",node:r[o],env:s,k:t};const a={...e,index:o+1};return{type:"Eval",node:r[o],env:s,k:[a,...t]}}(e,n,r);case"Qq":return function(e,n,t){if(null!==n)return{type:"Value",value:n,k:t};return mo(e,t)}(e,n,r);case"ArrayBuild":return function(e,n,r){const{nodes:o,result:s,env:a,sourceCodeInfo:i}=e;if(e.isSpread){if(!Array.isArray(n))throw new t("Spread value is not an array",i);s.push(...n)}else s.push(n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:s,k:r};const c=o[u],l=zn(c),f={...e,index:u,isSpread:l};return{type:"Eval",node:l?c[1]:c,env:a,k:[f,...r]}}(e,n,r);case"ObjectBuild":return function(e,n,r){const{nodes:o,result:s,env:a,sourceCodeInfo:i}=e;if(e.isSpread){if(!x(n))throw new t("Spread value is not an object",i);Object.assign(s,n);const u=e.index+1;if(u>=o.length)return{type:"Value",value:s,k:r};const c=o[u],l=zn(c),f={...e,index:u,currentKey:null,isSpread:l};return{type:"Eval",node:l?c[1]:c,env:a,k:[f,...r]}}if(null===e.currentKey){F(n,i);const s=o[e.index+1];if(void 0===s)throw new t("Missing value for key",i);return{type:"Eval",node:s,env:a,k:[{...e,currentKey:n},...r]}}{s[e.currentKey]=n;const t=e.index+2;if(t>=o.length)return{type:"Value",value:s,k:r};const i=o[t],u=zn(i),c={...e,index:t,currentKey:null,isSpread:u};return{type:"Eval",node:u?i[1]:i,env:a,k:[c,...r]}}}(e,n,r);case"LetBind":return function(e,n,t){const{target:r,env:o,sourceCodeInfo:s}=e,a=un(r,n,e=>eo(e,o));return en(a,e=>(o.addValues(e,s),{type:"Value",value:n,k:t}))}(e,n,r);case"LoopBind":return function(e,n,t){const{bindingNodes:r,index:o,context:s,body:a,env:i,sourceCodeInfo:u}=e,c=r[o],l=un(c[1][0],n,e=>eo(e,i.create(s)));return en(l,n=>{Object.entries(n).forEach(([e,n])=>{s[e]={value:n}});const c=o+1;if(c>=r.length){const e=i.create(s);return{type:"Eval",node:a,env:e,k:[{type:"LoopIterate",bindingNodes:r,bindingContext:s,body:a,env:e,sourceCodeInfo:u},...t]}}const l={...e,index:c};return{type:"Eval",node:r[c][1][1],env:i.create(s),k:[l,...t]}})}(e,n,r);case"LoopIterate":return function(e,n,t){return{type:"Value",value:n,k:t}}(0,n,r);case"ForLoop":return function(e,n,r){const{returnResult:o,bindingNodes:s,result:a,env:i,sourceCodeInfo:u,context:c}=e,{asColl:l,isSeq:f}={asColl:(e,n)=>{if("string"==typeof e||Array.isArray(e)||C(e))return e;throw new t(`Expected collection, got ${y(e)}`,n)},isSeq:e=>"string"==typeof e||Array.isArray(e)};switch(e.phase){case"evalCollection":{const t=l(n,u),o=f(t)?t:Object.entries(t);if(0===o.length)return vo(e,r);const a=[...e.levelStates];a[e.bindingLevel]={collection:o,index:0};const d=s[e.bindingLevel];return en(un(d[0][1][0],N(o[0],u),e=>eo(e,i)),n=>{Object.entries(n).forEach(([e,n])=>{c[e]={value:n}});const t=d[1];return t.length>0?bo(e,a,t,0,r):xo(e,a,r)})}case"evalLet":throw new t("ForLoop evalLet should not reach applyFrame",u);case"evalWhen":{if(!n)return go(e,r);const t=s[e.bindingLevel][3];if(t){const n={...e,phase:"evalWhile"};return{type:"Eval",node:t,env:i,k:[n,...r]}}return wo(e,r)}case"evalWhile":if(!n){const n=[...e.levelStates];return n[e.bindingLevel]={...n[e.bindingLevel],index:Number.POSITIVE_INFINITY},go({...e,levelStates:n},r)}return wo(e,r);case"evalBody":return o&&a.push(n),go(e,r);case"evalElement":throw new t(`Unexpected ForLoop phase: ${e.phase}`,u)}return{type:"Value",value:null,k:r}}(e,n,r);case"Recur":return function(e,n,t){const{nodes:r,index:o,params:s,env:a}=e;if(s.push(n),o>=r.length)return Eo(s,t,e.sourceCodeInfo);const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"PerformArgs":return function(e,n,t){const{argNodes:r,index:o,params:s,env:a}=e;if(s.push(n),o>=r.length){const n=s[0];R(n,e.sourceCodeInfo);return{type:"Perform",effect:n,args:s.slice(1),k:t,sourceCodeInfo:e.sourceCodeInfo}}const i={...e,index:o+1};return{type:"Eval",node:r[o],env:a,k:[i,...t]}}(e,n,r);case"TryWith":return function(e,n){return{type:"Value",value:e,k:n}}(n,r);case"EffectResume":return function(e,n){return{type:"Value",value:n,k:e.resumeK}}(e,n);case"ParallelResume":return function(e,n,t){return{type:"ParallelResume",value:n,branchCount:e.branchCount,completedBranches:e.completedBranches,suspendedBranches:e.suspendedBranches,k:t}}(e,n,r);case"EvalArgs":return function(e,n,r){const{node:o,params:s,placeholders:i,env:u}=e,c=o[1][1],l=c[e.index];if(zn(l)){if(!Array.isArray(n))throw new t(`Spread operator requires an array, got ${y(n)}`,l[2]);s.push(...n)}else s.push(n);let f=e.index+1;for(;f<c.length;){const e=c[f];if(e[0]!==a.ReservedSymbol||"_"!==e[1])break;i.push(s.length),f++}if(f>=c.length)return lo({...e,index:f},r);const d={...e,index:f},p=c[f];if(zn(p))return{type:"Eval",node:p[1],env:u,k:[d,...r]};return{type:"Eval",node:p,env:u,k:[d,...r]}}(e,n,r);case"CallFn":return function(e,n,t){const r=T(n,e.sourceCodeInfo);return fo(r,e.params,e.placeholders,e.env,e.sourceCodeInfo,t)}(e,n,r);case"FnBody":return function(e,n,t){const{fn:r,bodyIndex:o,env:s}=e,a=r.evaluatedfunction[1];if(o>=a.length)return{type:"Value",value:n,k:t};const i={...e,bodyIndex:o+1};return{type:"Eval",node:a[o],env:s,k:[i,...t]}}(e,n,r);case"BindingDefault":return function(e,n,r){const{target:o,record:s,env:a,sourceCodeInfo:i}=e,u=un(o,n,e=>eo(e,a));if(u instanceof Promise)throw new t("Async binding default evaluation not supported in trampoline yet",i);return Object.assign(s,u),{type:"Value",value:n,k:r}}(e,n,r);case"NanCheck":return function(e,n,r){if("number"==typeof n&&Number.isNaN(n))throw new t("Number is NaN",e.sourceCodeInfo);return{type:"Value",value:xe(n),k:r}}(e,n,r);case"DebugStep":return function(e,n,t){if("awaitValue"===e.phase){const r={expression:e.sourceCodeInfo?.code??"",value:n,location:e.sourceCodeInfo?{line:e.sourceCodeInfo.position.line,column:e.sourceCodeInfo.position.column}:{line:0,column:0},env:Co(e.env)},o={type:"DebugStep",phase:"awaitPerform",sourceCodeInfo:e.sourceCodeInfo,env:e.env};return{type:"Perform",effect:Or("dvala.debug.step"),args:[r],k:[o,...t]}}return{type:"Value",value:n,k:t}}(e,n,r);case"ImportMerge":{const t=C(n)?n:{};for(const[n,r]of Object.entries(t)){const t=e.module.functions[n];t&&E(r)&&(t.dvalaImpl=r)}const o={};for(const[n,r]of Object.entries(t))e.module.functions[n]||(o[n]=r);const s={...e.tsFunctions,...o};return e.env.registerValueModule(e.moduleName,s),{type:"Value",value:s,k:r}}default:throw new t(`Unhandled frame type: ${e.type}`,void 0)}}function yo(e,n){const{matchValue:r,cases:o,index:s,env:a,sourceCodeInfo:i}=e;for(let u=s;u<o.length;u++){const[s,c,l]=o[u],f=dn(s,r,e=>eo(e,a));if(f instanceof Promise)throw new t("Async pattern matching not supported in trampoline yet",i);if(null===f)continue;if(l){const t={};for(const[e,n]of Object.entries(f))t[e]={value:n};return{type:"Eval",node:l,env:a.create(t),k:[{...e,phase:"guard",index:u,bindings:f},...n]}}const d={};for(const[e,n]of Object.entries(f))d[e]={value:n};return{type:"Eval",node:c,env:a.create(d),k:n}}return{type:"Value",value:null,k:n}}function mo(e,n){const{nodes:t,env:r}=e;let{index:o}=e;for(;o<t.length;){const e=t[o];if(!Dn(e)||null!==r.lookUp(e))break;o++}if(o>=t.length)return{type:"Value",value:null,k:n};if(o===t.length-1)return{type:"Eval",node:t[o],env:r,k:n};const s={...e,index:o+1};return{type:"Eval",node:t[o],env:r,k:[s,...n]}}function vo(e,n){return{type:"Value",value:e.returnResult?e.result:null,k:n}}function go(e,n){const{bindingNodes:t,env:r,sourceCodeInfo:o,context:s}=e,a=[...e.levelStates],i=e.bindingLevel,u=a[i],c=u.index+1;if(c>=u.collection.length)return 0===i?vo(e,n):go({...e,bindingLevel:i-1},n);a[i]={...u,index:c};const l=t[i];return en(un(l[0][1][0],N(u.collection[c],o),e=>eo(e,r)),t=>{Object.entries(t).forEach(([e,n])=>{s[e]={value:n}});const r=l[1];return r.length>0?bo({...e,levelStates:a,bindingLevel:i},a,r,0,n):xo({...e,levelStates:a,bindingLevel:i},a,n)})}function bo(e,n,t,r,o){const{env:s,context:a}=e;let i;for(let e=r;e<t.length;e++){const n=e;i=en(i,()=>{const e=t[n],[r,o]=e[1];return en(eo(o,s),e=>en(un(r,e,e=>eo(e,s)),e=>{Object.entries(e).forEach(([e,n])=>{a[e]={value:n}})}))})}return en(i,()=>xo({...e,levelStates:n},n,o))}function xo(e,n,t){const{bindingNodes:r,env:o}=e,s=r[e.bindingLevel],a=s[2],i=s[3];if(a){return{type:"Eval",node:a,env:o,k:[{...e,levelStates:n,phase:"evalWhen"},...t]}}if(i){return{type:"Eval",node:i,env:o,k:[{...e,levelStates:n,phase:"evalWhile"},...t]}}return wo({...e,levelStates:n},t)}function wo(e,n){const{bindingNodes:t,body:r,env:o}=e,s=e.bindingLevel+1;if(s<t.length){return{type:"Eval",node:t[s][0][1][1],env:o,k:[{...e,phase:"evalCollection",bindingLevel:s},...n]}}const a={...e,phase:"evalBody"};return{type:"Eval",node:r,env:o.create(e.context),k:[a,...n]}}function ko(e,n,t,r,o){const s=Or("dvala.error"),a=[e.shortMessage];for(let t=0;t<n.length;t++){const r=n[t];if("TryWith"===r.type)for(const o of r.handlers)if(So(o,s,r.env,e.sourceCodeInfo))return Io(o,r,a,n,t,e.sourceCodeInfo)}const i=Nr("dvala.error",t);return i.length>0?No("dvala.error",i,a,n,r,e.sourceCodeInfo,o):null}function Eo(e,n,r){for(let o=0;o<n.length;o++){const s=n[o];if("LoopIterate"===s.type){const{bindingNodes:a,bindingContext:i,body:u,env:c}=s,l=n.slice(o+1);if(e.length!==a.length)throw new t(`recur expected ${a.length} parameters, got ${e.length}`,r);const f=on(a,(n,t)=>en(un(n[1][0],te(e[t]),e=>eo(e,c)),e=>{Object.entries(e).forEach(([e,n])=>{i[e]={value:n}})}));return en(f,()=>{const e=c.getContextsRaw()[0];if(e!==i)for(const[n,t]of Object.entries(i))e[n]=t;const n={type:"LoopIterate",bindingNodes:a,bindingContext:i,body:u,env:c,sourceCodeInfo:s.sourceCodeInfo};return{type:"Eval",node:u,env:c,k:[n,...l]}})}if("FnBody"===s.type){const{fn:t,outerEnv:r}=s,a=n.slice(o+1);return po(t,e,r,s.sourceCodeInfo,a)}}throw new t("recur called outside of loop or function body",r)}function So(e,n,r,o){if(B(e.effectRef))return e.effectRef.name===n.name;if(w(e.effectRef)){const s=no(e.effectRef,[n],r,o);if(s instanceof Promise)throw new t("Effect handler predicates must be synchronous",o);return!!s}return!1}function Io(e,n,t,r,o,s){const a=[{type:"EffectResume",resumeK:r,sourceCodeInfo:s},...r.slice(o+1)];return fo(T(eo(e.handlerNode,n.env),n.sourceCodeInfo),[t],[],n.env,s,a)}function No(e,n,o,s,a,i,u){const c=a??(new AbortController).signal,l=Array.from(o);function f(e,n){switch(e.kind){case"step":return e.step;case"asyncResume":return e.promise.then(e=>({type:"Value",value:e,k:s}),e=>({type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,i),k:s}));case"throw":throw e.error;case"next":return d(n)}}function d(a){if(a>=n.length){if("dvala.error"===e){const e="string"==typeof l[0]?l[0]:String(l[0]??"Unknown error");throw new r(e,i)}if("dvala.checkpoint"===e)return{type:"Value",value:null,k:s};throw new t(`Unhandled effect: '${e}'`,i)}const[d,p]=n[a];if("*"===d){const n=Qr(e);if(n)return n(o,s,i)}let h,y=!1;function m(e){if(y)throw new t(`Effect handler called ${e}() after already calling another operation`,i);y=!0}const v=p({effectName:e,args:l,signal:c,resume:e=>{m("resume"),h=e instanceof Promise?{kind:"asyncResume",promise:e}:{kind:"step",step:{type:"Value",value:e,k:s}}},fail:n=>{m("fail");h={kind:"step",step:{type:"Error",error:new t(n??`Effect handler failed for '${e}'`,i),k:s}}},suspend:n=>{m("suspend"),h={kind:"throw",error:new Ar(s,u?u.snapshots:[],u?u.nextSnapshotIndex:0,n,e,l)}},next:()=>{m("next"),h={kind:"next"}},get snapshots(){return u?[...u.snapshots]:[]},checkpoint:e=>{if(!u)throw new t("checkpoint is not available outside effect-enabled execution",i);const n={continuation:Kr(s),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};return u.snapshots.push(n),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift(),n},resumeFrom:(e,n)=>{if(y)throw new t("Effect handler called resumeFrom() after already calling another operation",i);if(!u)throw new t("resumeFrom is not available outside effect-enabled execution",i);const r=u.snapshots.find(n=>n.index===e.index&&n.runId===e.runId);if(!r)throw new t(`Invalid snapshot: no snapshot with index ${e.index} found in current run`,i);y=!0,h={kind:"throw",error:new $r(r.continuation,n,r.index)}}});if(!(v instanceof Promise)){if(!h)throw new t(`Effect handler for '${e}' did not call resume(), fail(), suspend(), or next()`,i);return f(h,a+1)}return h?(v.catch(()=>{}),f(h,a+1)):v.then(()=>{if(!h)throw new t(`Effect handler for '${e}' did not call resume(), fail(), suspend(), or next()`,i);return f(h,a+1)},e=>{if(h)return f(h,a+1);if(Pr(e)||Cr(e))throw e;return{type:"Error",error:e instanceof t?e:new t(e instanceof Error?e:`${e}`,i),k:s}})}return c.aborted&&Po(s,void 0,e,l),d(0)}function Ao(e,n){const t=new AbortController;return e.aborted||n.aborted?(t.abort(),t.signal):(e.addEventListener("abort",()=>t.abort(),{once:!0}),n.addEventListener("abort",()=>t.abort(),{once:!0}),t.signal)}function Po(e,n,t,r){throw new Ar(e,[],0,n,t,r)}async function $o(e,n,t,r){return Do({type:"Eval",node:e,env:n,k:[]},t,r)}function Co(e){const n={},t=e.getHostValues();if(t)for(const[e,r]of Object.entries(t))n[e]=r;const r=e.getContextsRaw();for(let e=r.length-1;e>=0;e--)for(const[t,o]of Object.entries(r[e]))n[t]=o.value;return n}function jo(e,n){return e instanceof Promise?e.then(e=>({type:"Value",value:e,k:n}),e=>({type:"Error",error:e instanceof t?e:new t(`${e}`,void 0),k:n})):{type:"Value",value:e,k:n}}function Oo(e,n,o,s){try{switch(e.type){case"Value":{if(0===e.k.length)return e;const[n,...t]=e.k;return ho(n,e.value,t)}case"Eval":return co(e.node,e.env,e.k);case"Apply":return ho(e.frame,e.value,e.k);case"Perform":return function(e,n,o,s,a,i,u){if("dvala.checkpoint"===e.name&&u){const e=n[0],t={continuation:Kr(o),timestamp:Date.now(),index:u.nextSnapshotIndex++,runId:u.runId,...void 0!==e?{meta:e}:{}};u.snapshots.push(t),void 0!==u.maxSnapshots&&u.snapshots.length>u.maxSnapshots&&u.snapshots.shift()}for(let t=0;t<o.length;t++){const r=o[t];if("TryWith"===r.type)for(const a of r.handlers)if(So(a,e,r.env,s))return Io(a,r,n,o,t,s)}const c=Nr(e.name,a);if(c.length>0)return No(e.name,c,n,o,i,s,u);const l=Qr(e.name);if(l)return l(n,o,s);if("dvala.error"===e.name){const e="string"==typeof n[0]?n[0]:String(n[0]??"Unknown error");throw new r(e,s)}throw new t(`Unhandled effect: '${e.name}'`,s)}(e.effect,e.args,e.k,e.sourceCodeInfo,n,o,s);case"Parallel":return async function(e,n,r,o,s){const a=new AbortController,i=s?Ao(s,a.signal):a.signal,u=e.map(async(e,t)=>{const r=await $o(e,n,o,i);return"suspended"===r.type&&a.abort(),{index:t,result:r}}),c=await Promise.allSettled(u),l=[],f=[],d=[];for(const e of c)if("rejected"===e.status)d.push(new t(`${e.reason}`,void 0));else{const{index:n,result:t}=e.value;switch(t.type){case"completed":l.push({index:n,value:t.value});break;case"suspended":f.push({index:n,snapshot:t.snapshot});break;case"error":d.push(t.error)}}if(d.length>0)throw d[0];if(f.length>0){const n=[{type:"ParallelResume",branchCount:e.length,completedBranches:l,suspendedBranches:f.slice(1)},...r],t=f[0];return Po(n,t.snapshot.meta,t.snapshot.effectName,t.snapshot.effectArgs)}const p=Array.from({length:e.length});for(const{index:e,value:n}of l)p[e]=n;return{type:"Value",value:p,k:r}}(e.branches,e.env,e.k,n,o);case"Race":return async function(e,n,r,o,s){const a=s??(new AbortController).signal,i=e.map(()=>new AbortController),u=()=>{for(const e of i)e.abort(a.reason)};a.addEventListener("abort",u,{once:!0});try{let s=-1,a=null;const u=e.map(async(e,t)=>{const r=i[t].signal,u=await $o(e,n,o,r);if("completed"===u.type&&s<0){s=t,a=u.value;for(let e=0;e<i.length;e++)e!==t&&i[e].abort("race: branch lost")}return u}),c=await Promise.allSettled(u);if(s>=0)return{type:"Value",value:a,k:r};const l=[],f=[];for(let e=0;e<c.length;e++){const n=c[e];if("rejected"===n.status)f.push(new t(`${n.reason}`,void 0));else{const e=n.value;switch(e.type){case"suspended":l.push(e.snapshot.meta??null);break;case"error":f.push(e.error)}}}l.length>0&&Po(r,{type:"race",branches:l});const d=f.map(e=>e.message).join("; ");throw new t(`race: all branches failed: ${d}`,void 0)}finally{a.removeEventListener("abort",u)}}(e.branches,e.env,e.k,n,o);case"ParallelResume":return function(e){const{value:n,branchCount:t,completedBranches:r,suspendedBranches:o,k:s}=e,a=new Set(r.map(e=>e.index)),i=new Set(o.map(e=>e.index));let u=-1;for(let e=0;e<t;e++)if(!a.has(e)&&!i.has(e)){u=e;break}const c=[...r,{index:u,value:n}];if(o.length>0){const e=o[0];return Po([{type:"ParallelResume",branchCount:t,completedBranches:c,suspendedBranches:o.slice(1)},...s],e.snapshot.meta,e.snapshot.effectName,e.snapshot.effectArgs)}const l=Array.from({length:t});for(const{index:e,value:n}of c)l[e]=n;return{type:"Value",value:l,k:s}}(e);case"Error":{const t=ko(e.error,e.k,n,o,s);if(null!==t)return t;throw e.error}}}catch(r){if(Pr(r))throw r;if(r instanceof t){const t=ko(r,"Value"===e.type?e.k.slice(1):e.k,n,o,s);if(null!==t)return t}throw r}}function Mo(e,n){let r=e;for(;;){if(r instanceof Promise)throw new t("Unexpected async operation in synchronous context. Use async.run() for async operations.",void 0);if("Value"===r.type&&0===r.k.length)return r.value;r=Oo(r,n)}}async function Vo(e){let n=e;for(;;){if(n instanceof Promise&&(n=await n),"Value"===n.type&&0===n.k.length)return n.value;n=Oo(n)}}function Uo(e,n){if(0===e.length)return{type:"Value",value:null,k:[]};if(1===e.length)return{type:"Eval",node:e[0],env:n,k:[]};const t={type:"Sequence",nodes:e,index:1,env:n};return{type:"Eval",node:e[0],env:n,k:[t]}}function Bo(e,n){const r=Uo(e.body,n);try{return Mo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo(Uo(e.body,n))}throw r}}function Ro(e,n){const r={type:"Eval",node:e,env:n,k:[]};try{return Mo(r)}catch(r){if(r instanceof t&&r.message.includes("Unexpected async operation")){return Vo({type:"Eval",node:e,env:n,k:[]})}throw r}}async function To(e,n,r,o,s,a,i){const u=new AbortController,c=i?Ao(i,u.signal):u.signal,l={snapshots:s?.snapshots??[],nextSnapshotIndex:s?.nextSnapshotIndex??0,runId:Sr(),maxSnapshots:s?.maxSnapshots};if(e.length>0&&"ParallelResume"===e[0].type)return async function(e,n,r,o,s,a,i,u){const{branchCount:c,completedBranches:l,suspendedBranches:f}=e,d=new Set(l.map(e=>e.index)),p=new Set(f.map(e=>e.index));let h=-1;for(let e=0;e<c;e++)if(!d.has(e)&&!p.has(e)){h=e;break}const y=new AbortController,m=Ao(a,y.signal),v=Nr(r,s),g=(async()=>{let e;try{e=await Promise.resolve(No(r,v,o,[],m,void 0,i))}catch(e){if(Pr(e)){y.abort();const n={continuation:Yr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:i.nextSnapshotIndex++,runId:i.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs};return{index:h,result:{type:"suspended",snapshot:n}}}const n=e instanceof t?e:new t(`${e}`,void 0);return{index:h,result:{type:"error",error:n}}}const n=await Do(e,s,m,i,void 0,u);return"suspended"===n.type&&y.abort(),{index:h,result:n}})(),b=f.map(async e=>{const{effectName:n,effectArgs:t}=e.snapshot;if(!n||!t)return{index:e.index,result:{type:"suspended",snapshot:e.snapshot}};const r=Gr(e.snapshot.continuation,u),o=await To(r.k,n,t,s,{snapshots:r.snapshots,nextSnapshotIndex:r.nextSnapshotIndex},u,m);return"suspended"===o.type&&y.abort(),{index:e.index,result:o}}),x=await Promise.allSettled([g,...b]),w=[...l],k=[],E=[];for(const e of x)if("rejected"===e.status)E.push(new t(`${e.reason}`,void 0));else{const{index:n,result:t}=e.value;"completed"===t.type?w.push({index:n,value:t.value}):"suspended"===t.type?k.push({index:n,snapshot:t.snapshot}):E.push(t.error)}if(E.length>0)return{type:"error",error:E[0]};if(k.length>0){const e=k[0];return{type:"suspended",snapshot:{continuation:Yr([{type:"ParallelResume",branchCount:c,completedBranches:w,suspendedBranches:k.slice(1)},...n],i.snapshots,i.nextSnapshotIndex,e.snapshot.meta),timestamp:Date.now(),index:i.nextSnapshotIndex++,runId:i.runId,meta:e.snapshot.meta,effectName:e.snapshot.effectName,effectArgs:e.snapshot.effectArgs}}}const S=Array.from({length:c});for(const{index:e,value:n}of w)S[e]=n;return Do({type:"Value",value:S,k:n},s,a,i,void 0,u)}(e[0],e.slice(1),n,r,o,c,l,a);const f=Nr(n,o);let d;try{d=await Promise.resolve(No(n,f,r,e,c,void 0,l))}catch(e){if(Pr(e)){return{type:"suspended",snapshot:{continuation:Yr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:l.nextSnapshotIndex++,runId:l.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}return Do(d,o,c,l,l.maxSnapshots,a)}async function Do(e,n,r,o,s,i){const u=null!=n&&"dvala.debug.step"in n,c={snapshots:o?o.snapshots:[],nextSnapshotIndex:o?o.nextSnapshotIndex:0,runId:Sr(),...void 0!==s?{maxSnapshots:s}:{}};let l=e;for(;;)try{for(;;){if(l instanceof Promise&&(l=await l),"Value"===l.type&&0===l.k.length)return{type:"completed",value:l.value};if(u&&"Eval"===l.type&&l.node[2]){const e=l.node[0];if(e===a.NormalExpression||e===a.SpecialExpression){const e={type:"DebugStep",phase:"awaitValue",sourceCodeInfo:l.node[2],env:l.env};l={...l,k:[e,...l.k]}}}l=Oo(l,n,r,c)}}catch(e){if(Cr(e)){const{k:n}=Gr(e.continuation,i),t=c.snapshots.findIndex(n=>n.index>e.trimToIndex);-1!==t&&c.snapshots.splice(t),l={type:"Value",value:e.value,k:n};continue}if(Pr(e)){return{type:"suspended",snapshot:{continuation:Yr(e.k,e.snapshots,e.nextSnapshotIndex,e.meta),timestamp:Date.now(),index:c.nextSnapshotIndex++,runId:c.runId,meta:e.meta,effectName:e.effectName,effectArgs:e.effectArgs}}}return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}}new Set(Object.keys(Zr));const _o=new Set([...Bn,...Rn,...Object.keys(Ht)]);class Fo{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,n,t={}){this.originalProgram=e,this.originalPosition=n;const r=wr(this.originalProgram.slice(0,this.originalPosition),!1,void 0).tokens.at(-1);r&&"Error"!==r[0]&&(this.searchString=r[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(t))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const n=new Set(["0_defn","0_lambda"]),t=this.generateWithPredicate(e,e=>!n.has(e)&&e.startsWith(this.searchString));t.forEach(e=>n.add(e));const r=this.generateWithPredicate(e,e=>!n.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>n.add(e));const o=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString));o.forEach(e=>n.add(e));const s=this.generateWithPredicate(e,e=>!n.has(e)&&e.includes(this.searchString.toLowerCase()));return s.forEach(e=>n.add(e)),[...t,...r,...o,...s]}generateWithPredicate(e,n){const t=new Set;return _o.forEach(e=>{n(e)&&t.add(e)}),Object.keys(e.bindings??{}).filter(n).forEach(e=>t.add(e)),[...t].sort((e,n)=>e.localeCompare(n))}}const Lo={collection:'{\n map: (first-coll, ...args) -> do\n let fn = last(args);\n let other-colls = slice(args, 0, count(args) - 1);\n let all-colls = [first-coll, ...other-colls];\n\n cond\n case object?(first-coll) then do\n let expected-keys = keys(first-coll) |> sort;\n doseq (obj in other-colls) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), "Expected object")\n end;\n let obj-keys = keys(obj) |> sort;\n if not(obj-keys == expected-keys) then\n perform(effect(dvala.error), ++(\n "All objects must have the same keys. Expected: ",\n join(expected-keys, ", "),\n ". Found: ",\n join(obj-keys, ", ")\n ))\n end\n end;\n reduce(keys(first-coll), (acc, k) -> do\n let a = for (coll in all-colls) -> coll(k);\n assoc(acc, k, apply(fn, a))\n end, {})\n end\n\n case string?(first-coll) then do\n doseq (s in other-colls) -> do\n if not(string?(s)) then\n perform(effect(dvala.error), "Expected string")\n end\n end;\n let len = reduce(other-colls, (m, s) -> min(m, count(s)), count(first-coll));\n let mapped = for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end;\n reduce(mapped, (acc, ch) -> do\n if not(string?(ch)) then\n perform(effect(dvala.error), "Expected string")\n end;\n ++(acc, ch)\n end, "")\n end\n\n case true then do\n doseq (x in other-colls) -> do\n if not(array?(x)) then\n perform(effect(dvala.error), "Expected array")\n end\n end;\n let len = reduce(other-colls, (m, x) -> min(m, count(x)), count(first-coll));\n for (i in range(len)) -> do\n let a = for (coll in all-colls) -> nth(coll, i);\n apply(fn, a)\n end\n end\n end\n end,\n\n filter: (coll, fn) -> do\n cond\n case array?(coll) then\n reduce(coll, (acc, elem) -> if fn(elem) then [...acc, elem] else acc end, [])\n\n case string?(coll) then\n reduce(coll, (acc, ch) -> if fn(ch) then ++(acc, ch) else acc end, "")\n\n case object?(coll) then\n reduce(keys(coll), (acc, k) -> do\n if fn(coll(k)) then\n assoc(acc, k, coll(k))\n else\n acc\n end\n end, {})\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end,\n\n reduce: (coll, fn, initial) -> do\n cond\n case string?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case array?(coll) then\n loop (acc = initial, i = 0) -> do\n if i >= count(coll) then\n acc\n else\n recur(fn(acc, nth(coll, i)), i + 1)\n end\n end\n\n case object?(coll) then do\n let values = vals(coll);\n loop (acc = initial, i = 0) -> do\n if i >= count(values) then\n acc\n else\n recur(fn(acc, nth(values, i)), i + 1)\n end\n end\n end\n\n case true then\n perform(effect(dvala.error), "Expected collection")\n end\n end\n}',sequence:'{\n some: (seq, fn) -> do\n if null?(seq) then null\n else do\n loop (i = 0) -> do\n if i >= count(seq) then\n null\n else do\n let elem = nth(seq, i);\n if fn(elem) then elem\n else recur(i + 1)\n end\n end\n end\n end\n end\n end\n end,\n\n take-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, 0, idx)\n end,\n\n drop-while: (seq, fn) -> do\n let is-str = string?(seq);\n let len = count(seq);\n let idx = loop (i = 0) -> do\n if i >= len then\n len\n else if fn(nth(seq, i)) then\n recur(i + 1)\n else\n i\n end\n end\n end;\n slice(seq, idx)\n end,\n\n sort: (seq, ...args) -> do\n let cmp = if count(args) == 0 then compare else first(args) end;\n let is-str = string?(seq);\n let arr = if is-str then split(seq, "") else seq end;\n let len = count(arr);\n\n // merge two sorted arrays\n let merge-arrays = (left, right) -> do\n let left-len = count(left);\n let right-len = count(right);\n loop (result = [], li = 0, ri = 0) -> do\n if li >= left-len then\n ++(result, slice(right, ri))\n else if ri >= right-len then\n ++(result, slice(left, li))\n else do\n let l = nth(left, li);\n let r = nth(right, ri);\n if cmp(l, r) <= 0 then\n recur(push(result, l), li + 1, ri)\n else\n recur(push(result, r), li, ri + 1)\n end\n end\n end\n end\n end\n end;\n\n // recursive merge-sort\n let merge-sort = (a) -> do\n let n = count(a);\n if n <= 1 then a\n else do\n let mid = floor(n / 2);\n let left = merge-sort(slice(a, 0, mid));\n let right = merge-sort(slice(a, mid));\n merge-arrays(left, right)\n end\n end\n end;\n\n let sorted = merge-sort(arr);\n if is-str then join(sorted, "") else sorted end\n end\n}\n',array:'{\n mapcat: (arr, fn) -> do\n flatten(map(arr, fn), 1)\n end,\n\n moving-fn: (arr, window-size, fn) -> do\n if window-size > count(arr) then\n perform(effect(dvala.error), "Expected window-size <= array length")\n end;\n for (i in range(count(arr) - window-size + 1)) -> do\n fn(slice(arr, i, i + window-size))\n end\n end,\n\n running-fn: (arr, fn) -> do\n for (i in range(count(arr))) -> do\n fn(slice(arr, 0, i + 1))\n end\n end\n}\n',functional:'{\n "|>": (a, b) -> b(a),\n\n apply: (fn, ...args) -> do\n let arr = last(args);\n let leading = slice(args, 0, count(args) - 1);\n fn(...leading, ...arr)\n end\n}\n',object:'{\n merge-with: (...args) -> do\n let fn = last(args);\n let objs = slice(args, 0, count(args) - 1);\n if not(function?(fn)) then\n perform(effect(dvala.error), str("Expected function, got: ", type(fn)))\n end;\n if count(objs) == 0 then\n perform(effect(dvala.error), "Expected at least one object argument")\n end;\n reduce(rest(objs), (result, obj) -> do\n if not(object?(obj)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(obj)))\n end;\n reduce(keys(obj), (res, key) -> do\n if contains?(res, key) then\n assoc(res, key, fn(get(res, key), get(obj, key)))\n else\n assoc(res, key, get(obj, key))\n end\n end, result)\n end, do\n let f = first(objs);\n if not(object?(f)) then\n perform(effect(dvala.error), str("Expected object, got: ", type(f)))\n end;\n f\n end)\n end\n}\n'};let qo=!1;class zo{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var n;if(this.maxSize=null===e?null:(n=e,Math.max(0,Math.ceil(n))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${y(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[n,t])=>(e[n]=t.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,n){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const t={value:n,nextEntry:void 0,key:e};for(this.cache[e]=t,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=t),this.lastEntry=t,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}function Wo(e,n){const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r=Br({bindings:n?.bindings},t),o={body:or(sr(wr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1};return Wn(o,r,Un,Ro)}function Ko(e){if(e)for(const[n,t]of Object.entries(e))Yo(t,`bindings["${n}"]`)}function Yo(e,n){if(null!=e&&"boolean"!=typeof e&&"string"!=typeof e)if("number"!=typeof e){if("function"==typeof e)throw new TypeError(`${n} is not serializable (function)`);if("object"!=typeof e)throw new TypeError(`${n} is not serializable`);if(l in e||f in e||d in e)return;if(Array.isArray(e))return void e.forEach((e,t)=>Yo(e,`${n}[${t}]`));if(Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${n} is not serializable (not a plain object)`);for(const[t,r]of Object.entries(e))Yo(r,`${n}.${t}`)}else if(!Number.isFinite(e))throw new TypeError(`${n} is not serializable (${e})`)}exports.asDvalaFunction=function(e,n){return k(e,n),e},exports.asUserDefinedFunction=function(e,n){return S(e,n),e},exports.assertDvalaFunction=k,exports.assertUserDefinedFunction=S,exports.createDvala=function(e){!function(){if(!qo){qo=!0;for(const[,e]of Object.entries(Lo)){const n=Bo({body:or(sr(wr(e,!1,void 0),{removeWhiteSpace:!0})),hasDebugData:!1},Br());if(n instanceof Promise)throw new TypeError("Core dvala sources must be synchronous");if(!C(n))continue;const t=n;for(const[e,n]of Object.entries(t)){const t=ze[e];t&&w(n)&&"UserDefined"===n.functionType&&(t.dvalaImpl=n)}}}}();const n=e?.modules?new Map(e.modules.map(e=>[e.name,e])):void 0,r=e?.bindings,o=e?.effectHandlers,s=e?.debug??!1,a=e?.cache?new zo(e.cache):null;function i(e,n){if(!n&&a){const n=a.get(e);if(n)return n}const t={body:or(sr(wr(e,s,n),{removeWhiteSpace:!0})),hasDebugData:s};return n||a?.set(e,t),t}function u(e){if(r||e)return{...r,...e}}function c(e){if(!o&&!e)return;const n={...e};if(o)for(const[e,t]of Object.entries(o))e in n||(n[e]=t);return n}function l(e,n){if(!e)return;if(n&&Object.keys(n).length>0)throw new TypeError("Cannot use pure mode with effect handlers")}return{run(e,r){Ko(r?.bindings);const o=u(r?.bindings),s=c(r?.effectHandlers),a=r?.pure??!1;l(a,s);const f=Br({bindings:o},n,a);if(Tn(e)){const n=f.pure;f.pure=!0;for(const[n,t]of e.fileModules){const e=i(t),r=f.create({});f.registerValueModule(n,Bo(e,r))}f.pure=n;const t=Bo(i(e.program),f);if(t instanceof Promise)throw new TypeError("Unexpected async result in run(). Use runAsync() for async operations.");return t}const d=i(e,r?.filePath);if(s)return function(e,n,r){const o=Uo(e.body,n);try{return Mo(o,r)}catch(o){if(o instanceof t&&o.message.includes("Unexpected async operation"))return Mo(Uo(e.body,n),r);throw o}}(d,f,s);const p=Bo(d,f);if(p instanceof Promise)throw new TypeError("Unexpected async result in run(). Use runAsync() for async operations.");return p},async runAsync(e,r){Ko(r?.bindings);const o=u(r?.bindings),s=c(r?.effectHandlers),a=r?.pure??!1;l(a,s);try{const t=Br({bindings:o},n,a);if(Tn(e)){const n=t.pure;t.pure=!0;for(const[n,r]of e.fileModules){const e=i(r),o=t.create({});t.registerValueModule(n,Bo(e,o))}t.pure=n}const u=i(Tn(e)?e.program:e),c=await async function(e,n,t,r,o){const s=(new AbortController).signal;return Do(Uo(e.body,n),t,s,void 0,r,o)}(u,t,s,r?.maxSnapshots,{values:o,modules:n});return"completed"===c.type?{...c,definedBindings:t.getModuleScopeBindings()}:c}catch(e){if(e instanceof t)return{type:"error",error:e};if(e instanceof TypeError)throw e;return{type:"error",error:new t(`${e}`,void 0)}}},getUndefinedSymbols(e){const t=n?[...n.values()]:void 0;return Wo(e,{bindings:r,modules:t})},getAutoCompleter:(e,n)=>new Fo(e,n,{bindings:r})}},exports.getAutoCompleter=function(e,n,t={}){return new Fo(e,n,t)},exports.getUndefinedSymbols=Wo,exports.isBuiltinFunction=function(e){return x(e)&&"Builtin"===e.functionType},exports.isDvalaBundle=Tn,exports.isDvalaError=function(e){return e instanceof t},exports.isDvalaFunction=w,exports.isGrid=Se,exports.isMatrix=Ie,exports.isUserDefinedFunction=E,exports.isVector=we,exports.normalExpressionKeys=Bn,exports.parseTokenStream=function(e){return{body:or(sr(e,{removeWhiteSpace:!0})),hasDebugData:e.hasDebugData}},exports.resume=async function(e,n,r){try{const t=r?.modules?new Map(r.modules.map(e=>[e.name,e])):void 0,o=Gr(e.continuation,{values:r?.bindings,modules:t}),s={values:r?.bindings,modules:t};return await async function(e,n,t,r,o){return Do({type:"Value",value:n,k:e},t,(new AbortController).signal,r,r?.maxSnapshots,o)}(o.k,n,r?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:r?.maxSnapshots},s)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}},exports.retrigger=async function(e,n){if(!e.effectName||!e.effectArgs)return{type:"error",error:new t("Cannot retrigger: snapshot has no captured effect (suspended outside of an effect handler)",void 0)};try{const t=n?.modules?new Map(n.modules.map(e=>[e.name,e])):void 0,r={values:n?.bindings,modules:t},o=Gr(e.continuation,r);return await To(o.k,e.effectName,e.effectArgs,n?.handlers,{snapshots:o.snapshots,nextSnapshotIndex:o.nextSnapshotIndex,maxSnapshots:n?.maxSnapshots},r)}catch(e){return e instanceof t?{type:"error",error:e}:{type:"error",error:new t(`${e}`,void 0)}}},exports.specialExpressionKeys=Rn,exports.tokenizeSource=function(e,n=!1,t){return wr(e,n,t)},exports.transformSymbols=function(e,n){return function(e,n){return{...e,tokens:e.tokens.map(e=>nt(e)?[e[0],n(e[1])]:e)}}(e,n)},exports.untokenize=function(e){return e.tokens.reduce((e,n)=>`${e}${n[1]}`,"")};
2
2
  //# sourceMappingURL=index.js.map