functionalscript 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +5 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/module.f.ts +108 -0
  55. package/html/{test.f.mjs → test.f.ts} +10 -7
  56. package/issues/lang/3110-function.md +25 -1
  57. package/issues/{test.f.mjs → test.f.ts} +3 -2
  58. package/js/tokenizer/module.f.ts +882 -0
  59. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  60. package/json/module.f.ts +94 -0
  61. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  62. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  63. package/json/serializer/module.f.ts +70 -0
  64. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  65. package/json/{test.f.mjs → test.f.ts} +3 -3
  66. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  67. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  68. package/nanvm-lib/src/extension.rs +15 -4
  69. package/nanvm-lib/src/interface.rs +7 -10
  70. package/nanvm-lib/src/lib.rs +3 -3
  71. package/nanvm-lib/src/naive.rs +10 -3
  72. package/nanvm-lib/src/nanenum.rs +5 -1
  73. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  74. package/nodejs/version/{main.mjs → main.ts} +1 -1
  75. package/nodejs/version/module.f.ts +42 -0
  76. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  77. package/package.json +9 -9
  78. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  79. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  80. package/text/module.f.ts +30 -0
  81. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  82. package/text/{test.f.mjs → test.f.ts} +5 -4
  83. package/text/utf16/module.f.ts +108 -0
  84. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  85. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  86. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  87. package/tsconfig.json +4 -1
  88. package/types/array/module.f.ts +89 -0
  89. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  90. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  91. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  92. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  93. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  94. package/types/bit_vec/{module.f.mjs → module.f.ts} +16 -37
  95. package/types/bit_vec/{test.f.mjs → test.f.ts} +1 -1
  96. package/types/btree/find/module.f.ts +92 -0
  97. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  98. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  99. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  100. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  101. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  102. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  103. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  104. package/types/btree/types/module.f.ts +27 -0
  105. package/types/byte_set/module.f.ts +70 -0
  106. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  107. package/types/function/compare/module.f.ts +26 -0
  108. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  109. package/types/function/module.f.ts +43 -0
  110. package/types/function/operator/module.f.ts +63 -0
  111. package/types/function/test.f.ts +20 -0
  112. package/types/list/module.f.ts +345 -0
  113. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  114. package/types/map/module.f.ts +65 -0
  115. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  116. package/types/nibble_set/module.f.ts +34 -0
  117. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  118. package/types/nullable/module.f.ts +9 -0
  119. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  120. package/types/number/module.f.ts +16 -0
  121. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  122. package/types/object/module.f.ts +30 -0
  123. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  124. package/types/range/module.f.ts +10 -0
  125. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  126. package/types/range_map/module.f.ts +70 -0
  127. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  128. package/types/result/module.f.ts +20 -0
  129. package/types/result/{module.mjs → module.ts} +4 -3
  130. package/types/sorted_list/module.f.ts +83 -0
  131. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  132. package/types/sorted_set/module.f.ts +36 -0
  133. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  134. package/types/string/module.f.ts +24 -0
  135. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  136. package/types/string_set/module.f.ts +37 -0
  137. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  138. package/com/cpp/testlib.f.mjs +0 -8
  139. package/com/cs/testlib.f.mjs +0 -8
  140. package/com/rust/module.f.mjs +0 -272
  141. package/com/rust/testlib.f.mjs +0 -8
  142. package/com/types/module.f.mjs +0 -67
  143. package/commonjs/build/module.f.mjs +0 -100
  144. package/commonjs/module/function/module.f.mjs +0 -21
  145. package/commonjs/module/module.f.mjs +0 -53
  146. package/commonjs/module.f.mjs +0 -11
  147. package/commonjs/package/dependencies/module.f.mjs +0 -22
  148. package/commonjs/package/module.f.mjs +0 -36
  149. package/dev/index.mjs +0 -3
  150. package/dev/test.mjs +0 -60
  151. package/fsm/module.f.mjs +0 -99
  152. package/html/module.f.mjs +0 -102
  153. package/js/tokenizer/module.f.mjs +0 -872
  154. package/json/module.f.mjs +0 -89
  155. package/json/serializer/module.f.mjs +0 -87
  156. package/jsr.json +0 -66
  157. package/nodejs/version/module.f.mjs +0 -47
  158. package/out/com/cpp/module.f.d.mts +0 -7
  159. package/out/com/cpp/module.f.mjs +0 -130
  160. package/out/com/cpp/test.f.d.mts +0 -2
  161. package/out/com/cpp/test.f.mjs +0 -40
  162. package/out/com/cpp/testlib.f.d.mts +0 -2
  163. package/out/com/cpp/testlib.f.mjs +0 -7
  164. package/out/com/cs/module.f.d.mts +0 -7
  165. package/out/com/cs/module.f.mjs +0 -104
  166. package/out/com/cs/test.f.d.mts +0 -2
  167. package/out/com/cs/test.f.mjs +0 -43
  168. package/out/com/cs/testlib.f.d.mts +0 -2
  169. package/out/com/cs/testlib.f.mjs +0 -7
  170. package/out/com/rust/module.f.d.mts +0 -23
  171. package/out/com/rust/module.f.mjs +0 -224
  172. package/out/com/rust/test.f.d.mts +0 -2
  173. package/out/com/rust/test.f.mjs +0 -123
  174. package/out/com/rust/testlib.f.d.mts +0 -2
  175. package/out/com/rust/testlib.f.mjs +0 -7
  176. package/out/com/test/build.d.mts +0 -1
  177. package/out/com/test/build.f.d.mts +0 -26
  178. package/out/com/test/build.f.mjs +0 -98
  179. package/out/com/test/build.mjs +0 -40
  180. package/out/com/types/module.f.d.mts +0 -23
  181. package/out/com/types/module.f.mjs +0 -51
  182. package/out/com/types/testlib.f.d.mts +0 -44
  183. package/out/com/types/testlib.f.mjs +0 -30
  184. package/out/commonjs/build/module.f.d.mts +0 -20
  185. package/out/commonjs/build/module.f.mjs +0 -107
  186. package/out/commonjs/build/test.f.d.mts +0 -3
  187. package/out/commonjs/build/test.f.mjs +0 -102
  188. package/out/commonjs/module/function/module.f.d.mts +0 -5
  189. package/out/commonjs/module/function/module.f.mjs +0 -15
  190. package/out/commonjs/module/module.f.d.mts +0 -52
  191. package/out/commonjs/module/module.f.mjs +0 -48
  192. package/out/commonjs/module.d.mts +0 -3
  193. package/out/commonjs/module.f.d.mts +0 -2
  194. package/out/commonjs/module.f.mjs +0 -10
  195. package/out/commonjs/module.mjs +0 -26
  196. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  197. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  198. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  199. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  200. package/out/commonjs/package/module.f.d.mts +0 -21
  201. package/out/commonjs/package/module.f.mjs +0 -40
  202. package/out/commonjs/package/test.f.d.mts +0 -2
  203. package/out/commonjs/package/test.f.mjs +0 -27
  204. package/out/commonjs/path/module.f.d.mts +0 -60
  205. package/out/commonjs/path/module.f.mjs +0 -171
  206. package/out/commonjs/path/test.f.d.mts +0 -25
  207. package/out/commonjs/path/test.f.mjs +0 -231
  208. package/out/commonjs/test.d.mts +0 -8
  209. package/out/commonjs/test.mjs +0 -87
  210. package/out/crypto/prime_field/module.f.d.mts +0 -67
  211. package/out/crypto/prime_field/module.f.mjs +0 -110
  212. package/out/crypto/prime_field/test.f.d.mts +0 -13
  213. package/out/crypto/prime_field/test.f.mjs +0 -152
  214. package/out/crypto/secp/module.f.d.mts +0 -110
  215. package/out/crypto/secp/module.f.mjs +0 -173
  216. package/out/crypto/secp/test.f.d.mts +0 -5
  217. package/out/crypto/secp/test.f.mjs +0 -78
  218. package/out/crypto/sha2/module.f.d.mts +0 -15
  219. package/out/crypto/sha2/module.f.mjs +0 -172
  220. package/out/crypto/sha2/test.f.d.mts +0 -10
  221. package/out/crypto/sha2/test.f.mjs +0 -86
  222. package/out/dev/index.d.mts +0 -1
  223. package/out/dev/index.mjs +0 -2
  224. package/out/dev/module.d.mts +0 -26
  225. package/out/dev/module.f.d.mts +0 -1
  226. package/out/dev/module.f.mjs +0 -2
  227. package/out/dev/module.mjs +0 -167
  228. package/out/dev/test/module.f.d.mts +0 -25
  229. package/out/dev/test/module.f.mjs +0 -134
  230. package/out/dev/test.d.mts +0 -3
  231. package/out/dev/test.f.d.mts +0 -9
  232. package/out/dev/test.f.mjs +0 -58
  233. package/out/dev/test.mjs +0 -52
  234. package/out/djs/module.f.d.mts +0 -20
  235. package/out/djs/module.f.mjs +0 -79
  236. package/out/djs/parser/module.f.d.mts +0 -56
  237. package/out/djs/parser/module.f.mjs +0 -448
  238. package/out/djs/parser/test.f.d.mts +0 -13
  239. package/out/djs/parser/test.f.mjs +0 -569
  240. package/out/djs/test.f.d.mts +0 -12
  241. package/out/djs/test.f.mjs +0 -84
  242. package/out/djs/tokenizer/module.f.d.mts +0 -13
  243. package/out/djs/tokenizer/module.f.mjs +0 -91
  244. package/out/djs/tokenizer/test.f.d.mts +0 -7
  245. package/out/djs/tokenizer/test.f.mjs +0 -530
  246. package/out/fsc/module.f.d.mts +0 -7
  247. package/out/fsc/module.f.mjs +0 -105
  248. package/out/fsc/test.f.d.mts +0 -4
  249. package/out/fsc/test.f.mjs +0 -19
  250. package/out/fsm/module.f.d.mts +0 -14
  251. package/out/fsm/module.f.mjs +0 -80
  252. package/out/fsm/test.f.d.mts +0 -5
  253. package/out/fsm/test.f.mjs +0 -138
  254. package/out/html/module.f.d.mts +0 -17
  255. package/out/html/module.f.mjs +0 -80
  256. package/out/html/test.f.d.mts +0 -10
  257. package/out/html/test.f.mjs +0 -45
  258. package/out/issues/test.f.d.mts +0 -16
  259. package/out/issues/test.f.mjs +0 -66
  260. package/out/js/tokenizer/module.f.d.mts +0 -163
  261. package/out/js/tokenizer/module.f.mjs +0 -729
  262. package/out/js/tokenizer/test.f.d.mts +0 -9
  263. package/out/js/tokenizer/test.f.mjs +0 -906
  264. package/out/json/module.f.d.mts +0 -33
  265. package/out/json/module.f.mjs +0 -89
  266. package/out/json/parser/module.f.d.mts +0 -32
  267. package/out/json/parser/module.f.mjs +0 -224
  268. package/out/json/parser/test.f.d.mts +0 -5
  269. package/out/json/parser/test.f.mjs +0 -329
  270. package/out/json/serializer/module.f.d.mts +0 -36
  271. package/out/json/serializer/module.f.mjs +0 -67
  272. package/out/json/serializer/test.f.d.mts +0 -8
  273. package/out/json/serializer/test.f.mjs +0 -87
  274. package/out/json/test.f.d.mts +0 -8
  275. package/out/json/test.f.mjs +0 -61
  276. package/out/json/tokenizer/module.f.d.mts +0 -13
  277. package/out/json/tokenizer/module.f.mjs +0 -78
  278. package/out/json/tokenizer/test.f.d.mts +0 -6
  279. package/out/json/tokenizer/test.f.mjs +0 -420
  280. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  281. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  282. package/out/nodejs/version/main.d.mts +0 -1
  283. package/out/nodejs/version/main.mjs +0 -3
  284. package/out/nodejs/version/module.f.d.mts +0 -12
  285. package/out/nodejs/version/module.f.mjs +0 -34
  286. package/out/nodejs/version/test.f.d.mts +0 -2
  287. package/out/nodejs/version/test.f.mjs +0 -97
  288. package/out/text/ascii/module.f.d.mts +0 -70
  289. package/out/text/ascii/module.f.mjs +0 -154
  290. package/out/text/ascii/test.f.d.mts +0 -4
  291. package/out/text/ascii/test.f.mjs +0 -14
  292. package/out/text/module.f.d.mts +0 -13
  293. package/out/text/module.f.mjs +0 -19
  294. package/out/text/sgr/module.f.d.mts +0 -12
  295. package/out/text/sgr/module.f.mjs +0 -17
  296. package/out/text/test.f.d.mts +0 -2
  297. package/out/text/test.f.mjs +0 -19
  298. package/out/text/utf16/module.f.d.mts +0 -12
  299. package/out/text/utf16/module.f.mjs +0 -86
  300. package/out/text/utf16/test.f.d.mts +0 -6
  301. package/out/text/utf16/test.f.mjs +0 -145
  302. package/out/text/utf8/module.f.d.mts +0 -10
  303. package/out/text/utf8/module.f.mjs +0 -126
  304. package/out/text/utf8/test.f.d.mts +0 -6
  305. package/out/text/utf8/test.f.mjs +0 -175
  306. package/out/types/array/module.f.d.mts +0 -31
  307. package/out/types/array/module.f.mjs +0 -95
  308. package/out/types/array/test.f.d.mts +0 -10
  309. package/out/types/array/test.f.mjs +0 -116
  310. package/out/types/bigfloat/module.f.d.mts +0 -6
  311. package/out/types/bigfloat/module.f.mjs +0 -77
  312. package/out/types/bigfloat/test.f.d.mts +0 -6
  313. package/out/types/bigfloat/test.f.mjs +0 -349
  314. package/out/types/bigint/module.f.d.mts +0 -29
  315. package/out/types/bigint/module.f.mjs +0 -114
  316. package/out/types/bigint/test.f.d.mts +0 -16
  317. package/out/types/bigint/test.f.mjs +0 -199
  318. package/out/types/bit_vec/module.f.d.mts +0 -158
  319. package/out/types/bit_vec/module.f.mjs +0 -194
  320. package/out/types/bit_vec/test.f.d.mts +0 -23
  321. package/out/types/bit_vec/test.f.mjs +0 -210
  322. package/out/types/btree/find/module.f.d.mts +0 -36
  323. package/out/types/btree/find/module.f.mjs +0 -137
  324. package/out/types/btree/find/test.f.d.mts +0 -2
  325. package/out/types/btree/find/test.f.mjs +0 -156
  326. package/out/types/btree/module.f.d.mts +0 -5
  327. package/out/types/btree/module.f.mjs +0 -34
  328. package/out/types/btree/remove/module.f.d.mts +0 -14
  329. package/out/types/btree/remove/module.f.mjs +0 -209
  330. package/out/types/btree/remove/test.f.d.mts +0 -7
  331. package/out/types/btree/remove/test.f.mjs +0 -638
  332. package/out/types/btree/set/module.f.d.mts +0 -5
  333. package/out/types/btree/set/module.f.mjs +0 -114
  334. package/out/types/btree/set/test.f.d.mts +0 -2
  335. package/out/types/btree/set/test.f.mjs +0 -390
  336. package/out/types/btree/test.f.d.mts +0 -13
  337. package/out/types/btree/test.f.mjs +0 -83
  338. package/out/types/btree/types/module.f.d.mts +0 -14
  339. package/out/types/btree/types/module.f.mjs +0 -50
  340. package/out/types/byte_set/module.f.d.mts +0 -25
  341. package/out/types/byte_set/module.f.mjs +0 -42
  342. package/out/types/byte_set/test.f.d.mts +0 -13
  343. package/out/types/byte_set/test.f.mjs +0 -123
  344. package/out/types/function/compare/module.f.d.mts +0 -23
  345. package/out/types/function/compare/module.f.mjs +0 -22
  346. package/out/types/function/compare/test.f.d.mts +0 -2
  347. package/out/types/function/compare/test.f.mjs +0 -8
  348. package/out/types/function/module.f.d.mts +0 -51
  349. package/out/types/function/module.f.mjs +0 -44
  350. package/out/types/function/operator/module.f.d.mts +0 -60
  351. package/out/types/function/operator/module.f.mjs +0 -60
  352. package/out/types/function/test.f.d.mts +0 -2
  353. package/out/types/function/test.f.mjs +0 -15
  354. package/out/types/list/module.f.d.mts +0 -82
  355. package/out/types/list/module.f.mjs +0 -269
  356. package/out/types/list/test.f.d.mts +0 -38
  357. package/out/types/list/test.f.mjs +0 -401
  358. package/out/types/map/module.f.d.mts +0 -21
  359. package/out/types/map/module.f.mjs +0 -54
  360. package/out/types/map/test.f.d.mts +0 -5
  361. package/out/types/map/test.f.mjs +0 -115
  362. package/out/types/nibble_set/module.f.d.mts +0 -16
  363. package/out/types/nibble_set/module.f.mjs +0 -19
  364. package/out/types/nibble_set/test.f.d.mts +0 -13
  365. package/out/types/nibble_set/test.f.mjs +0 -90
  366. package/out/types/nullable/module.f.d.mts +0 -9
  367. package/out/types/nullable/module.f.mjs +0 -9
  368. package/out/types/nullable/test.f.d.mts +0 -2
  369. package/out/types/nullable/test.f.mjs +0 -12
  370. package/out/types/number/module.f.d.mts +0 -7
  371. package/out/types/number/module.f.mjs +0 -12
  372. package/out/types/number/test.f.d.mts +0 -11
  373. package/out/types/number/test.f.mjs +0 -126
  374. package/out/types/object/module.f.d.mts +0 -22
  375. package/out/types/object/module.f.mjs +0 -27
  376. package/out/types/object/test.f.d.mts +0 -5
  377. package/out/types/object/test.f.mjs +0 -17
  378. package/out/types/range/module.f.d.mts +0 -6
  379. package/out/types/range/module.f.mjs +0 -6
  380. package/out/types/range/test.f.d.mts +0 -2
  381. package/out/types/range/test.f.mjs +0 -18
  382. package/out/types/range_map/module.f.d.mts +0 -19
  383. package/out/types/range_map/module.f.mjs +0 -84
  384. package/out/types/range_map/test.f.d.mts +0 -6
  385. package/out/types/range_map/test.f.mjs +0 -201
  386. package/out/types/result/module.d.mts +0 -7
  387. package/out/types/result/module.f.d.mts +0 -22
  388. package/out/types/result/module.f.mjs +0 -25
  389. package/out/types/result/module.mjs +0 -16
  390. package/out/types/sorted_list/module.f.d.mts +0 -53
  391. package/out/types/sorted_list/module.f.mjs +0 -102
  392. package/out/types/sorted_list/test.f.d.mts +0 -5
  393. package/out/types/sorted_list/test.f.mjs +0 -66
  394. package/out/types/sorted_set/module.f.d.mts +0 -19
  395. package/out/types/sorted_set/module.f.mjs +0 -29
  396. package/out/types/sorted_set/test.f.d.mts +0 -6
  397. package/out/types/sorted_set/test.f.mjs +0 -80
  398. package/out/types/string/module.f.d.mts +0 -9
  399. package/out/types/string/module.f.mjs +0 -17
  400. package/out/types/string/test.f.d.mts +0 -15
  401. package/out/types/string/test.f.mjs +0 -58
  402. package/out/types/string_set/module.f.d.mts +0 -13
  403. package/out/types/string_set/module.f.mjs +0 -29
  404. package/out/types/string_set/test.f.d.mts +0 -5
  405. package/out/types/string_set/test.f.mjs +0 -65
  406. package/text/module.f.mjs +0 -27
  407. package/text/utf16/module.f.mjs +0 -96
  408. package/types/array/module.f.mjs +0 -119
  409. package/types/btree/find/module.f.mjs +0 -125
  410. package/types/btree/types/module.f.mjs +0 -64
  411. package/types/byte_set/module.f.mjs +0 -61
  412. package/types/function/compare/module.f.mjs +0 -29
  413. package/types/function/module.f.mjs +0 -50
  414. package/types/function/operator/module.f.mjs +0 -78
  415. package/types/function/test.f.mjs +0 -17
  416. package/types/list/module.f.mjs +0 -320
  417. package/types/map/module.f.mjs +0 -67
  418. package/types/nibble_set/module.f.mjs +0 -28
  419. package/types/nullable/module.f.mjs +0 -11
  420. package/types/number/module.f.mjs +0 -16
  421. package/types/object/module.f.mjs +0 -33
  422. package/types/range/module.f.mjs +0 -8
  423. package/types/range_map/module.f.mjs +0 -84
  424. package/types/result/module.f.mjs +0 -28
  425. package/types/sorted_list/module.f.mjs +0 -107
  426. package/types/sorted_set/module.f.mjs +0 -38
  427. package/types/string/module.f.mjs +0 -22
  428. package/types/string_set/module.f.mjs +0 -36
@@ -1,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