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