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
@@ -1,6 +1,6 @@
1
- import * as list from '../list/module.f.mjs'
1
+ import * as list from '../list/module.f.ts'
2
2
  const { every, map, countdown } = list
3
- import * as _ from './module.f.mjs'
3
+ import * as _ from './module.f.ts'
4
4
 
5
5
  export default {
6
6
  has: () => {
@@ -41,7 +41,7 @@ export default {
41
41
  if (result !== 60) { throw result }
42
42
  },
43
43
  universe: () => {
44
- const x = every(map(v => _.has(v)(_.universe))(countdown(16)))
44
+ const x = every(map((v: number) => _.has(v)(_.universe))(countdown(16)))
45
45
  if (!x) { throw x }
46
46
  },
47
47
  compliment: {
@@ -0,0 +1,9 @@
1
+ export type Nullable<T> = T|null
2
+
3
+ export const map
4
+ : <T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>
5
+ = f => value => value === null ? null : f(value)
6
+
7
+ export const match
8
+ : <T, R>(f: (_: T) => R) => (none: () => R) => (_: Nullable<T>) => Nullable<R>
9
+ = f => none => value => value === null ? none() : f(value)
@@ -1,7 +1,7 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
 
3
3
  export default () => {
4
- const optionSq = _.map(v => v * v)
4
+ const optionSq = _.map((v: number) => v * v)
5
5
  const sq3 = optionSq(3)
6
6
  if (sq3 !== 9) { throw sq3 }
7
7
  const sqNull = optionSq(null)
@@ -0,0 +1,16 @@
1
+ import * as list from '../list/module.f.ts'
2
+ const { reduce } = list
3
+ import * as operator from '../function/operator/module.f.ts'
4
+ const { addition, min: minOp, max: maxOp } = operator
5
+ import * as compare from '../function/compare/module.f.ts'
6
+ const { unsafeCmp } = compare
7
+
8
+ export const sum = reduce(addition)(0)
9
+
10
+ export const min = reduce(minOp)(null)
11
+
12
+ export const max = reduce(maxOp)(null)
13
+
14
+ export const cmp
15
+ : (a: number) => (b: number) => compare.Sign
16
+ = unsafeCmp
@@ -1,4 +1,4 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
  const { sum, min, max, cmp } = _
3
3
 
4
4
  export default {
@@ -25,13 +25,15 @@ export default {
25
25
  if (result !== -1) { throw result }
26
26
  },
27
27
  standard: () => {
28
- /** @type {(a: bigint) => (a: bigint) => void} */
29
- const check = a => b => {
28
+ const check
29
+ : (a: bigint) => (a: bigint) => void
30
+ = a => b => {
30
31
  if (BigInt(Number(a)) != b) { throw [a, b] }
31
32
  }
32
33
 
33
- /** @type {(v: bigint) => void} */
34
- const eq = v => check(v)(v)
34
+ const eq
35
+ : (v: bigint) => void
36
+ = v => check(v)(v)
35
37
 
36
38
  // 53, 0x35 bits.
37
39
  // 3 2 1 0
@@ -0,0 +1,30 @@
1
+ import * as list from '../list/module.f.ts'
2
+ const { iterable } = list
3
+ import * as btMap from '../map/module.f.ts'
4
+ const { entries: mapEntries, fromEntries: mapFromEntries } = btMap
5
+ const { getOwnPropertyDescriptor, fromEntries: objectFromEntries } = Object
6
+
7
+ export type Map<T> = {
8
+ readonly [k in string]: T
9
+ }
10
+
11
+ export type Entry<T> = readonly[string, T]
12
+
13
+ export const at
14
+ : (name: string) => <T>(object: Map<T>) => T|null
15
+ = name => object => {
16
+ const r = getOwnPropertyDescriptor(object, name)
17
+ return r === void 0 ? null : r.value
18
+ }
19
+
20
+ export const sort
21
+ : <T>(e: list.List<Entry<T>>) => list.List<Entry<T>>
22
+ = e => mapEntries(mapFromEntries(e))
23
+
24
+ export const fromEntries
25
+ : <T>(e: list.List<Entry<T>>) => Map<T>
26
+ = e => objectFromEntries(iterable(e))
27
+
28
+ export const fromMap
29
+ : <T>(m: btMap.Map<T>) => Map<T>
30
+ = m => fromEntries(mapEntries(m))
@@ -1,4 +1,4 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
 
3
3
  export default {
4
4
  ctor: () => {
@@ -11,4 +11,4 @@ export default {
11
11
  const value = _.at('constructor')(a)
12
12
  if (value !== 42) { throw value }
13
13
  }
14
- }
14
+ }
@@ -0,0 +1,10 @@
1
+
2
+ export type Range = readonly[number,number]
3
+
4
+ export const contains
5
+ : (range: Range) => (i: number) => boolean
6
+ = ([b, e]) => i => b <= i && i <= e
7
+
8
+ export const one
9
+ : (i: number) => Range
10
+ = a => [a, a]
@@ -1,4 +1,4 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
 
3
3
  export default () => {
4
4
  if (!_.contains([0, 5])(1)) { throw 1 }
@@ -0,0 +1,70 @@
1
+ import * as sortedList from '../sorted_list/module.f.ts'
2
+ const { genericMerge } = sortedList
3
+ import * as list from '../list/module.f.ts'
4
+ const { next } = list
5
+ import * as Option from '../nullable/module.f.ts'
6
+ import * as number from '../number/module.f.ts'
7
+ const { cmp } = number
8
+ import * as O from '../function/operator/module.f.ts'
9
+ import * as Range from '../range/module.f.ts'
10
+
11
+ export type Entry<T> =[T, number]
12
+
13
+ export type RangeMap<T> = sortedList.SortedList<Entry<T>>
14
+
15
+ export type RangeMapArray<T> = readonly Entry<T>[]
16
+
17
+ export type Operators<T> = {
18
+ readonly union: O.Reduce<T>
19
+ readonly equal: O.Equal<T>
20
+ }
21
+
22
+ type RangeState<T> = Option.Nullable<Entry<T>>
23
+
24
+ export type RangeMerge<T> = O.Reduce<RangeMap<T>>
25
+
26
+ const reduceOp
27
+ : <T>(union: O.Reduce<T>) => (equal: O.Equal<T>) => sortedList.ReduceOp<Entry<T>, RangeState<T>>
28
+ = union => equal => state => ([aItem, aMax]) => ([bItem, bMax]) => {
29
+ const sign = cmp(aMax)(bMax)
30
+ const min = sign === 1 ? bMax : aMax
31
+ const u = union(aItem)(bItem)
32
+ const newState = state !== null && equal(state[0])(u) ? null : state
33
+ return [newState, sign, [u, min]]
34
+ }
35
+
36
+ const tailReduce
37
+ : <T>(equal: O.Equal<T>) => sortedList.TailReduce<Entry<T>, RangeState<T>>
38
+ = equal => state => tail => {
39
+ if (state === null) { return tail }
40
+ const tailResult = next(tail)
41
+ if (tailResult === null) { return [state] }
42
+ if (equal(state[0])(tailResult.first[0])) { return tailResult }
43
+ return { first: state, tail: tailResult }
44
+ }
45
+
46
+ export const merge
47
+ : <T>(op: Operators<T>) => RangeMerge<T>
48
+ = ({ union, equal }) => genericMerge({ reduceOp: reduceOp(union)(equal), tailReduce: tailReduce(equal) })(null)
49
+
50
+ export const get
51
+ : <T>(def: T) => (value: number) => (rm: RangeMapArray<T>) => T
52
+ = def => value => rm => {
53
+ const len = rm.length
54
+ let b = 0
55
+ let e = len - 1
56
+ while (true) {
57
+ if (b >= len) { return def }
58
+ if (e - b < 0) { return rm[b][0] }
59
+ const mid = b + (e - b >> 1)
60
+ if (value <= rm[mid][1]) {
61
+ e = mid - 1
62
+ } else {
63
+ b = mid + 1
64
+ }
65
+ }
66
+ }
67
+
68
+ export const fromRange
69
+ : <T>(def: T) => (r: Range.Range) => (value: T) => RangeMapArray<T>
70
+ = def => ([a, b]) => v => [[def, a - 1], [v, b]]
@@ -1,135 +1,160 @@
1
- import * as _ from './module.f.mjs'
2
- import * as compare from '../function/compare/module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
+ import * as compare from '../function/compare/module.f.ts'
3
3
  const { unsafeCmp } = compare
4
- import * as json from '../../json/module.f.mjs'
5
- import * as object from '../object/module.f.mjs'
4
+ import * as json from '../../json/module.f.ts'
5
+ import * as object from '../object/module.f.ts'
6
6
  const { sort } = object
7
- import * as sortedSet from '../sorted_set/module.f.mjs'
8
- import * as list from '../list/module.f.mjs'
9
- import * as operator from '../function/operator/module.f.mjs'
7
+ import * as sortedSet from '../sorted_set/module.f.ts'
8
+ import * as list from '../list/module.f.ts'
9
+ import * as operator from '../function/operator/module.f.ts'
10
10
 
11
- /** @type {(a: readonly json.Unknown[]) => string} */
12
- const stringify = json.stringify(sort)
11
+ const stringify
12
+ : (a: readonly json.Unknown[]) => string
13
+ = json.stringify(sort)
13
14
 
14
- /** @type {_.Operators<sortedSet.SortedSet<string>>} */
15
- const op = { union: sortedSet.union(unsafeCmp), equal: list.equal(operator.strictEqual) }
15
+ const op
16
+ : _.Operators<sortedSet.SortedSet<string>>
17
+ = { union: sortedSet.union(unsafeCmp), equal: list.equal(operator.strictEqual) }
16
18
 
17
19
  export default {
18
20
  merge: [
19
21
  () => {
20
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
21
- const a = [[['a'], 1], [['b'], 2]]
22
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
23
- const b = null
22
+ const a
23
+ : _.RangeMap<sortedSet.SortedSet<string>>
24
+ = [[['a'], 1], [['b'], 2]]
25
+ const b
26
+ : _.RangeMap<sortedSet.SortedSet<string>>
27
+ = null
24
28
  const merged = _.merge(op)(a)(b)
25
29
  const result = stringify(list.toArray(merged))
26
30
  if (result !== '[[["a"],1],[["b"],2]]') { throw result }
27
31
  },
28
32
  () => {
29
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
30
- const a = null
31
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
32
- const b = [[['a'], 1], [['b'], 2]]
33
+ const a
34
+ : _.RangeMap<sortedSet.SortedSet<string>>
35
+ = null
36
+ const b
37
+ : _.RangeMap<sortedSet.SortedSet<string>>
38
+ = [[['a'], 1], [['b'], 2]]
33
39
  const merged = _.merge(op)(a)(b)
34
40
  const result = stringify(list.toArray(merged))
35
41
  if (result !== '[[["a"],1],[["b"],2]]') { throw result }
36
42
  },
37
43
  () => {
38
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
39
- const a = [[['a'], 1], [['b'], 2]]
40
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
41
- const b = [[['a'], 1], [['b'], 2]]
44
+ const a
45
+ : _.RangeMap<sortedSet.SortedSet<string>>
46
+ = [[['a'], 1], [['b'], 2]]
47
+ const b
48
+ : _.RangeMap<sortedSet.SortedSet<string>>
49
+ = [[['a'], 1], [['b'], 2]]
42
50
  const merged = _.merge(op)(a)(b)
43
51
  const result = stringify(list.toArray(merged))
44
52
  if (result !== '[[["a"],1],[["b"],2]]') { throw result }
45
53
  },
46
54
  () => {
47
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
48
- const a = [[['a'], 1], [['c'], 3]]
49
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
50
- const b = [[['b'], 2], [['d'], 4]]
55
+ const a
56
+ : _.RangeMap<sortedSet.SortedSet<string>>
57
+ = [[['a'], 1], [['c'], 3]]
58
+ const b
59
+ : _.RangeMap<sortedSet.SortedSet<string>>
60
+ = [[['b'], 2], [['d'], 4]]
51
61
  const merged = _.merge(op)(a)(b)
52
62
  const result = stringify(list.toArray(merged))
53
63
  if (result !== '[[["a","b"],1],[["b","c"],2],[["c","d"],3],[["d"],4]]') { throw result }
54
64
  },
55
65
  () => {
56
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
57
- const a = [[['a'], 1], [['d'], 4]]
58
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
59
- const b = [[['b'], 2], [['c'], 3]]
66
+ const a
67
+ : _.RangeMap<sortedSet.SortedSet<string>>
68
+ = [[['a'], 1], [['d'], 4]]
69
+ const b
70
+ : _.RangeMap<sortedSet.SortedSet<string>>
71
+ = [[['b'], 2], [['c'], 3]]
60
72
  const merged = _.merge(op)(a)(b)
61
73
  const result = stringify(list.toArray(merged))
62
74
  if (result !== '[[["a","b"],1],[["b","d"],2],[["c","d"],3],[["d"],4]]') { throw result }
63
75
  },
64
76
  () => {
65
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
66
- const a = [[['a'], 1], [['b'], 2]]
67
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
68
- const b = [[['b'], 1], [['a'], 2]]
77
+ const a
78
+ : _.RangeMap<sortedSet.SortedSet<string>>
79
+ = [[['a'], 1], [['b'], 2]]
80
+ const b
81
+ : _.RangeMap<sortedSet.SortedSet<string>>
82
+ = [[['b'], 1], [['a'], 2]]
69
83
  const merged = _.merge(op)(a)(b)
70
84
  const result = stringify(list.toArray(merged))
71
85
  if (result !== '[[["a","b"],2]]') { throw result }
72
86
  },
73
87
  () => {
74
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
75
- const a = [[['a'], 1], [['b'], 2], [['a'], 3]]
76
- /** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
77
- const b = [[['a'], 5]]
88
+ const a
89
+ : _.RangeMap<sortedSet.SortedSet<string>>
90
+ = [[['a'], 1], [['b'], 2], [['a'], 3]]
91
+ const b
92
+ : _.RangeMap<sortedSet.SortedSet<string>>
93
+ = [[['a'], 5]]
78
94
  const merged = _.merge(op)(a)(b)
79
95
  const result = stringify(list.toArray(merged))
80
96
  if (result !== '[[["a"],1],[["a","b"],2],[["a"],5]]') { throw result }
81
97
  }
82
98
  ],
83
99
  get: () => {
84
- /** @type {sortedSet.SortedSet<string>} */
85
- const sortedSetEmpty = []
100
+ const sortedSetEmpty
101
+ : sortedSet.SortedSet<string>
102
+ = []
86
103
  const get = _.get(sortedSetEmpty)
87
104
  return [
88
105
  () => {
89
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
90
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
106
+ const rm
107
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
108
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
91
109
  const result = stringify(get(5)(rm))
92
110
  if (result !== '["a"]') { throw result }
93
111
  },
94
112
  () => {
95
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
96
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
113
+ const rm
114
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
115
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
97
116
  const result = stringify(get(10)(rm))
98
117
  if (result !== '["a"]') { throw result }
99
118
  },
100
119
  () => {
101
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
102
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
120
+ const rm
121
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
122
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
103
123
  const result = stringify(get(15)(rm))
104
124
  if (result !== '["b"]') { throw result }
105
125
  },
106
126
  () => {
107
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
108
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
127
+ const rm
128
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
129
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
109
130
  const result = stringify(get(20)(rm))
110
131
  if (result !== '["b"]') { throw result }
111
132
  },
112
133
  () => {
113
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
114
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
134
+ const rm
135
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
136
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
115
137
  const result = stringify(get(25)(rm))
116
138
  if (result !== '["c"]') { throw result }
117
139
  },
118
140
  () => {
119
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
120
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
141
+ const rm
142
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
143
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
121
144
  const result = stringify(get(30)(rm))
122
145
  if (result !== '["c"]') { throw result }
123
146
  },
124
147
  () => {
125
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
126
- const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
148
+ const rm
149
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
150
+ = [[['a'], 10], [['b'], 20], [['c'], 30]]
127
151
  const result = stringify(get(35)(rm))
128
152
  if (result !== '[]') { throw result }
129
153
  },
130
154
  () => {
131
- /** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
132
- const rm = []
155
+ const rm
156
+ : _.RangeMapArray<sortedSet.SortedSet<string>>
157
+ = []
133
158
  const result = stringify(get(10)(rm))
134
159
  if (result !== '[]') { throw result }
135
160
  }
@@ -0,0 +1,20 @@
1
+ type Ok<T> = readonly['ok', T]
2
+
3
+ type Error<E> = readonly['error', E]
4
+
5
+ export type Result<T, E> = Ok<T>|Error<E>
6
+
7
+ export const ok
8
+ : <T>(value: T) => Ok<T>
9
+ = value => ['ok', value]
10
+
11
+ export const error
12
+ : <E>(e: E) => Error<E>
13
+ = e => ['error', e]
14
+
15
+ export const unwrap
16
+ : <T, E>(r: Result<T, E>) => T
17
+ = ([kind, v]) => {
18
+ if (kind === 'error') { throw v }
19
+ return v
20
+ }
@@ -1,8 +1,9 @@
1
- import * as result from './module.f.mjs'
1
+ import * as result from './module.f.ts'
2
2
  const { ok, error } = result
3
3
 
4
- /** @type {<T>(f: () => T) => result.Result<T, unknown>} */
5
- const tryCatch = f => {
4
+ const tryCatch
5
+ : <T>(f: () => T) => result.Result<T, unknown>
6
+ = f => {
6
7
  // Side effect: `try catch` is not allowed in FunctionalScript.
7
8
  try {
8
9
  return ok(f())
@@ -0,0 +1,83 @@
1
+ import * as compare from '../function/compare/module.f.ts'
2
+ import * as list from '../list/module.f.ts'
3
+ import * as option from '../nullable/module.f.ts'
4
+ const { next } = list
5
+ import * as f from '../function/module.f.ts'
6
+ const { identity } = f
7
+
8
+ export type SortedList<T> = list.List<T>
9
+
10
+ type SortedArray<T> = readonly T[]
11
+
12
+ type Cmp<T> =(a: T) => (b: T) => compare.Sign
13
+
14
+ export type ReduceOp<T, S> = (state: S) => (a: T) => (b: T) => readonly[option.Nullable<T>, compare.Sign, S]
15
+
16
+ export type TailReduce<T, S> = (state: S) => (tail: list.List<T>) => list.List<T>
17
+
18
+ type MergeReduce<T, S> = {
19
+ readonly reduceOp: ReduceOp<T,S>
20
+ readonly tailReduce: TailReduce<T,S>
21
+ }
22
+
23
+ export const genericMerge
24
+ = <T,S>({ reduceOp, tailReduce }: MergeReduce<T,S>)
25
+ : (state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T> => {
26
+ const f
27
+ : (state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T>
28
+ = state => a => b => () => {
29
+ const aResult = next(a)
30
+ if (aResult === null) { return tailReduce(state)(b) }
31
+ const bResult = next(b)
32
+ if (bResult === null) { return tailReduce(state)(aResult) }
33
+ const [first, sign, stateNext] = reduceOp(state)(aResult.first)(bResult.first)
34
+ const aNext = sign === 1 ? a : aResult.tail
35
+ const bNext = sign === -1 ? b : bResult.tail
36
+ const tail = f(stateNext)(aNext)(bNext)
37
+ return first === null ? tail : { first, tail }
38
+ }
39
+ return f
40
+ }
41
+
42
+ type CmpReduceOp<T> = ReduceOp<T, null>
43
+
44
+ export const merge
45
+ = <T>(cmp: Cmp<T>)
46
+ : (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T> => {
47
+ const tailReduce: TailReduce<T, null> = mergeTail
48
+ return genericMerge({ reduceOp: cmpReduce(cmp), tailReduce })(null)
49
+ }
50
+
51
+ const cmpReduce
52
+ : <T>(cmp: Cmp<T>) => CmpReduceOp<T>
53
+ = cmp => () => a => b => {
54
+ const sign = cmp(a)(b)
55
+ return [sign === 1 ? b : a, sign, null]
56
+ }
57
+
58
+ const mergeTail
59
+ : () => <T>(tail: list.List<T>) => list.List<T>
60
+ = () => identity
61
+
62
+ export const find
63
+ : <T>(cmp: Cmp<T>) => (value: T) => (array: SortedArray<T>) => T|null
64
+ = cmp => value => array => {
65
+ let b = 0
66
+ let e = array.length - 1
67
+ while (true) {
68
+ if (e - b < 0) return null
69
+ const mid = b + (e - b >> 1)
70
+ const sign = cmp(value)(array[mid])
71
+ switch(sign) {
72
+ case -1: {
73
+ e = mid - 1
74
+ break
75
+ }
76
+ case 0: { return value }
77
+ case 1: {
78
+ b = mid + 1
79
+ break
80
+ }
81
+ }
82
+ }
83
+ }
@@ -1,20 +1,22 @@
1
- import * as _ from './module.f.mjs'
2
- import * as compare from '../function/compare/module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
+ import * as compare from '../function/compare/module.f.ts'
3
3
  const { unsafeCmp } = compare
4
- import * as json from '../../json/module.f.mjs'
5
- import * as object from '../object/module.f.mjs'
4
+ import * as json from '../../json/module.f.ts'
5
+ import * as object from '../object/module.f.ts'
6
6
  const { sort } = object
7
- import * as list from '../list/module.f.mjs'
7
+ import * as list from '../list/module.f.ts'
8
8
  const { toArray, countdown, length } = list
9
- import * as Map from '../map/module.f.mjs'
10
- import * as f from '../function/module.f.mjs'
9
+ import * as Map from '../map/module.f.ts'
10
+ import * as f from '../function/module.f.ts'
11
11
  const { flip } = f
12
12
 
13
- /** @type {(a: readonly json.Unknown[]) => string} */
14
- const stringify = json.stringify(sort)
13
+ const stringify
14
+ : (a: readonly json.Unknown[]) => string
15
+ = json.stringify(sort)
15
16
 
16
- /** @type {<T>(a: T) => (b: T) => Map.Sign} */
17
- const reverseCmp = flip(unsafeCmp)
17
+ const reverseCmp
18
+ : <T>(a: T) => (b: T) => Map.Sign
19
+ = flip(unsafeCmp)
18
20
 
19
21
  export default {
20
22
  sortedMergre: [
@@ -52,4 +54,4 @@ export default {
52
54
  if (result !== 80) { throw result }
53
55
  }
54
56
  ]
55
- }
57
+ }
@@ -0,0 +1,36 @@
1
+ import * as Compare from '../function/compare/module.f.ts'
2
+ import * as list from "../list/module.f.ts"
3
+ const { toArray } = list
4
+ import * as sortedList from '../sorted_list/module.f.ts'
5
+ const { merge, genericMerge, find } = sortedList
6
+
7
+ export type SortedSet<T> = readonly T[]
8
+
9
+ type Cmp<T> = (a: T) => (b: T) => Compare.Sign
10
+
11
+ type Byte = number
12
+
13
+ export const union
14
+ : <T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>
15
+ = cmp => a => b => toArray(merge(cmp)(a)(b))
16
+
17
+ export const intersect
18
+ : <T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>
19
+ = cmp => a => b => toArray(intersectMerge(cmp)(a)(b))
20
+
21
+ const tailReduce = () => () => null
22
+
23
+ const intersectMerge
24
+ : <T>(cmp: Cmp<T>) => (a: sortedList.SortedList<T>) => (b: sortedList.SortedList<T>) => sortedList.SortedList<T>
25
+ = cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null)
26
+
27
+ const intersectReduce
28
+ : <T,S>(cmp: Cmp<T>) => sortedList.ReduceOp<T,S>
29
+ = cmp => state => a => b => {
30
+ const sign = cmp(a)(b)
31
+ return [sign === 0 ? a : null, sign, state]
32
+ }
33
+
34
+ export const has
35
+ : <T>(cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean
36
+ = cmp => value => set => find(cmp)(value)(set) === value