functionalscript 0.2.6 → 0.3.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 (428) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +5 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/module.f.ts +108 -0
  55. package/html/{test.f.mjs → test.f.ts} +10 -7
  56. package/issues/lang/3110-function.md +25 -1
  57. package/issues/{test.f.mjs → test.f.ts} +3 -2
  58. package/js/tokenizer/module.f.ts +882 -0
  59. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  60. package/json/module.f.ts +94 -0
  61. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  62. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  63. package/json/serializer/module.f.ts +70 -0
  64. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  65. package/json/{test.f.mjs → test.f.ts} +3 -3
  66. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  67. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  68. package/nanvm-lib/src/extension.rs +15 -4
  69. package/nanvm-lib/src/interface.rs +7 -10
  70. package/nanvm-lib/src/lib.rs +3 -3
  71. package/nanvm-lib/src/naive.rs +10 -3
  72. package/nanvm-lib/src/nanenum.rs +5 -1
  73. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  74. package/nodejs/version/{main.mjs → main.ts} +1 -1
  75. package/nodejs/version/module.f.ts +42 -0
  76. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  77. package/package.json +9 -9
  78. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  79. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  80. package/text/module.f.ts +30 -0
  81. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  82. package/text/{test.f.mjs → test.f.ts} +5 -4
  83. package/text/utf16/module.f.ts +108 -0
  84. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  85. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  86. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  87. package/tsconfig.json +4 -1
  88. package/types/array/module.f.ts +89 -0
  89. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  90. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  91. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  92. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  93. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  94. package/types/bit_vec/{module.f.mjs → module.f.ts} +16 -37
  95. package/types/bit_vec/{test.f.mjs → test.f.ts} +1 -1
  96. package/types/btree/find/module.f.ts +92 -0
  97. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  98. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  99. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  100. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  101. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  102. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  103. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  104. package/types/btree/types/module.f.ts +27 -0
  105. package/types/byte_set/module.f.ts +70 -0
  106. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  107. package/types/function/compare/module.f.ts +26 -0
  108. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  109. package/types/function/module.f.ts +43 -0
  110. package/types/function/operator/module.f.ts +63 -0
  111. package/types/function/test.f.ts +20 -0
  112. package/types/list/module.f.ts +345 -0
  113. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  114. package/types/map/module.f.ts +65 -0
  115. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  116. package/types/nibble_set/module.f.ts +34 -0
  117. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  118. package/types/nullable/module.f.ts +9 -0
  119. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  120. package/types/number/module.f.ts +16 -0
  121. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  122. package/types/object/module.f.ts +30 -0
  123. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  124. package/types/range/module.f.ts +10 -0
  125. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  126. package/types/range_map/module.f.ts +70 -0
  127. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  128. package/types/result/module.f.ts +20 -0
  129. package/types/result/{module.mjs → module.ts} +4 -3
  130. package/types/sorted_list/module.f.ts +83 -0
  131. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  132. package/types/sorted_set/module.f.ts +36 -0
  133. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  134. package/types/string/module.f.ts +24 -0
  135. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  136. package/types/string_set/module.f.ts +37 -0
  137. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  138. package/com/cpp/testlib.f.mjs +0 -8
  139. package/com/cs/testlib.f.mjs +0 -8
  140. package/com/rust/module.f.mjs +0 -272
  141. package/com/rust/testlib.f.mjs +0 -8
  142. package/com/types/module.f.mjs +0 -67
  143. package/commonjs/build/module.f.mjs +0 -100
  144. package/commonjs/module/function/module.f.mjs +0 -21
  145. package/commonjs/module/module.f.mjs +0 -53
  146. package/commonjs/module.f.mjs +0 -11
  147. package/commonjs/package/dependencies/module.f.mjs +0 -22
  148. package/commonjs/package/module.f.mjs +0 -36
  149. package/dev/index.mjs +0 -3
  150. package/dev/test.mjs +0 -60
  151. package/fsm/module.f.mjs +0 -99
  152. package/html/module.f.mjs +0 -102
  153. package/js/tokenizer/module.f.mjs +0 -872
  154. package/json/module.f.mjs +0 -89
  155. package/json/serializer/module.f.mjs +0 -87
  156. package/jsr.json +0 -66
  157. package/nodejs/version/module.f.mjs +0 -47
  158. package/out/com/cpp/module.f.d.mts +0 -7
  159. package/out/com/cpp/module.f.mjs +0 -130
  160. package/out/com/cpp/test.f.d.mts +0 -2
  161. package/out/com/cpp/test.f.mjs +0 -40
  162. package/out/com/cpp/testlib.f.d.mts +0 -2
  163. package/out/com/cpp/testlib.f.mjs +0 -7
  164. package/out/com/cs/module.f.d.mts +0 -7
  165. package/out/com/cs/module.f.mjs +0 -104
  166. package/out/com/cs/test.f.d.mts +0 -2
  167. package/out/com/cs/test.f.mjs +0 -43
  168. package/out/com/cs/testlib.f.d.mts +0 -2
  169. package/out/com/cs/testlib.f.mjs +0 -7
  170. package/out/com/rust/module.f.d.mts +0 -23
  171. package/out/com/rust/module.f.mjs +0 -224
  172. package/out/com/rust/test.f.d.mts +0 -2
  173. package/out/com/rust/test.f.mjs +0 -123
  174. package/out/com/rust/testlib.f.d.mts +0 -2
  175. package/out/com/rust/testlib.f.mjs +0 -7
  176. package/out/com/test/build.d.mts +0 -1
  177. package/out/com/test/build.f.d.mts +0 -26
  178. package/out/com/test/build.f.mjs +0 -98
  179. package/out/com/test/build.mjs +0 -40
  180. package/out/com/types/module.f.d.mts +0 -23
  181. package/out/com/types/module.f.mjs +0 -51
  182. package/out/com/types/testlib.f.d.mts +0 -44
  183. package/out/com/types/testlib.f.mjs +0 -30
  184. package/out/commonjs/build/module.f.d.mts +0 -20
  185. package/out/commonjs/build/module.f.mjs +0 -107
  186. package/out/commonjs/build/test.f.d.mts +0 -3
  187. package/out/commonjs/build/test.f.mjs +0 -102
  188. package/out/commonjs/module/function/module.f.d.mts +0 -5
  189. package/out/commonjs/module/function/module.f.mjs +0 -15
  190. package/out/commonjs/module/module.f.d.mts +0 -52
  191. package/out/commonjs/module/module.f.mjs +0 -48
  192. package/out/commonjs/module.d.mts +0 -3
  193. package/out/commonjs/module.f.d.mts +0 -2
  194. package/out/commonjs/module.f.mjs +0 -10
  195. package/out/commonjs/module.mjs +0 -26
  196. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  197. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  198. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  199. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  200. package/out/commonjs/package/module.f.d.mts +0 -21
  201. package/out/commonjs/package/module.f.mjs +0 -40
  202. package/out/commonjs/package/test.f.d.mts +0 -2
  203. package/out/commonjs/package/test.f.mjs +0 -27
  204. package/out/commonjs/path/module.f.d.mts +0 -60
  205. package/out/commonjs/path/module.f.mjs +0 -171
  206. package/out/commonjs/path/test.f.d.mts +0 -25
  207. package/out/commonjs/path/test.f.mjs +0 -231
  208. package/out/commonjs/test.d.mts +0 -8
  209. package/out/commonjs/test.mjs +0 -87
  210. package/out/crypto/prime_field/module.f.d.mts +0 -67
  211. package/out/crypto/prime_field/module.f.mjs +0 -110
  212. package/out/crypto/prime_field/test.f.d.mts +0 -13
  213. package/out/crypto/prime_field/test.f.mjs +0 -152
  214. package/out/crypto/secp/module.f.d.mts +0 -110
  215. package/out/crypto/secp/module.f.mjs +0 -173
  216. package/out/crypto/secp/test.f.d.mts +0 -5
  217. package/out/crypto/secp/test.f.mjs +0 -78
  218. package/out/crypto/sha2/module.f.d.mts +0 -15
  219. package/out/crypto/sha2/module.f.mjs +0 -172
  220. package/out/crypto/sha2/test.f.d.mts +0 -10
  221. package/out/crypto/sha2/test.f.mjs +0 -86
  222. package/out/dev/index.d.mts +0 -1
  223. package/out/dev/index.mjs +0 -2
  224. package/out/dev/module.d.mts +0 -26
  225. package/out/dev/module.f.d.mts +0 -1
  226. package/out/dev/module.f.mjs +0 -2
  227. package/out/dev/module.mjs +0 -167
  228. package/out/dev/test/module.f.d.mts +0 -25
  229. package/out/dev/test/module.f.mjs +0 -134
  230. package/out/dev/test.d.mts +0 -3
  231. package/out/dev/test.f.d.mts +0 -9
  232. package/out/dev/test.f.mjs +0 -58
  233. package/out/dev/test.mjs +0 -52
  234. package/out/djs/module.f.d.mts +0 -20
  235. package/out/djs/module.f.mjs +0 -79
  236. package/out/djs/parser/module.f.d.mts +0 -56
  237. package/out/djs/parser/module.f.mjs +0 -448
  238. package/out/djs/parser/test.f.d.mts +0 -13
  239. package/out/djs/parser/test.f.mjs +0 -569
  240. package/out/djs/test.f.d.mts +0 -12
  241. package/out/djs/test.f.mjs +0 -84
  242. package/out/djs/tokenizer/module.f.d.mts +0 -13
  243. package/out/djs/tokenizer/module.f.mjs +0 -91
  244. package/out/djs/tokenizer/test.f.d.mts +0 -7
  245. package/out/djs/tokenizer/test.f.mjs +0 -530
  246. package/out/fsc/module.f.d.mts +0 -7
  247. package/out/fsc/module.f.mjs +0 -105
  248. package/out/fsc/test.f.d.mts +0 -4
  249. package/out/fsc/test.f.mjs +0 -19
  250. package/out/fsm/module.f.d.mts +0 -14
  251. package/out/fsm/module.f.mjs +0 -80
  252. package/out/fsm/test.f.d.mts +0 -5
  253. package/out/fsm/test.f.mjs +0 -138
  254. package/out/html/module.f.d.mts +0 -17
  255. package/out/html/module.f.mjs +0 -80
  256. package/out/html/test.f.d.mts +0 -10
  257. package/out/html/test.f.mjs +0 -45
  258. package/out/issues/test.f.d.mts +0 -16
  259. package/out/issues/test.f.mjs +0 -66
  260. package/out/js/tokenizer/module.f.d.mts +0 -163
  261. package/out/js/tokenizer/module.f.mjs +0 -729
  262. package/out/js/tokenizer/test.f.d.mts +0 -9
  263. package/out/js/tokenizer/test.f.mjs +0 -906
  264. package/out/json/module.f.d.mts +0 -33
  265. package/out/json/module.f.mjs +0 -89
  266. package/out/json/parser/module.f.d.mts +0 -32
  267. package/out/json/parser/module.f.mjs +0 -224
  268. package/out/json/parser/test.f.d.mts +0 -5
  269. package/out/json/parser/test.f.mjs +0 -329
  270. package/out/json/serializer/module.f.d.mts +0 -36
  271. package/out/json/serializer/module.f.mjs +0 -67
  272. package/out/json/serializer/test.f.d.mts +0 -8
  273. package/out/json/serializer/test.f.mjs +0 -87
  274. package/out/json/test.f.d.mts +0 -8
  275. package/out/json/test.f.mjs +0 -61
  276. package/out/json/tokenizer/module.f.d.mts +0 -13
  277. package/out/json/tokenizer/module.f.mjs +0 -78
  278. package/out/json/tokenizer/test.f.d.mts +0 -6
  279. package/out/json/tokenizer/test.f.mjs +0 -420
  280. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  281. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  282. package/out/nodejs/version/main.d.mts +0 -1
  283. package/out/nodejs/version/main.mjs +0 -3
  284. package/out/nodejs/version/module.f.d.mts +0 -12
  285. package/out/nodejs/version/module.f.mjs +0 -34
  286. package/out/nodejs/version/test.f.d.mts +0 -2
  287. package/out/nodejs/version/test.f.mjs +0 -97
  288. package/out/text/ascii/module.f.d.mts +0 -70
  289. package/out/text/ascii/module.f.mjs +0 -154
  290. package/out/text/ascii/test.f.d.mts +0 -4
  291. package/out/text/ascii/test.f.mjs +0 -14
  292. package/out/text/module.f.d.mts +0 -13
  293. package/out/text/module.f.mjs +0 -19
  294. package/out/text/sgr/module.f.d.mts +0 -12
  295. package/out/text/sgr/module.f.mjs +0 -17
  296. package/out/text/test.f.d.mts +0 -2
  297. package/out/text/test.f.mjs +0 -19
  298. package/out/text/utf16/module.f.d.mts +0 -12
  299. package/out/text/utf16/module.f.mjs +0 -86
  300. package/out/text/utf16/test.f.d.mts +0 -6
  301. package/out/text/utf16/test.f.mjs +0 -145
  302. package/out/text/utf8/module.f.d.mts +0 -10
  303. package/out/text/utf8/module.f.mjs +0 -126
  304. package/out/text/utf8/test.f.d.mts +0 -6
  305. package/out/text/utf8/test.f.mjs +0 -175
  306. package/out/types/array/module.f.d.mts +0 -31
  307. package/out/types/array/module.f.mjs +0 -95
  308. package/out/types/array/test.f.d.mts +0 -10
  309. package/out/types/array/test.f.mjs +0 -116
  310. package/out/types/bigfloat/module.f.d.mts +0 -6
  311. package/out/types/bigfloat/module.f.mjs +0 -77
  312. package/out/types/bigfloat/test.f.d.mts +0 -6
  313. package/out/types/bigfloat/test.f.mjs +0 -349
  314. package/out/types/bigint/module.f.d.mts +0 -29
  315. package/out/types/bigint/module.f.mjs +0 -114
  316. package/out/types/bigint/test.f.d.mts +0 -16
  317. package/out/types/bigint/test.f.mjs +0 -199
  318. package/out/types/bit_vec/module.f.d.mts +0 -158
  319. package/out/types/bit_vec/module.f.mjs +0 -194
  320. package/out/types/bit_vec/test.f.d.mts +0 -23
  321. package/out/types/bit_vec/test.f.mjs +0 -210
  322. package/out/types/btree/find/module.f.d.mts +0 -36
  323. package/out/types/btree/find/module.f.mjs +0 -137
  324. package/out/types/btree/find/test.f.d.mts +0 -2
  325. package/out/types/btree/find/test.f.mjs +0 -156
  326. package/out/types/btree/module.f.d.mts +0 -5
  327. package/out/types/btree/module.f.mjs +0 -34
  328. package/out/types/btree/remove/module.f.d.mts +0 -14
  329. package/out/types/btree/remove/module.f.mjs +0 -209
  330. package/out/types/btree/remove/test.f.d.mts +0 -7
  331. package/out/types/btree/remove/test.f.mjs +0 -638
  332. package/out/types/btree/set/module.f.d.mts +0 -5
  333. package/out/types/btree/set/module.f.mjs +0 -114
  334. package/out/types/btree/set/test.f.d.mts +0 -2
  335. package/out/types/btree/set/test.f.mjs +0 -390
  336. package/out/types/btree/test.f.d.mts +0 -13
  337. package/out/types/btree/test.f.mjs +0 -83
  338. package/out/types/btree/types/module.f.d.mts +0 -14
  339. package/out/types/btree/types/module.f.mjs +0 -50
  340. package/out/types/byte_set/module.f.d.mts +0 -25
  341. package/out/types/byte_set/module.f.mjs +0 -42
  342. package/out/types/byte_set/test.f.d.mts +0 -13
  343. package/out/types/byte_set/test.f.mjs +0 -123
  344. package/out/types/function/compare/module.f.d.mts +0 -23
  345. package/out/types/function/compare/module.f.mjs +0 -22
  346. package/out/types/function/compare/test.f.d.mts +0 -2
  347. package/out/types/function/compare/test.f.mjs +0 -8
  348. package/out/types/function/module.f.d.mts +0 -51
  349. package/out/types/function/module.f.mjs +0 -44
  350. package/out/types/function/operator/module.f.d.mts +0 -60
  351. package/out/types/function/operator/module.f.mjs +0 -60
  352. package/out/types/function/test.f.d.mts +0 -2
  353. package/out/types/function/test.f.mjs +0 -15
  354. package/out/types/list/module.f.d.mts +0 -82
  355. package/out/types/list/module.f.mjs +0 -269
  356. package/out/types/list/test.f.d.mts +0 -38
  357. package/out/types/list/test.f.mjs +0 -401
  358. package/out/types/map/module.f.d.mts +0 -21
  359. package/out/types/map/module.f.mjs +0 -54
  360. package/out/types/map/test.f.d.mts +0 -5
  361. package/out/types/map/test.f.mjs +0 -115
  362. package/out/types/nibble_set/module.f.d.mts +0 -16
  363. package/out/types/nibble_set/module.f.mjs +0 -19
  364. package/out/types/nibble_set/test.f.d.mts +0 -13
  365. package/out/types/nibble_set/test.f.mjs +0 -90
  366. package/out/types/nullable/module.f.d.mts +0 -9
  367. package/out/types/nullable/module.f.mjs +0 -9
  368. package/out/types/nullable/test.f.d.mts +0 -2
  369. package/out/types/nullable/test.f.mjs +0 -12
  370. package/out/types/number/module.f.d.mts +0 -7
  371. package/out/types/number/module.f.mjs +0 -12
  372. package/out/types/number/test.f.d.mts +0 -11
  373. package/out/types/number/test.f.mjs +0 -126
  374. package/out/types/object/module.f.d.mts +0 -22
  375. package/out/types/object/module.f.mjs +0 -27
  376. package/out/types/object/test.f.d.mts +0 -5
  377. package/out/types/object/test.f.mjs +0 -17
  378. package/out/types/range/module.f.d.mts +0 -6
  379. package/out/types/range/module.f.mjs +0 -6
  380. package/out/types/range/test.f.d.mts +0 -2
  381. package/out/types/range/test.f.mjs +0 -18
  382. package/out/types/range_map/module.f.d.mts +0 -19
  383. package/out/types/range_map/module.f.mjs +0 -84
  384. package/out/types/range_map/test.f.d.mts +0 -6
  385. package/out/types/range_map/test.f.mjs +0 -201
  386. package/out/types/result/module.d.mts +0 -7
  387. package/out/types/result/module.f.d.mts +0 -22
  388. package/out/types/result/module.f.mjs +0 -25
  389. package/out/types/result/module.mjs +0 -16
  390. package/out/types/sorted_list/module.f.d.mts +0 -53
  391. package/out/types/sorted_list/module.f.mjs +0 -102
  392. package/out/types/sorted_list/test.f.d.mts +0 -5
  393. package/out/types/sorted_list/test.f.mjs +0 -66
  394. package/out/types/sorted_set/module.f.d.mts +0 -19
  395. package/out/types/sorted_set/module.f.mjs +0 -29
  396. package/out/types/sorted_set/test.f.d.mts +0 -6
  397. package/out/types/sorted_set/test.f.mjs +0 -80
  398. package/out/types/string/module.f.d.mts +0 -9
  399. package/out/types/string/module.f.mjs +0 -17
  400. package/out/types/string/test.f.d.mts +0 -15
  401. package/out/types/string/test.f.mjs +0 -58
  402. package/out/types/string_set/module.f.d.mts +0 -13
  403. package/out/types/string_set/module.f.mjs +0 -29
  404. package/out/types/string_set/test.f.d.mts +0 -5
  405. package/out/types/string_set/test.f.mjs +0 -65
  406. package/text/module.f.mjs +0 -27
  407. package/text/utf16/module.f.mjs +0 -96
  408. package/types/array/module.f.mjs +0 -119
  409. package/types/btree/find/module.f.mjs +0 -125
  410. package/types/btree/types/module.f.mjs +0 -64
  411. package/types/byte_set/module.f.mjs +0 -61
  412. package/types/function/compare/module.f.mjs +0 -29
  413. package/types/function/module.f.mjs +0 -50
  414. package/types/function/operator/module.f.mjs +0 -78
  415. package/types/function/test.f.mjs +0 -17
  416. package/types/list/module.f.mjs +0 -320
  417. package/types/map/module.f.mjs +0 -67
  418. package/types/nibble_set/module.f.mjs +0 -28
  419. package/types/nullable/module.f.mjs +0 -11
  420. package/types/number/module.f.mjs +0 -16
  421. package/types/object/module.f.mjs +0 -33
  422. package/types/range/module.f.mjs +0 -8
  423. package/types/range_map/module.f.mjs +0 -84
  424. package/types/result/module.f.mjs +0 -28
  425. package/types/sorted_list/module.f.mjs +0 -107
  426. package/types/sorted_set/module.f.mjs +0 -38
  427. package/types/string/module.f.mjs +0 -22
  428. package/types/string_set/module.f.mjs +0 -36
@@ -1,64 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
-
3
- /**
4
- * @template T
5
- * @typedef {readonly[T]} Array1
6
- */
7
-
8
- /**
9
- * @template T
10
- * @typedef {readonly[T,T]} Array2
11
- */
12
-
13
- /**
14
- * @template T
15
- * @typedef {readonly[T,T,T]} Array3
16
- */
17
-
18
- /** @typedef {0|1} Index2 */
19
-
20
- /** @typedef {0|1|2} Index3 */
21
-
22
- /** @typedef {0|1|2|3|4} Index5 */
23
-
24
- //
25
-
26
- /**
27
- * @template T
28
- * @typedef {Array1<T>} Leaf1
29
- */
30
-
31
- /**
32
- * @template T
33
- * @typedef {Array2<T>} Leaf2
34
- */
35
-
36
- /**
37
- * @template T
38
- * @typedef {readonly [Node<T>, T, Node<T>]} Branch3
39
- */
40
-
41
- /**
42
- * @template T
43
- * @typedef {readonly [Node<T>, T, Node<T>, T, Node<T>]} Branch5
44
- */
45
-
46
- /**
47
- * @template T
48
- * @typedef { Leaf1<T> | Leaf2<T> | Branch3<T> | Branch5<T>} Node
49
- */
50
-
51
- /**
52
- * @template T
53
- * @typedef {Node<T> | null} Tree
54
- */
55
-
56
- /**
57
- * @template T
58
- * @typedef {readonly[Node<T>]} Branch1
59
- */
60
-
61
- /**
62
- * @template T
63
- * @typedef { readonly[...Branch5<T>, T, Node<T>] } Branch7
64
- */
@@ -1,61 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as f from '../function/module.f.mjs'
3
- const { compose } = f
4
- import * as RangeMap from '../range_map/module.f.mjs'
5
- import * as SortedSet from '../sorted_set/module.f.mjs'
6
- import * as list from '../list/module.f.mjs'
7
- const { reverse, countdown, flat, map } = list
8
-
9
- /** @typedef {bigint} ByteSet */
10
- /** @typedef {number} Byte */
11
-
12
- /** @type {(n: Byte) => (s: ByteSet) => boolean} */
13
- export const has = n => s => ((s >> BigInt(n)) & 1n) === 1n
14
-
15
- // create a set
16
-
17
- export const empty = 0n
18
-
19
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
20
- export const universe = 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFFn
21
-
22
- /** @type {(n: Byte) => ByteSet} */
23
- export const one = n => 1n << BigInt(n)
24
-
25
- /** @type {(r: readonly[Byte, Byte]) => ByteSet} */
26
- export const range = ([b, e]) => one(e - b + 1) - 1n << BigInt(b)
27
-
28
- // set operations
29
-
30
- /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
31
- export const union = a => b => a | b
32
-
33
- /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
34
- const intersect = a => b => a & b
35
-
36
- /** @type {(n: ByteSet) => ByteSet} */
37
- export const complement = n => universe ^ n
38
-
39
- /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
40
- const difference = compose(intersect)(compose(complement))
41
-
42
- // additional operations
43
-
44
- export const set = compose(one)(union)
45
-
46
- export const setRange = compose(range)(union)
47
-
48
- /** @type {(n: Byte) => (s: ByteSet) => ByteSet} */
49
- export const unset = n => s => difference(s)(one(n))
50
-
51
- const counter = reverse(countdown(256))
52
-
53
- /** @type {(n: ByteSet) => (s: string) => (i: number) => RangeMap.RangeMap<SortedSet.SortedSet<string>>} */
54
- const toRangeMapOp = n => s => i => {
55
- const current = has(i + 1)(n)
56
- const prev = has(i)(n)
57
- return current === prev ? null : [[prev ? [s] : [], i]]
58
- }
59
-
60
- /** @type {(n: ByteSet) => (s: string) => RangeMap.RangeMap<SortedSet.SortedSet<string>>} */
61
- export const toRangeMap = n => s => flat(map(toRangeMapOp(n)(s))(counter))
@@ -1,29 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as Array from '../../array/module.f.mjs'
3
-
4
- /** @typedef {Array.Index3} Index3 */
5
- /** @typedef {Array.Index5} Index5 */
6
-
7
- /**
8
- * @template T
9
- * @typedef {Array.Array2<T>} Array2
10
- */
11
-
12
- /** @typedef {-1|0|1} Sign */
13
-
14
- /**
15
- * @template T
16
- * @typedef {(_: T) => Sign} Compare
17
- */
18
-
19
- /** @type {<T>(cmp: Compare<T>) => (value: T) => Index3} */
20
- export const index3 = cmp => value => /** @type {Index3} */ (cmp(value) + 1)
21
-
22
- /** @type {<T>(cmp: Compare<T>) => (v2: Array2<T>) => Index5} */
23
- export const index5 = cmp => ([v0, v1]) => {
24
- const _0 = cmp(v0)
25
- return /** @type {Index5} */ (_0 <= 0 ? _0 + 1 : cmp(v1) + 3)
26
- }
27
-
28
- /** @type {<T>(a: T) => (b: T) => Sign} */
29
- export const unsafeCmp = a => b => a < b ? -1 : a > b ? 1 : 0
@@ -1,50 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
-
3
- /**
4
- * A generic function type.
5
- *
6
- * @template I
7
- * @template O
8
- * @typedef {(_: I) => O} Func
9
- */
10
-
11
- /**
12
- * A postfix compose function.
13
- *
14
- * @type {<I, X>(g: Func<I, X>) => <O>(f: Func<X, O>) => Func<I, O>}
15
- */
16
- export const compose = g => f => x => f(g(x))
17
-
18
- /**
19
- * A generic identity function.
20
- *
21
- * @type {<T>(value: T) => T}
22
- */
23
- export const identity = value => value
24
-
25
- /**
26
- * Flips the arguments of a curried function.
27
- *
28
- * @type {<A, B, C>(f: (a: A) => (b: B) => C) => (b: B) => (a: A) => C}
29
- */
30
- export const flip = f => b => a => f(a)(b)
31
-
32
- /**
33
- * A functional utility type that enables seamless chaining of transformations.
34
- *
35
- * @template I,O
36
- * @typedef {{
37
- * readonly result: Func<I, O>
38
- * readonly then: <T>(g: Func<O, T>) => Fn<I, T>
39
- * }} Fn
40
- */
41
-
42
- /**
43
- * Creates an `Fn` instance from a function, enabling chaining of transformations.
44
- *
45
- * @type {<I, O>(f: (i: I) => O) => Fn<I, O>}
46
- */
47
- export const fn = result => ({
48
- result,
49
- then: g => fn(compose(result)(g))
50
- })
@@ -1,78 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- /**
3
- * @template A
4
- * @template B
5
- * @template R
6
- * @typedef {(a: A) => (b: B) => R} Binary
7
- */
8
-
9
- /**
10
- * @template I,O
11
- * @typedef {Binary<I, O, O>} Fold
12
- */
13
-
14
- /** @type {(separator: string) => Reduce<string>} */
15
- export const join = separator => value => prior => `${prior}${separator}${value}`
16
-
17
- /** @type {Reduce<string>} */
18
- export const concat = i => acc => `${acc}${i}`
19
-
20
- /**
21
- * @template T
22
- * @template R
23
- * @typedef {(value: T) => R} Unary
24
- */
25
-
26
- /** @type {Unary<boolean, boolean>} */
27
- export const logicalNot = v => !v
28
-
29
- /**
30
- * @template T
31
- * @typedef {Binary<T, T, boolean>} Equal
32
- */
33
-
34
- /** @type {<T>(a: T) => (b: T) => boolean} */
35
- export const strictEqual = a => b => a === b
36
-
37
- /**
38
- * @template I,O
39
- * @typedef {(input: I) => readonly[O, Scan<I,O>]} Scan
40
- */
41
-
42
- /**
43
- * @template I,S,O
44
- * @typedef {(prior: S) => (input: I) => readonly[O, S]} StateScan
45
- */
46
-
47
- /** @type {<I, S, O>(op: StateScan<I, S, O>) => (prior: S) => Scan<I, O>} */
48
- export const stateScanToScan = op => prior => i => {
49
- const [o, s] = op(prior)(i)
50
- return [o, stateScanToScan(op)(s)]
51
- }
52
-
53
- /** @type {<I, O>(fold: Fold<I, O>) => (prior: O) => Scan<I, O>} */
54
- export const foldToScan = fold => prior => i => {
55
- const result = fold(i)(prior)
56
- return [result, foldToScan(fold)(result)]
57
- }
58
-
59
- /**
60
- * @template T
61
- * @typedef {Fold<T, T>} Reduce
62
- */
63
-
64
- /** @type {<T>(fold: Reduce<T>) => Scan<T, T>} */
65
- export const reduceToScan = op => init => [init, foldToScan(op)(init)]
66
-
67
- /** @type {Reduce<number>} */
68
- export const addition = a => b => a + b
69
-
70
- /** @type {Reduce<number>} */
71
- export const min = a => b => a < b ? a : b
72
-
73
- /** @type {Reduce<number>} */
74
- export const max = a => b => a > b ? a : b
75
-
76
- export const increment = addition(1)
77
-
78
- export const counter = () => increment
@@ -1,17 +0,0 @@
1
- import * as _ from './module.f.mjs'
2
-
3
- const { fn } = _
4
-
5
- export default () => {
6
- /** @type {(x: string) => readonly[string]} */
7
- const f = x => [x]
8
- /** @type {(x: readonly[string]) => readonly[number]} */
9
- const g = ([x]) => [x.length]
10
- /** @type {(x: readonly[number]) => number} */
11
- const w = ([x]) => x
12
-
13
- const r = fn(f).then(g).then(w).result
14
-
15
- const result = r('hello')
16
- if (result !== 5) { throw r }
17
- }
@@ -1,320 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as function_ from '../function/module.f.mjs'
3
- const { identity, fn, compose } = function_
4
- import * as operator from '../function/operator/module.f.mjs'
5
- const {
6
- addition,
7
- logicalNot,
8
- strictEqual,
9
- stateScanToScan,
10
- foldToScan,
11
- reduceToScan
12
- } = operator
13
-
14
- /**
15
- * @template T
16
- * @typedef {NotLazy<T> | Thunk<T>} List
17
- */
18
-
19
- /**
20
- * @template T
21
- * @typedef {|
22
- * Result<T> |
23
- * Concat<T> |
24
- * readonly T[]
25
- * } NotLazy
26
- */
27
-
28
- /** @typedef {null} Empty */
29
-
30
- /**
31
- * @template T
32
- * @typedef {Empty | NonEmpty<T>} Result
33
- */
34
-
35
- /**
36
- * @template T
37
- * @typedef {() => List<T>} Thunk
38
- */
39
-
40
- /**
41
- * @template T
42
- * @typedef {{
43
- * readonly first: T
44
- * readonly tail: List<T>
45
- * }} NonEmpty
46
- */
47
-
48
- /**
49
- * @template T
50
- * @typedef {{
51
- * readonly head: List<T>
52
- * readonly tail: List<T>
53
- * }} Concat
54
- */
55
-
56
- /** @type {<T>(array: readonly T[]) => Result<T>} */
57
- const fromArray = array => {
58
- /** @typedef {typeof array extends readonly (infer T)[] ? T : never} T */
59
- /** @type {(i: number) => Result<T>} */
60
- const at = i => i < array.length ? { first: array[i], tail: () => at(i + 1) } : null
61
- return at(0)
62
- }
63
-
64
- /** @type {<T>(head: List<T>) => (tail: List<T>) => List<T>} */
65
- export const concat = head => tail => tail === null ? head : ({ head, tail })
66
-
67
- /** @type {<T>(list: List<T>) => NotLazy<T> } */
68
- const trampoline = list => {
69
- while (typeof list === 'function') { list = list() }
70
- return list
71
- }
72
-
73
- /** @type {<T>(list: List<T>) => Result<T>} */
74
- export const next = head => {
75
- /** @type {typeof head} */
76
- let tail = null
77
- while (true) {
78
- head = trampoline(head)
79
-
80
- if (head instanceof Array) {
81
- head = fromArray(head)
82
- } else if (head !== null && 'head' in head) {
83
- [head, tail] = [head.head, concat(head.tail)(tail)]
84
- continue
85
- }
86
-
87
- if (head !== null) {
88
- return { first: head.first, tail: concat(head.tail)(tail) }
89
- }
90
-
91
- if (tail === null) { return null }
92
-
93
- [head, tail] = [tail, null]
94
- }
95
- }
96
-
97
- /** @type {<T>(list: List<T>) => Iterable<T>} */
98
- export const iterable = list => ({
99
- *[Symbol.iterator]() {
100
- let i = list
101
- while (true) {
102
- const r = next(i)
103
- if (r === null) { return }
104
- yield r.first
105
- i = r.tail
106
- }
107
- }
108
- })
109
-
110
- const { from } = Array
111
-
112
- /** @type {<T>(list: List<T>) => readonly T[]} */
113
- export const toArray = list => {
114
- const u = trampoline(list)
115
- return u instanceof Array ? u : from(iterable(u))
116
- }
117
-
118
- /** @type {<I, O>(step: (n: NonEmpty<I>) => List<O>) => (input: List<I>) => Thunk<O>} */
119
- const apply = f => input => () => {
120
- const n = next(input)
121
- if (n === null) { return null }
122
- return f(n)
123
- }
124
-
125
- /** @type {<T>(n: NonEmpty<List<T>>) => List<T>} */
126
- const flatStep = ({ first, tail }) => concat(first)(flat(tail))
127
-
128
- /** @type {<T>(list: List<List<T>>) => Thunk<T>} */
129
- export const flat = apply(flatStep)
130
-
131
- /** @type {<I, O>(f: (value: I) => O) => (n: NonEmpty<I>) => List<O>} */
132
- const mapStep = f => ({ first, tail }) => ({ first: f(first), tail: map(f)(tail) })
133
-
134
- /** @type {<I, O>(f: (value: I) => O) => (input: List<I>) => Thunk<O>} */
135
- export const map = f => apply(mapStep(f))
136
-
137
- /** @type {<I, O>(f: (value: I) => List<O>) => (input: List<I>) => Thunk<O>} */
138
- export const flatMap = f => compose(map(f))(flat)
139
-
140
- /** @type {<T>(f: (value: T) => boolean) => (n: NonEmpty<T>) => List<T>} */
141
- const filterStep = f => ({ first, tail }) => {
142
- const newTail = filter(f)(tail)
143
- return f(first) ? { first, tail: newTail } : newTail
144
- }
145
-
146
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
147
- export const filter = f => apply(filterStep(f))
148
-
149
- /** @type {<I, O>(f: (value: I) => O|null) => (n: NonEmpty<I>) => List<O>} */
150
- const filterMapStep = f => n => {
151
- const [first, tail] = [f(n.first), filterMap(f)(n.tail)]
152
- return first === null ? tail : { first, tail }
153
- }
154
-
155
- /** @type {<I, O>(f: (value: I) => O|null) => (input: List<I>) => Thunk<O>} */
156
- export const filterMap = f => apply(filterMapStep(f))
157
-
158
- /** @type {<T>(f: (value: T) => boolean) => (n: NonEmpty<T>) => List<T>} */
159
- const takeWhileStep = f => ({ first, tail }) => f(first) ? { first, tail: takeWhile(f)(tail) } : null
160
-
161
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
162
- export const takeWhile = f => apply(takeWhileStep(f))
163
-
164
- /** @type {(n: number) => <T>(result: NonEmpty<T>) => List<T>} */
165
- const takeStep = n => ({ first, tail }) => 0 < n ? { first: first, tail: take(n - 1)(tail) } : null
166
-
167
- /** @type {(n: number) => <T>(input: List<T>) => Thunk<T>} */
168
- export const take = n => apply(takeStep(n))
169
-
170
- /** @type {<T>(f: (value: T) => boolean) => (ne: NonEmpty<T>) => List<T>} */
171
- const dropWhileStep = f => ne => f(ne.first) ? dropWhile(f)(ne.tail) : ne
172
-
173
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
174
- export const dropWhile = f => apply(dropWhileStep(f))
175
-
176
- /** @type {(n: number) => <T>(ne: NonEmpty<T>) => List<T>} */
177
- const dropStep = n => ne => 0 < n ? drop(n - 1)(ne.tail) : ne
178
-
179
- /** @type {(n: number) => <T>(input: List<T>) => Thunk<T>} */
180
- export const drop = n => apply(dropStep(n))
181
-
182
- /** @type {<D>(def: D) => <T>(input: List<T>) => D|T} */
183
- export const first = def => input => {
184
- const ne = next(input)
185
- return ne === null ? def : ne.first
186
- }
187
-
188
- /** @type {<D>(first: D) => <T>(tail: List<T>) => D|T} */
189
- export const last = first => tail => {
190
- /** @typedef {typeof tail extends List<infer T> ? T : never} T */
191
- /** @type {NonEmpty<typeof first|T>} */
192
- let i = { first, tail }
193
- while (true) {
194
- const result = next(i.tail)
195
- if (result === null) {
196
- return i.first
197
- }
198
- i = result
199
- }
200
- }
201
-
202
- /** @type {<D>(def: D) => <T>(f: (value: T) => boolean) => (input: List<T>) => D|T} */
203
- export const find = def => f => compose(filter(f))(first(def))
204
-
205
- /** @type {(input: List<boolean>) => boolean} */
206
- export const some = find(false)(identity)
207
-
208
- /** @type {<T>(input: List<T>) => boolean} */
209
- export const isEmpty = fn(map(() => true))
210
- .then(some)
211
- .then(logicalNot)
212
- .result
213
-
214
- export const every = fn(map(logicalNot))
215
- .then(some)
216
- .then(logicalNot)
217
- .result
218
-
219
- /** @type {<T>(value: T) => (sequence: List<T>) => boolean} */
220
- export const includes = value => compose(map(strictEqual(value)))(some)
221
-
222
- /** @type {(count: number) => Thunk<number>} */
223
- export const countdown = count => () => {
224
- if (count <= 0) { return null }
225
- const first = count - 1
226
- return { first, tail: countdown(first) }
227
- }
228
-
229
- /** @type {<T>(v: T) => (c: number) => Thunk<T>} */
230
- export const repeat = v => compose(countdown)(map(() => v))
231
-
232
- /** @type {<T>(list: List<T>) => List<T>} */
233
- export const cycle = list => () => {
234
- const i = next(list)
235
- return i === null ? null : { first: i.first, tail: concat(i.tail)(cycle(list)) }
236
- }
237
-
238
- /** @type {<I, O>(op: operator.Scan<I, O>) => (ne: NonEmpty<I>) => List<O>} */
239
- const scanStep = op => ne => {
240
- const [first, newOp] = op(ne.first)
241
- return { first, tail: scan(newOp)(ne.tail) }
242
- }
243
-
244
- /** @type {<I, O>(op: operator.Scan<I, O>) => (input: List<I>) => Thunk<O>} */
245
- export const scan = op => apply(scanStep(op))
246
-
247
- /** @type {<I, S, O>(op: operator.StateScan<I, S, O>) => (init: S) => (input: List<I>) => Thunk<O>} */
248
- export const stateScan = op => compose(stateScanToScan(op))(scan)
249
-
250
- /** @type {<I,O>(op: operator.Fold<I, O>) => (init: O) => (input: List<I>) => Thunk<O>} */
251
- export const foldScan = op => compose(foldToScan(op))(scan)
252
-
253
- /** @type {<I,O>(op: operator.Fold<I, O>) => (init: O) => (input: List<I>) => O} */
254
- export const fold = op => init => compose(foldScan(op)(init))(last(init))
255
-
256
- /** @type {<T>(op: operator.Reduce<T>) => <D>(def: D) => (input: List<T>) => D|T} */
257
- export const reduce = op => def => compose(scan(reduceToScan(op)))(last(def))
258
-
259
- /** @type {<T>(list: List<T>) => Thunk<number>} */
260
- const lengthList = list => () => {
261
- const notLazy = trampoline(list)
262
- if (notLazy === null) { return null }
263
- if (notLazy instanceof Array) { return [notLazy.length] }
264
- const tail = lengthList(notLazy.tail)
265
- if ("first" in notLazy) {
266
- return { first: 1, tail }
267
- }
268
- return { head: lengthList(notLazy.head), tail }
269
- }
270
-
271
- const sum = reduce(addition)(0)
272
-
273
- /** @type {<T>(input: List<T>) => number} */
274
- export const length = compose(lengthList)(sum)
275
-
276
- /**
277
- * @template T
278
- * @typedef {readonly[number, T]} Entry
279
- */
280
-
281
- /** @type {(index: number) => <T>(value: T) => readonly[Entry<T>, number]} */
282
- const entryOperator = index => value => [[index, value], index + 1]
283
-
284
- /** @type {<T>(input: List<T>) => Thunk<Entry<T>>} */
285
- export const entries = input => {
286
- /** @typedef {typeof input extends List<infer T> ? T : never} T */
287
- /** @type {operator.StateScan<T, Number, Entry<T>>} */
288
- const o = entryOperator
289
- return stateScan(o)(0)(input)
290
- }
291
-
292
- /** @type {<T>(value: T) => (prior: List<T>) => List<T>} */
293
- const reverseOperator = first => tail => ({ first, tail })
294
-
295
- /** @type {<T>(input: List<T>) => List<T>} */
296
- export const reverse = fold(reverseOperator)(null)
297
-
298
- /** @type {<A>(a: List<A>) => <B>(b: List<B>) => Thunk<readonly[A, B]>} */
299
- export const zip = a => b => () => {
300
- const aResult = next(a)
301
- if (aResult === null) { return null }
302
- const bResult = next(b)
303
- if (bResult === null) { return null }
304
- return { first: [aResult.first, bResult.first], tail: zip(aResult.tail)(bResult.tail) }
305
- }
306
-
307
- /** @type {<T>(e: operator.Equal<T>) => (a: List<T>) => (b: List<T>) => boolean} */
308
- export const equal = e => {
309
- /** @typedef {typeof e extends operator.Equal<infer T> ? T : never} T */
310
- /** @type {(a: List<T>) => (b: List<T>) => List<boolean>} */
311
- const f = a => b => () => {
312
- const [aResult, bResult] = [next(a), next(b)]
313
- return aResult === null || bResult === null
314
- ? { first: aResult === bResult, tail: null }
315
- : { first: e(aResult.first)(bResult.first), tail: f(aResult.tail)(bResult.tail) }
316
- }
317
- return a => b => every(f(a)(b))
318
- }
319
-
320
- export const empty = null
@@ -1,67 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as BtreeTypes from '../btree/types/module.f.mjs'
3
- import * as btf from '../btree/find/module.f.mjs'
4
- const { value, find } = btf
5
- import * as bts from '../btree/set/module.f.mjs'
6
- const { set } = bts
7
- import * as btr from '../btree/remove/module.f.mjs'
8
- const { remove: btreeRemove } = btr
9
- import * as bt from '../btree/module.f.mjs'
10
- const { values } = bt
11
- import * as Compare from '../function/compare/module.f.mjs'
12
- import * as s from '../string/module.f.mjs'
13
- const { cmp } = s
14
- import * as list from '../list/module.f.mjs'
15
- const { fold } = list
16
- import * as Operator from '../function/operator/module.f.mjs'
17
-
18
- /** @typedef {Compare.Sign} Sign */
19
-
20
- /**
21
- * @template T
22
- * @typedef {Compare.Compare<T>} Cmp
23
- */
24
-
25
- /**
26
- * @template T
27
- * @typedef {readonly[string, T]} Entry
28
- */
29
-
30
- /**
31
- * @template T
32
- * @typedef {BtreeTypes.Tree<Entry<T>>} Map
33
- */
34
-
35
- /** @type {(a: string) => <T>(b: Entry<T>) => Sign} */
36
- const keyCmp = a => ([b]) => cmp(a)(b)
37
-
38
- /** @type {(name: string) => <T>(map: Map<T>) => T|null} */
39
- export const at = name => map => {
40
- if (map === null) { return null }
41
- const result = value(find(keyCmp(name))(map).first)
42
- return result === null ? null : result[1]
43
- }
44
-
45
- /** @type {<T>(reduce: Operator.Reduce<T>) => (entry: Entry<T>) => (map: Map<T>) => Map<T>} */
46
- const setReduceEntry = reduce => entry =>
47
- set(keyCmp(entry[0]))(old => old === null ? entry : [old[0], reduce(old[1])(entry[1])])
48
-
49
- /** @type {<T>(reduce: Operator.Reduce<T>) => (name: string) => (value: T) => (map: Map<T>) => Map<T>} */
50
- export const setReduce = reduce => name => value => setReduceEntry(reduce)([name, value])
51
-
52
- /** @type {<T>(a: T) => (b: T) => T} */
53
- const replace = () => b => b
54
-
55
- /** @type {(name: string) => <T>(value: T) => (map: Map<T>) => Map<T>} */
56
- export const setReplace = name => value => setReduceEntry(replace)([name, value])
57
-
58
- /** @type {<T>(map: Map<T>) => list.List<Entry<T>>} */
59
- export const entries = values
60
-
61
- /** @type {<T>(entries: list.List<Entry<T>>) => Map<T>} */
62
- export const fromEntries = fold(setReduceEntry(replace))(null)
63
-
64
- /** @type {(name: string) => <T>(map: Map<T>) => Map<T>} */
65
- export const remove = name => btreeRemove(keyCmp(name))
66
-
67
- export const empty = null