functionalscript 0.37.0 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/fjs/bnf/token_symbol/module.f.d.ts +38 -0
  28. package/fjs/bnf/token_symbol/module.f.js +48 -0
  29. package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
  30. package/fjs/bnf/token_symbol/proof.f.js +37 -0
  31. package/{fs → fjs}/cas/cli/module.f.js +6 -9
  32. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  33. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  34. package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
  35. package/fjs/cas/evo/mcp/module.f.js +94 -0
  36. package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
  37. package/fjs/cas/evo/mcp/proof.f.js +126 -0
  38. package/fjs/cas/evo/module.f.d.ts +202 -0
  39. package/fjs/cas/evo/module.f.js +421 -0
  40. package/fjs/cas/evo/proof.f.d.ts +39 -0
  41. package/fjs/cas/evo/proof.f.js +572 -0
  42. package/fjs/cas/mcp/module.f.d.ts +49 -0
  43. package/{fs → fjs}/cas/mcp/module.f.js +61 -81
  44. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  45. package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
  46. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  47. package/{fs → fjs}/cas/module.f.js +89 -36
  48. package/fjs/cas/proof.f.d.ts +18 -0
  49. package/fjs/cas/proof.f.js +305 -0
  50. package/{fs → fjs}/ci/bun/module.f.js +3 -3
  51. package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
  52. package/{fs → fjs}/ci/common/module.f.js +1 -5
  53. package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
  54. package/{fs → fjs}/ci/config/module.f.js +8 -8
  55. package/{fs → fjs}/ci/deno/module.f.js +3 -3
  56. package/{fs → fjs}/ci/module.f.js +3 -4
  57. package/{fs → fjs}/ci/node/module.f.js +11 -9
  58. package/{fs → fjs}/ci/proof.f.js +16 -9
  59. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  60. package/{fs → fjs}/cli/module.f.js +2 -2
  61. package/{fs → fjs}/cli/proof.f.js +22 -63
  62. package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
  63. package/fjs/common/monoid/module.f.js +88 -0
  64. package/fjs/common/monoid/proof.f.d.ts +9 -0
  65. package/fjs/common/monoid/proof.f.js +48 -0
  66. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  67. package/fjs/crypto/pow/proof.f.js +111 -0
  68. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  69. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  70. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  71. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  72. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  73. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  74. package/{fs → fjs}/dev/module.f.js +25 -25
  75. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  76. package/{fs → fjs}/dev/proof.f.js +2 -4
  77. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  78. package/{fs → fjs}/djs/module.f.js +5 -8
  79. package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
  80. package/{fs → fjs}/djs/parser/module.f.js +37 -0
  81. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  82. package/{fs → fjs}/djs/proof.f.js +13 -36
  83. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  84. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  85. package/fjs/djs/tokenizer/module.f.js +472 -0
  86. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  87. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  88. package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
  89. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  90. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  91. package/fjs/effects/eff/module.f.d.ts +72 -0
  92. package/fjs/effects/eff/module.f.js +46 -0
  93. package/fjs/effects/eff/proof.f.d.ts +11 -0
  94. package/fjs/effects/eff/proof.f.js +58 -0
  95. package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
  96. package/{fs → fjs}/effects/list/module.f.js +2 -1
  97. package/{fs → fjs}/effects/memory/proof.f.js +15 -29
  98. package/fjs/effects/module.f.d.ts +388 -0
  99. package/fjs/effects/module.f.js +288 -0
  100. package/{fs → fjs}/effects/node/memory/proof.js +7 -13
  101. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  102. package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
  103. package/{fs → fjs}/effects/node/module.f.js +9 -11
  104. package/{fs → fjs}/effects/node/module.js +3 -3
  105. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  106. package/{fs → fjs}/effects/node/proof.f.js +121 -299
  107. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  108. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  109. package/fjs/effects/proof.f.d.ts +51 -0
  110. package/fjs/effects/proof.f.js +178 -0
  111. package/{fs → fjs}/emergent_testing/module.f.js +55 -39
  112. package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
  113. package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
  114. package/{fs → fjs}/fsc/proof.f.js +12 -34
  115. package/{fs → fjs}/fsm/proof.f.js +5 -12
  116. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  117. package/{fs → fjs}/mcp/module.f.js +17 -10
  118. package/{fs → fjs}/mcp/proof.f.js +17 -16
  119. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  120. package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
  121. package/{fs → fjs}/media/html/proof.f.js +12 -33
  122. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  123. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  124. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  125. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  126. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  127. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  128. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  129. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  130. package/{fs → fjs}/media/module.f.d.ts +6 -6
  131. package/{fs → fjs}/media/module.f.js +3 -4
  132. package/{fs → fjs}/media/proof.f.js +5 -4
  133. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  134. package/{fs → fjs}/media/revision/module.f.js +35 -23
  135. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  136. package/fjs/media/revision/proof.f.js +140 -0
  137. package/{fs → fjs}/media/type/module.f.js +2 -2
  138. package/{fs → fjs}/media/type/proof.f.js +8 -15
  139. package/{fs → fjs}/module.f.js +5 -9
  140. package/{fs → fjs}/path/proof.f.js +27 -78
  141. package/{fs → fjs}/proof.f.js +2 -0
  142. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  143. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  144. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  145. package/fjs/text/ascii/proof.f.d.ts +6 -0
  146. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  147. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  148. package/{fs → fjs}/text/proof.f.js +4 -9
  149. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  150. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  151. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  152. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  153. package/{fs → fjs}/types/array/proof.f.js +18 -52
  154. package/fjs/types/bigfloat/proof.f.js +217 -0
  155. package/{fs → fjs}/types/bigint/module.f.js +4 -3
  156. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  157. package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
  158. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  159. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  160. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  161. package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
  162. package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
  163. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  164. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  165. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  166. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  167. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  168. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  169. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  170. package/{fs → fjs}/types/function/proof.f.js +2 -3
  171. package/{fs → fjs}/types/list/module.f.d.ts +21 -0
  172. package/{fs → fjs}/types/list/module.f.js +17 -0
  173. package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
  174. package/{fs → fjs}/types/list/proof.f.js +79 -164
  175. package/{fs → fjs}/types/map/proof.f.js +4 -12
  176. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  177. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  178. package/fjs/types/nullable/proof.f.js +29 -0
  179. package/{fs → fjs}/types/number/module.f.js +2 -1
  180. package/{fs → fjs}/types/number/proof.f.js +9 -24
  181. package/{fs → fjs}/types/object/proof.f.js +3 -6
  182. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  183. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  184. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  185. package/fjs/types/range/module.f.js +2 -0
  186. package/fjs/types/range/proof.f.js +9 -0
  187. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  188. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  189. package/fjs/types/result/proof.f.js +31 -0
  190. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  191. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  192. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  193. package/fjs/types/rtti/common/proof.f.js +51 -0
  194. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  195. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  196. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  197. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  198. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  199. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  200. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  201. package/{fs → fjs}/types/string/module.f.js +10 -2
  202. package/fjs/types/string/proof.f.js +77 -0
  203. package/fjs/types/string_set/proof.f.js +43 -0
  204. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  205. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  206. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  207. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  208. package/{fs → fjs}/website/module.f.js +2 -3
  209. package/{fs → fjs}/website/proof.f.js +3 -6
  210. package/package.json +8 -8
  211. package/fs/asserts/module.f.d.ts +0 -4
  212. package/fs/asserts/module.f.js +0 -9
  213. package/fs/asserts/proof.f.d.ts +0 -8
  214. package/fs/asserts/proof.f.js +0 -51
  215. package/fs/bnf/data/module.f.d.ts +0 -30
  216. package/fs/bnf/descent/module.f.js +0 -119
  217. package/fs/bnf/proof.f.js +0 -104
  218. package/fs/cas/mcp/module.f.d.ts +0 -36
  219. package/fs/cas/proof.f.d.ts +0 -20
  220. package/fs/cas/proof.f.js +0 -294
  221. package/fs/common/monoid/module.f.js +0 -44
  222. package/fs/common/monoid/proof.f.d.ts +0 -4
  223. package/fs/common/monoid/proof.f.js +0 -27
  224. package/fs/crypto/pow/proof.f.js +0 -161
  225. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  226. package/fs/djs/tokenizer/module.f.js +0 -62
  227. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  228. package/fs/djs/tokenizer/proof.f.js +0 -543
  229. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  230. package/fs/djs/tokenizer-new/module.f.js +0 -155
  231. package/fs/effects/module.f.d.ts +0 -106
  232. package/fs/effects/module.f.js +0 -80
  233. package/fs/effects/proof.f.d.ts +0 -25
  234. package/fs/effects/proof.f.js +0 -115
  235. package/fs/media/revision/proof.f.js +0 -119
  236. package/fs/text/ascii/proof.f.d.ts +0 -4
  237. package/fs/types/bigfloat/proof.f.js +0 -348
  238. package/fs/types/nullable/proof.f.js +0 -50
  239. package/fs/types/range/module.f.js +0 -2
  240. package/fs/types/range/proof.f.js +0 -18
  241. package/fs/types/result/proof.f.js +0 -52
  242. package/fs/types/string/proof.f.js +0 -118
  243. package/fs/types/string_set/proof.f.js +0 -82
  244. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  245. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  246. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  247. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  248. /package/{fs → fjs}/base_n/module.f.js +0 -0
  249. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  250. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  251. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  252. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  253. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  254. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  255. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  256. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  257. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  258. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  259. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  260. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  261. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  262. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  264. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  265. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  266. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  268. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  271. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  272. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  273. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  274. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  275. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  276. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  277. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  278. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  279. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  280. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  281. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  282. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  283. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  284. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  285. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  286. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  287. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  288. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  289. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  290. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  291. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  292. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  293. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  295. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  297. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  298. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  299. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  300. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  301. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  302. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  303. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  304. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  305. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  306. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  307. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  308. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  309. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  310. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  311. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  312. /package/{fs → fjs}/effects/module.d.ts +0 -0
  313. /package/{fs → fjs}/effects/module.js +0 -0
  314. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  315. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  316. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  317. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  318. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  319. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  320. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  321. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  322. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  323. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  325. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  326. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  327. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  328. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  329. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  330. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  331. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  332. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  333. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  334. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  335. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  336. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  337. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  338. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  339. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  340. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  341. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  342. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  343. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  344. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  345. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  346. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  347. /package/{fs → fjs}/fsc/json.f.js +0 -0
  348. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/fsc/module.f.js +0 -0
  350. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  352. /package/{fs → fjs}/fsm/module.f.js +0 -0
  353. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  355. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  356. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  358. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  359. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  361. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/media/html/module.f.js +0 -0
  363. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  364. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  365. /package/{fs → fjs}/media/json/module.f.js +0 -0
  366. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  369. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  371. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  372. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  373. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  374. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  375. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  376. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  378. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  379. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  380. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  381. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/module.d.ts +0 -0
  384. /package/{fs → fjs}/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/module.js +0 -0
  386. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  387. /package/{fs → fjs}/path/module.f.js +0 -0
  388. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/proof.f.d.ts +0 -0
  390. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  391. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  392. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  393. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  394. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  395. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  396. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  397. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  398. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  399. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  400. /package/{fs → fjs}/sul/module.f.js +0 -0
  401. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  402. /package/{fs → fjs}/sul/proof.f.js +0 -0
  403. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  404. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  405. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  406. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  408. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  409. /package/{fs → fjs}/text/module.f.js +0 -0
  410. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  413. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  416. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  418. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/array/module.f.js +0 -0
  421. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  424. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  426. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  431. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  433. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  434. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  439. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  441. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  442. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  444. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/function/module.f.js +0 -0
  447. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  449. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  456. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  459. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  462. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  466. /package/{fs → fjs}/types/object/module.f.js +0 -0
  467. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/option/module.f.js +0 -0
  470. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  471. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  472. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  474. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  476. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  478. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  479. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  482. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  485. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  487. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/result/module.f.js +0 -0
  489. /package/{fs → fjs}/types/result/module.js +0 -0
  490. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  492. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  496. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  497. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  498. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  499. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  502. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  503. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  504. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  506. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  508. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  511. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  514. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  517. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -12,7 +12,7 @@ import { stringToList } from '../../text/utf16/module.f.js';
12
12
  import { concat as pathConcat } from '../../path/module.f.js';
13
13
  import { parseFromTokens } from '../parser/module.f.js';
14
14
  import { run } from '../ast/module.f.js';
15
- import { foldStep, pure } from '../../effects/module.f.js';
15
+ import { foldStep, pure, step } from '../../effects/module.f.js';
16
16
  import { readUtf8File } from '../../effects/node/module.f.js';
17
17
  const mapDjs = context => path => {
18
18
  const res = at(path)(context.complete);
@@ -21,7 +21,7 @@ const mapDjs = context => path => {
21
21
  }
22
22
  return res.djs;
23
23
  };
24
- const parseModule = path => readUtf8File(path).step(result => {
24
+ const parseModule = path => step(readUtf8File(path), result => {
25
25
  if (result[0] === 'error') {
26
26
  return pure(error({ message: 'file not found', metadata: null }));
27
27
  }
@@ -34,8 +34,8 @@ const transpileWithImports = path => parseModuleResult => context => {
34
34
  const pathsCombine = listMap(pathConcat(dir))(parseModuleResult[1][0]);
35
35
  const pathsArray = toArray(pathsCombine);
36
36
  const contextWithStack = { ...context, stack: { first: path, tail: context.stack } };
37
- return foldStep(foldNextModuleOp)(contextWithStack)(pathsArray)
38
- .step(contextWithImports => {
37
+ const x0 = foldStep(pure(pathsArray), contextWithStack, foldNextModuleOp);
38
+ return step(x0, contextWithImports => {
39
39
  if (contextWithImports.error !== null) {
40
40
  return pure(contextWithImports);
41
41
  }
@@ -60,7 +60,7 @@ const foldNextModuleOp = path => context => {
60
60
  if (at(path)(context.complete) !== null) {
61
61
  return pure(context);
62
62
  }
63
- return parseModule(path).step(parseModuleResult => transpileWithImports(path)(parseModuleResult)(context));
63
+ return step(parseModule(path), parseModuleResult => transpileWithImports(path)(parseModuleResult)(context));
64
64
  };
65
65
  /**
66
66
  * Transpiles a DJS module graph rooted at `path` into a single `Unknown` value.
@@ -69,7 +69,7 @@ const foldNextModuleOp = path => context => {
69
69
  * evaluates the AST. Returns `['ok', value]` on success, or `['error', ParseError]`
70
70
  * on a parse failure or circular dependency.
71
71
  */
72
- export const transpile = path => foldNextModuleOp(path)({ stack: null, complete: null, error: null }).step((context) => {
72
+ export const transpile = path => step(foldNextModuleOp(path)({ stack: null, complete: null, error: null }), (context) => {
73
73
  if (context.error !== null) {
74
74
  return pure(error(context.error));
75
75
  }
@@ -2,6 +2,9 @@ export declare const proof: {
2
2
  parse: () => void;
3
3
  parseWithSubModule: () => void;
4
4
  parseWithSubModules: () => void;
5
+ parseWithIdentifierKeys: () => void;
6
+ parseWithConstIdentifier: () => void;
7
+ parseWithUnaryMinusOperator: () => void;
5
8
  parseWithFileNotFoundError: () => void;
6
9
  parseWithCycleError: () => void;
7
10
  };
@@ -3,6 +3,7 @@ import { transpile } from './module.f.js';
3
3
  import { stringifyAsTree } from '../serializer/module.f.js';
4
4
  import { virtual, emptyState } from '../../effects/node/virtual/module.f.js';
5
5
  import { utf8 } from '../../text/module.f.js';
6
+ import { assert, assertEq } from '../../asserts/module.f.js';
6
7
  const run = (root) => (path) => {
7
8
  const [_, result] = virtual({ ...emptyState, root })(transpile(path));
8
9
  return result;
@@ -10,23 +11,15 @@ const run = (root) => (path) => {
10
11
  export const proof = {
11
12
  parse: () => {
12
13
  const result = run({ a: [utf8('export default 1')] })('a');
13
- if (result[0] === 'error') {
14
- throw result[1];
15
- }
14
+ assert(result[0] !== 'error', result[1]);
16
15
  const s = stringifyAsTree(sort)(result[1]);
17
- if (s !== '1') {
18
- throw s;
19
- }
16
+ assertEq(s, '1');
20
17
  },
21
18
  parseWithSubModule: () => {
22
19
  const result = run({ a: { b: [utf8('import c from "c"\nexport default c')], c: [utf8('export default 2')] } })('a/b');
23
- if (result[0] === 'error') {
24
- throw result[1];
25
- }
20
+ assert(result[0] !== 'error', result[1]);
26
21
  const s = stringifyAsTree(sort)(result[1]);
27
- if (s !== '2') {
28
- throw s;
29
- }
22
+ assertEq(s, '2');
30
23
  },
31
24
  parseWithSubModules: () => {
32
25
  const result = run({
@@ -35,22 +28,32 @@ export const proof = {
35
28
  c: [utf8('import d from "d"\nexport default [1,d]')],
36
29
  d: [utf8('export default 2')],
37
30
  })('a');
38
- if (result[0] === 'error') {
39
- throw result[1];
40
- }
31
+ assert(result[0] !== 'error', result[1]);
41
32
  const s = stringifyAsTree(sort)(result[1]);
42
- if (s !== '[[0,2],[1,2],[0,2]]') {
43
- throw s;
44
- }
33
+ assertEq(s, '[[0,2],[1,2],[0,2]]');
34
+ },
35
+ parseWithIdentifierKeys: () => {
36
+ const result = run({ a: [utf8('export default {a:1,b:2}')] })('a');
37
+ assert(result[0] !== 'error', result[1]);
38
+ const s = stringifyAsTree(sort)(result[1]);
39
+ assertEq(s, '{"a":1,"b":2}');
40
+ },
41
+ parseWithConstIdentifier: () => {
42
+ const result = run({ a: [utf8('const a = 1\nconst b = a\nexport default {x:a,y:b}')] })('a');
43
+ assert(result[0] !== 'error', result[1]);
44
+ const s = stringifyAsTree(sort)(result[1]);
45
+ assertEq(s, '{"x":1,"y":1}');
46
+ },
47
+ parseWithUnaryMinusOperator: () => {
48
+ const result = run({ a: [utf8('export default [-1,2,-3]')] })('a');
49
+ assert(result[0] !== 'error', result[1]);
50
+ const s = stringifyAsTree(sort)(result[1]);
51
+ assertEq(s, '[-1,2,-3]');
45
52
  },
46
53
  parseWithFileNotFoundError: () => {
47
54
  const result = run({ a: [utf8('import b from "b"\nexport default b')] })('a');
48
- if (result[0] !== 'error') {
49
- throw result;
50
- }
51
- if (result[1].message !== 'file not found') {
52
- throw result;
53
- }
55
+ assert(result[0] === 'error', result);
56
+ assertEq(result[1].message, 'file not found', result);
54
57
  },
55
58
  parseWithCycleError: () => {
56
59
  const result = run({
@@ -58,11 +61,7 @@ export const proof = {
58
61
  b: [utf8('import c from "c"\nexport default c')],
59
62
  c: [utf8('import b from "b"\nexport default b')],
60
63
  })('a');
61
- if (result[0] !== 'error') {
62
- throw result;
63
- }
64
- if (result[1].message !== 'circular dependency') {
65
- throw result;
66
- }
64
+ assert(result[0] === 'error', result);
65
+ assertEq(result[1].message, 'circular dependency', result);
67
66
  },
68
67
  };
@@ -0,0 +1,72 @@
1
+ import { type Effect, type Operation } from '../module.f.ts';
2
+ /**
3
+ * A fluent, method-chaining monad over a raw {@link Effect} that also
4
+ * accumulates the history of every value the chain has produced. `.step(f)`
5
+ * is bind — `f` receives the current value followed by every prior value,
6
+ * most recent first (`f(t, ...p)`), and returns a raw `Effect`; `.step`
7
+ * re-wraps the result together with that history so `.step(f).step(g)`
8
+ * chains and stays in the `Eff` world throughout. `.map(f)` is the functor
9
+ * map — the same thing for an `f` that returns a plain value rather than an
10
+ * effect, so it is exactly `.step((...tp) => pure(f(...tp)))`. `P` is the
11
+ * tuple of prior values available to the *next* `.step` call; it grows by one
12
+ * element (the current `T`) on every step, starting empty at {@link eff}.
13
+ * `.value` is the exit back to a raw `Effect`, discarding the history. An
14
+ * `Eff` is not assignable to `Effect`; unwrap through `.value`.
15
+ *
16
+ * **`.map` grows the history just as `.step` does, and does not widen `O`.**
17
+ * Both follow from it being that `.step` call and nothing else: a chain
18
+ * rewritten from `.step(v => pure(f(v)))` to `.map(f)` must hand later
19
+ * callbacks the same prior values it did before, and a projection performs no
20
+ * command, so it contributes no operation for a runner to interpret.
21
+ *
22
+ * **The history is positional, so every parameter a callback declares is
23
+ * meaningful.** `f` is applied as `f(...tp)`, so a callback written
24
+ * `(v, n = 1) => …` or `(v, ...rest) => …` receives prior chain values in `n` /
25
+ * `rest` rather than the default or an empty rest — and where the types line up,
26
+ * TypeScript will not object. Declare exactly as many parameters as the callback
27
+ * intends to read; a defaulted or rest parameter after the current value is a
28
+ * bug, not a convenience. This is what makes `.map(g)` a *different* call from
29
+ * `.step(v => pure(g(v)))` whenever `g` is not genuinely unary — the lambda
30
+ * pins the arity at one, while passing `g` point-free exposes it to the prior
31
+ * values, the way `['1', '2', '3'].map(parseInt)` does.
32
+ *
33
+ * **`.value` is always an already-built `Effect`.** Reading it composes
34
+ * nothing: the projection that drops the history tuple to its current value is
35
+ * performed by the `.step` that produced the link, not deferred to the read.
36
+ * An `Eff` is a record to look into, not an object with a method that quietly
37
+ * does work when called.
38
+ *
39
+ * That costs one projection per link, paid whether or not the link is ever
40
+ * unwrapped — an n-link chain builds n of them where a deferred `.result()`
41
+ * method would build one. It is a constant factor on construction, with no
42
+ * extra forcing of the wrapped effect and no change in growth rate, bought in
43
+ * exchange for a uniform rule at the boundary every caller touches.
44
+ *
45
+ * At the entry it costs nothing at all: `eff(e).value` **is** `e`, because
46
+ * {@link eff} stores what it was handed rather than rebuilding it from the
47
+ * history, so wrapping and unwrapping round-trip to identity. `h` is still a
48
+ * thunk, so `eff(e)` composes nothing and never forces `e`: an `Eff` that is
49
+ * built and only read does no work at all.
50
+ *
51
+ * **`P` has no default, on purpose.** A default of `readonly[]` would make
52
+ * `Eff<O, T>` a spelling that silently erases history: an
53
+ * `Eff<O, T, readonly[A]>` is assignable to it, because `f` sits in a
54
+ * contravariant position and TypeScript accepts a callback declaring fewer
55
+ * parameters than the type it is checked against. The next `.step` callback
56
+ * would then be typed as receiving no prior values while the runtime still
57
+ * passes them, and any callback destructuring a rest parameter would be handed
58
+ * entries its type says cannot exist. Requiring the third argument means that
59
+ * erasure cannot be written at all, rather than merely being discouraged;
60
+ * {@link eff} spells `readonly[]` itself.
61
+ */
62
+ export type Eff<O extends Operation, T, P extends readonly unknown[]> = {
63
+ readonly value: Effect<O, T>;
64
+ readonly step: <Q extends Operation, R>(f: (...tp: readonly [T, ...P]) => Effect<Q, R>) => Eff<O | Q, R, readonly [T, ...P]>;
65
+ readonly map: <R>(f: (...tp: readonly [T, ...P]) => R) => Eff<O, R, readonly [T, ...P]>;
66
+ };
67
+ /**
68
+ * Wraps a raw {@link Effect}; the bridge into the `Eff` world, with an empty
69
+ * history. The empty tuple is spelled out because {@link Eff} deliberately has
70
+ * no default for `P` — see its docs.
71
+ */
72
+ export declare const eff: <O extends Operation, T>(value: Effect<O, T>) => Eff<O, T, readonly []>;
@@ -0,0 +1,46 @@
1
+ import { history, historyStep, mapStep, pure } from '../module.f.js';
2
+ /**
3
+ * Builds an `Eff` from two views of the same chain: `value`, the effect for the
4
+ * current value alone, and `h`, a thunk for the `[current, ...history]` tuple.
5
+ *
6
+ * **The two must denote the same computation** — `value` has to be what `h()`
7
+ * produces with the history dropped. Nothing enforces it. The
8
+ * redundancy is deliberate: `value` used to be derived from `h` on demand,
9
+ * which made disagreement impossible but also forced the entry case to rebuild
10
+ * an effect it was already holding. Passing it in is what lets {@link eff} hand
11
+ * the original back.
12
+ *
13
+ * The asymmetry between the two — one built, one deferred — is the point.
14
+ * `value` is either already in hand ({@link eff} was given it) or already built
15
+ * (`.step` has just composed the chain it projects from), so storing it costs
16
+ * no more than the projection itself. `h` is different: nothing needs the
17
+ * history tuple until a later `.step` asks for it, and composing effects is
18
+ * eager, so holding a thunk is the only way to not compose it yet. That keeps
19
+ * `eff(e)` free of work entirely.
20
+ *
21
+ * `.step` calls `h()` once and closes over the effect, so everything built
22
+ * from that link shares it. `eff`'s thunk is not memoized, so calling `.step`
23
+ * twice on the same `eff(e)` rebuilds and re-forces `e` — harmless under
24
+ * `Pure`'s contract, which requires the thunk to be pure and to tolerate
25
+ * repeat calls.
26
+ */
27
+ const create = (value, h) => {
28
+ // `self` is named so `.map` can be *defined* as the `.step` call it is
29
+ // documented to equal, rather than as a second copy of `.step`'s body that
30
+ // has to be re-checked against it.
31
+ const self = {
32
+ value,
33
+ step: f => {
34
+ const x1 = historyStep(h(), f);
35
+ return create(mapStep(x1, ([t]) => t), () => x1);
36
+ },
37
+ map: f => self.step((...tp) => pure(f(...tp)))
38
+ };
39
+ return self;
40
+ };
41
+ /**
42
+ * Wraps a raw {@link Effect}; the bridge into the `Eff` world, with an empty
43
+ * history. The empty tuple is spelled out because {@link Eff} deliberately has
44
+ * no default for `P` — see its docs.
45
+ */
46
+ export const eff = (value) => create(value, () => history(value));
@@ -0,0 +1,11 @@
1
+ export declare const proof: {
2
+ value: () => void;
3
+ pure: () => void;
4
+ chain: () => void;
5
+ overDo: () => void;
6
+ map: {
7
+ chain: () => void;
8
+ growsHistory: () => void;
9
+ overDo: () => void;
10
+ };
11
+ };
@@ -0,0 +1,58 @@
1
+ import { do_, match, pure } from '../module.f.js';
2
+ import { assert, assertEq } from '../../asserts/module.f.js';
3
+ import { assertPure } from '../proof.f.js';
4
+ import { eff } from './module.f.js';
5
+ const next = match({ add: (a, b) => a + b });
6
+ export const proof = {
7
+ value: () => {
8
+ assertPure(eff(pure(5)).value, 5);
9
+ },
10
+ pure: () => {
11
+ assertPure(pure(5), 5);
12
+ },
13
+ chain: () => {
14
+ const x = eff(pure(5))
15
+ .step(v => pure(v + 1))
16
+ .step(v => pure(v * 2))
17
+ .value;
18
+ assertPure(x, 12);
19
+ },
20
+ overDo: () => {
21
+ const e = eff(do_('add')(2, 3))
22
+ .step(r => pure(r + 1))
23
+ .value;
24
+ const r = next(e);
25
+ assert(r[0] === 'cont', r);
26
+ assertEq(r[1], 5);
27
+ assertPure(r[2](r[1]), 6);
28
+ },
29
+ map: {
30
+ chain: () => {
31
+ const x = eff(pure(5))
32
+ .map(v => v + 1)
33
+ .map(v => v * 2)
34
+ .value;
35
+ assertPure(x, 12);
36
+ },
37
+ // `.map` grows the history exactly as `.step` does, so a callback after
38
+ // it still reaches the pre-`map` value. This is the contract that makes
39
+ // rewriting `.step(v => pure(f(v)))` into `.map(f)` a pure readability
40
+ // change rather than one that alters what later callbacks receive.
41
+ growsHistory: () => {
42
+ const x = eff(pure(5))
43
+ .map(v => v + 1)
44
+ .step((v, prev) => pure(`${prev}${v}`))
45
+ .value;
46
+ assertPure(x, '56');
47
+ },
48
+ overDo: () => {
49
+ const e = eff(do_('add')(2, 3))
50
+ .map(r => r + 1)
51
+ .value;
52
+ const r = next(e);
53
+ assert(r[0] === 'cont', r);
54
+ assertEq(r[1], 5);
55
+ assertPure(r[2](r[1]), 6);
56
+ },
57
+ },
58
+ };
@@ -7,10 +7,15 @@ export type NonEmpty<O extends Operation, T> = {
7
7
  * The payload of a `List` effect: the next cons cell, or `undefined` at
8
8
  * end-of-stream.
9
9
  *
10
- * Since `Pure<T>` is now itself a lazy thunk (`() => T`), the effect alone is the
11
- * suspension point and the cell needs no extra wrapping thunk. `Effect<O, Next<O, T>>`
12
- * is used directly in places where `List<O, T>` cannot be written as a return type
13
- * (see {@link empty}).
10
+ * A `List` suspends only where a `Do` node does. `Pure` is a thunk, but that
11
+ * thunk is a discriminator rather than a suspension, and {@link nonEmpty} takes
12
+ * `tail` as an ordinary argument already evaluated by the time the cell is
13
+ * built. A chain of pure cells is therefore constructed in full, up front;
14
+ * streaming comes from cells produced inside a command's continuation, where
15
+ * the tail is not reached until a runner performs the command.
16
+ *
17
+ * `Effect<O, Next<O, T>>` is used directly in places where `List<O, T>` cannot
18
+ * be written as a return type (see {@link empty}).
14
19
  */
15
20
  export type Next<O extends Operation, T> = NonEmpty<O, T> | undefined;
16
21
  export type List<O extends Operation, T> = Effect<O, Next<O, T>>;
@@ -26,6 +31,7 @@ export type List<O extends Operation, T> = Effect<O, Next<O, T>>;
26
31
  */
27
32
  export declare const empty: <O extends Operation, T>() => Effect<O, Next<O, T>>;
28
33
  /**
29
- * Prepends `head` to a `ListEffect` `tail`, as a pure cons cell. See {@link empty}.
34
+ * Prepends `first` to a {@link List} `tail`, as a pure cons cell. `tail` is an
35
+ * ordinary argument, so it is built before the cell is — see {@link Next}.
30
36
  */
31
37
  export declare const nonEmpty: <O extends Operation, T>(first: T, tail: List<O, T>) => Effect<O, Next<O, T>>;
@@ -11,6 +11,7 @@ import { pure } from "../module.f.js";
11
11
  */
12
12
  export const empty = () => pure(undefined);
13
13
  /**
14
- * Prepends `head` to a `ListEffect` `tail`, as a pure cons cell. See {@link empty}.
14
+ * Prepends `first` to a {@link List} `tail`, as a pure cons cell. `tail` is an
15
+ * ordinary argument, so it is built before the cell is — see {@link Next}.
15
16
  */
16
17
  export const nonEmpty = (first, tail) => pure({ first, tail });
@@ -1,5 +1,6 @@
1
+ import { assert, assertEq } from '../../asserts/module.f.js';
1
2
  import { run } from '../mock/module.f.js';
2
- import { pure } from '../module.f.js';
3
+ import { pure, step } from '../module.f.js';
3
4
  import { asBase, asNominal, create, read, write, } from './module.f.js';
4
5
  const initial = { next: 0, values: {} };
5
6
  const mock = {
@@ -14,48 +15,33 @@ const mock = {
14
15
  memRead: key => state => [state, state.values[asBase(key)]],
15
16
  memWrite: (key, value) => state => {
16
17
  const id = asBase(key);
17
- if (!(id in state.values)) {
18
- throw id;
19
- }
18
+ assert(id in state.values, id);
20
19
  return [{
21
20
  ...state,
22
21
  values: { ...state.values, [id]: value },
23
22
  }, undefined];
24
23
  },
25
24
  };
26
- const program = create(1).step(key => read(key).step(value => write(key, value + 41).step(() => read(key))));
25
+ const program = step(create(1), key => {
26
+ const x = step(read(key), value => write(key, value + 41));
27
+ return step(x, () => read(key));
28
+ });
27
29
  export const proof = {
28
30
  roundTrip: () => {
29
31
  const [state, result] = run(mock)(initial)(program);
30
- if (result !== 42) {
31
- throw result;
32
- }
33
- if (state.values.k0 !== 42) {
34
- throw state;
35
- }
32
+ assertEq(result, 42);
33
+ assertEq(state.values.k0, 42, state);
36
34
  },
37
35
  allocatesFreshKeys: () => {
38
- const effect = create('a').step(a => create('b').step(b => pure([
39
- asBase(a),
40
- asBase(b),
41
- ])));
36
+ const effect = step(create('a'), a => step(create('b'), b => pure([asBase(a), asBase(b)])));
42
37
  const [state, [a, b]] = run(mock)(initial)(effect);
43
- if (a !== 'k0') {
44
- throw a;
45
- }
46
- if (b !== 'k1') {
47
- throw b;
48
- }
49
- if (state.values.k0 !== 'a') {
50
- throw state;
51
- }
52
- if (state.values.k1 !== 'b') {
53
- throw state;
54
- }
38
+ assertEq(a, 'k0');
39
+ assertEq(b, 'k1');
40
+ assertEq(state.values.k0, 'a', state);
41
+ assertEq(state.values.k1, 'b', state);
55
42
  },
56
43
  typeTest: () => {
57
- // const e = create(1).step(k => write(k, 'bad').step(() => read(k)))
58
- create(1).step(k => write(k, 5).step(() => read(k)));
44
+ step(create(1), k => step(write(k, 5), () => read(k)));
59
45
  },
60
46
  throw: () => {
61
47
  const key = asNominal('missing');