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
@@ -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)