firefly-compiler 0.5.35 → 0.5.37

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 (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. package/output/js/ff/core/UnsafeJs.mjs +0 -191
@@ -66,6 +66,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
66
66
 
67
67
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
68
68
 
69
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
70
+
69
71
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
70
72
 
71
73
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -92,6 +94,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
92
94
 
93
95
  import * as ff_core_Path from "../../ff/core/Path.mjs"
94
96
 
97
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
98
+
95
99
  import * as ff_core_Random from "../../ff/core/Random.mjs"
96
100
 
97
101
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -114,14 +118,12 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
114
118
 
115
119
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
116
120
 
117
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
118
-
119
121
  // type Compiler
120
122
  export function Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, cache_, lspHook_, phaseDurationDelta_, phaseDurations_) {
121
123
  return {emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, cache_, lspHook_, phaseDurationDelta_, phaseDurations_};
122
124
  }
123
125
 
124
- export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Crypto", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit", "UnsafeJs"], ((moduleName_) => {
126
+ export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Crypto", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Queue", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit", "Js"], ((moduleName_) => {
125
127
  return ff_compiler_Syntax.DImport(ff_compiler_Syntax.Location("<prelude>", 1, 1), moduleName_, ff_compiler_Syntax.PackagePair("ff", "core"), [], moduleName_)
126
128
  }));
127
129
 
@@ -171,12 +173,14 @@ return ff_compiler_ModuleCache.ModuleCache_cacheParsedModule(self_.cache_, self_
171
173
  const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
172
174
  return ff_compiler_Compiler.Compiler_measure(self_, "Parse", packagePair_, moduleName_, (() => {
173
175
  const code_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.virtualFiles_, ff_core_Path.Path_absolute(path_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
174
- for(const for_o = importedAt_; for_o.Some;) {
175
- const at_ = for_o.value_;
176
+ {
177
+ const if_o = importedAt_
178
+ if(if_o.Some) {
179
+ const at_ = if_o.value_;
176
180
  if((!ff_core_Path.Path_exists(path_, false, false, false))) {
177
181
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ((("Imported module not found: " + packageName_) + "/") + moduleName_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
178
182
  }
179
- break
183
+ }
180
184
  };
181
185
  return ff_core_Path.Path_readText(path_)
182
186
  }));
@@ -246,7 +250,7 @@ return ff_compiler_ModuleCache.ModuleCache_cacheInferredModule(self_.cache_, sel
246
250
  return ff_compiler_Compiler.Compiler_measure(self_, "Infer", packagePair_, moduleName_, (() => {
247
251
  const module_ = ff_compiler_Compiler.Compiler_derive(self_, packagePair_, moduleName_);
248
252
  const otherModules_ = ff_core_List.List_map(ff_compiler_Compiler.Compiler_imports(self_, module_), ((i_) => {
249
- return ff_compiler_Compiler.Compiler_derive(self_, i_.packagePair_, ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff")))
253
+ return ff_compiler_Compiler.Compiler_derive(self_, i_.packagePair_, ff_core_String.String_dropLast(i_.file_, ".ff".length))
250
254
  }));
251
255
  const inference_ = ff_compiler_Inference.new_([module_, ...otherModules_], self_.lspHook_);
252
256
  const inferredModule_ = ff_compiler_Inference.Inference_inferModule(inference_, module_, otherModules_);
@@ -260,7 +264,7 @@ ff_compiler_ModuleCache.ModuleCache_cacheEmittedModule(self_.cache_, self_.packa
260
264
  ff_compiler_Compiler.Compiler_measure(self_, "Emit", packagePair_, moduleName_, (() => {
261
265
  const module_ = ff_compiler_Compiler.Compiler_infer(self_, packagePair_, moduleName_);
262
266
  const otherModules_ = ff_core_List.List_map(ff_compiler_Compiler.Compiler_imports(self_, module_), ((i_) => {
263
- const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff"));
267
+ const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ".ff".length);
264
268
  ff_compiler_Compiler.Compiler_emit(self_, i_.packagePair_, newModuleName_, false);
265
269
  return ff_compiler_Compiler.Compiler_infer(self_, i_.packagePair_, newModuleName_)
266
270
  }));
@@ -306,12 +310,14 @@ return (await ff_compiler_ModuleCache.ModuleCache_cacheParsedModule$(self_.cache
306
310
  const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
307
311
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Parse", packagePair_, moduleName_, (async ($task) => {
308
312
  const code_ = (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.virtualFiles_, (await ff_core_Path.Path_absolute$(path_, $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
309
- for(const for_o = importedAt_; for_o.Some;) {
310
- const at_ = for_o.value_;
313
+ {
314
+ const if_o = importedAt_
315
+ if(if_o.Some) {
316
+ const at_ = if_o.value_;
311
317
  if((!(await ff_core_Path.Path_exists$(path_, false, false, false, $task)))) {
312
318
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ((("Imported module not found: " + packageName_) + "/") + moduleName_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
313
319
  }
314
- break
320
+ }
315
321
  };
316
322
  return (await ff_core_Path.Path_readText$(path_, $task))
317
323
  }), $task));
@@ -381,7 +387,7 @@ return (await ff_compiler_ModuleCache.ModuleCache_cacheInferredModule$(self_.cac
381
387
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Infer", packagePair_, moduleName_, (async ($task) => {
382
388
  const module_ = (await ff_compiler_Compiler.Compiler_derive$(self_, packagePair_, moduleName_, $task));
383
389
  const otherModules_ = (await ff_core_List.List_map$((await ff_compiler_Compiler.Compiler_imports$(self_, module_, $task)), (async (i_, $task) => {
384
- return (await ff_compiler_Compiler.Compiler_derive$(self_, i_.packagePair_, ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff")), $task))
390
+ return (await ff_compiler_Compiler.Compiler_derive$(self_, i_.packagePair_, ff_core_String.String_dropLast(i_.file_, ".ff".length), $task))
385
391
  }), $task));
386
392
  const inference_ = ff_compiler_Inference.new_([module_, ...otherModules_], self_.lspHook_);
387
393
  const inferredModule_ = ff_compiler_Inference.Inference_inferModule(inference_, module_, otherModules_);
@@ -395,7 +401,7 @@ export async function Compiler_emit$(self_, packagePair_, moduleName_, isMainMod
395
401
  (await ff_compiler_Compiler.Compiler_measure$(self_, "Emit", packagePair_, moduleName_, (async ($task) => {
396
402
  const module_ = (await ff_compiler_Compiler.Compiler_infer$(self_, packagePair_, moduleName_, $task));
397
403
  const otherModules_ = (await ff_core_List.List_map$((await ff_compiler_Compiler.Compiler_imports$(self_, module_, $task)), (async (i_, $task) => {
398
- const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff"));
404
+ const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ".ff".length);
399
405
  (await ff_compiler_Compiler.Compiler_emit$(self_, i_.packagePair_, newModuleName_, false, $task));
400
406
  return (await ff_compiler_Compiler.Compiler_infer$(self_, i_.packagePair_, newModuleName_, $task))
401
407
  }), $task));
@@ -56,6 +56,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
56
56
 
57
57
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
58
58
 
59
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
60
+
59
61
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
60
62
 
61
63
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -82,6 +84,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
82
84
 
83
85
  import * as ff_core_Path from "../../ff/core/Path.mjs"
84
86
 
87
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
88
+
85
89
  import * as ff_core_Random from "../../ff/core/Random.mjs"
86
90
 
87
91
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -104,8 +108,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
104
108
 
105
109
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
106
110
 
107
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
108
-
109
111
  // type Dependencies
110
112
  export function Dependencies(workspace_, packages_, packagePaths_, singleFilePackages_) {
111
113
  return {workspace_, packages_, packagePaths_, singleFilePackages_};
@@ -152,7 +154,8 @@ ff_core_Core.panic_(((("Dependency declaration and package declaration disagree
152
154
  }
153
155
 
154
156
  export function internalExtractTarGz_(tarGzPath_, path_) {
155
- throw new Error('Function internalExtractTarGz is missing on this target in sync context.');
157
+ const tar_ = import$0;
158
+ tar_.extract({file: tarGzPath_.absolutePath_, cwd: path_.absolutePath_, strict: true})
156
159
  }
157
160
 
158
161
  export async function process_$(fetch_, dependencyLock_, path_, $task) {
@@ -189,10 +192,8 @@ ff_core_Core.panic_(((("Dependency declaration and package declaration disagree
189
192
  }
190
193
 
191
194
  export async function internalExtractTarGz_$(tarGzPath_, path_, $task) {
192
-
193
- const tar = import$0
194
- await tar.extract({file: tarGzPath_, cwd: path_, strict: true})
195
-
195
+ const tar_ = import$0;
196
+ (await tar_.extract({file: tarGzPath_.absolutePath_, cwd: path_.absolutePath_, strict: true}))
196
197
  }
197
198
 
198
199
  export function Dependencies_loadPackageInfo(self_, packagePair_, path_) {
@@ -44,6 +44,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
44
44
 
45
45
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
46
46
 
47
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
48
+
47
49
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
48
50
 
49
51
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -70,6 +72,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
70
72
 
71
73
  import * as ff_core_Path from "../../ff/core/Path.mjs"
72
74
 
75
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
76
+
73
77
  import * as ff_core_Random from "../../ff/core/Random.mjs"
74
78
 
75
79
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -92,8 +96,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
92
96
 
93
97
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
94
98
 
95
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
96
-
97
99
  // type DependencyLock
98
100
  export function DependencyLock(doneLocks_, task_) {
99
101
  return {doneLocks_, task_};
@@ -113,7 +115,7 @@ export function DependencyLock_do(self_, doneFile_, body_) {
113
115
  const lock_ = ff_core_StringMap.StringMap_getOrSet(self_.doneLocks_, doneFile_, (() => {
114
116
  return ff_core_Task.Task_lock(self_.task_)
115
117
  }));
116
- return ff_core_Lock.Lock_do(lock_, false, (() => {
118
+ return ff_core_Lock.Lock_do(lock_, (() => {
117
119
  return body_()
118
120
  }))
119
121
  }
@@ -122,7 +124,7 @@ export async function DependencyLock_do$(self_, doneFile_, body_, $task) {
122
124
  const lock_ = (await ff_core_StringMap.StringMap_getOrSet$(self_.doneLocks_, doneFile_, (async ($task) => {
123
125
  return (await ff_core_Task.Task_lock$(self_.task_, $task))
124
126
  }), $task));
125
- return (await ff_core_Lock.Lock_do$(lock_, false, (async ($task) => {
127
+ return (await ff_core_Lock.Lock_do$(lock_, (async ($task) => {
126
128
  return (await body_($task))
127
129
  }), $task))
128
130
  }
@@ -46,6 +46,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
46
46
 
47
47
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
48
48
 
49
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
50
+
49
51
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
50
52
 
51
53
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -72,6 +74,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
72
74
 
73
75
  import * as ff_core_Path from "../../ff/core/Path.mjs"
74
76
 
77
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
78
+
75
79
  import * as ff_core_Random from "../../ff/core/Random.mjs"
76
80
 
77
81
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -94,8 +98,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
94
98
 
95
99
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
96
100
 
97
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
98
-
99
101
  // type Deriver
100
102
  const Deriver$ = {Deriver: true};
101
103
  export function Deriver() {
@@ -157,9 +159,9 @@ const typeArgumentStrings_ = ff_core_List.List_map(typeArguments_, ((_w1) => {
157
159
  return ff_compiler_Deriver.Deriver_makeMethodCall(self_, at_, ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.anyTag", [], [_w1]), "show", [])
158
160
  }));
159
161
  const strings_ = [ff_compiler_Syntax.EString(at_, "\"[\""), ...ff_core_List.List_separate(typeArgumentStrings_, [ff_compiler_Syntax.EString(at_, "\",\"")]), ff_compiler_Syntax.EString(at_, "\"]\"")];
160
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [], [], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.internalAnyTag", [ff_core_List.List_foldLeft(strings_, ff_compiler_Syntax.EString(at_, (("\"" + selfTypeName_) + "\"")), ((a_, b_) => {
162
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [], [], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.internalAnyTag", [ff_core_List.List_foldLeft(strings_, ff_compiler_Syntax.EString(at_, (("\"" + selfTypeName_) + "\"")), ((a_, b_) => {
161
163
  return ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "+", [a_, b_], [])
162
- }))], []))]));
164
+ }))], []))]);
163
165
  const method_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
164
166
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Any.HasAnyTag", [selfType_], [], [method_], true)
165
167
  }
@@ -185,7 +187,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
185
187
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
186
188
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
187
189
  const signature_ = ff_compiler_Syntax.Signature(at_, "show", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "value", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/String.String", []), noEffect_);
188
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeShowCases(self_, modulePrefix_, declaration_, selfType_)));
190
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeShowCases(self_, modulePrefix_, declaration_, selfType_));
189
191
  const showMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
190
192
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Show.Show", [selfType_], [], [showMethod_], true)
191
193
  }
@@ -238,7 +240,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
238
240
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
239
241
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
240
242
  const signature_ = ff_compiler_Syntax.Signature(at_, "compare", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "x", selfType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "y", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Ordering.Ordering", []), noEffect_);
241
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeOrderingCases(self_, modulePrefix_, declaration_, selfType_)));
243
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeOrderingCases(self_, modulePrefix_, declaration_, selfType_));
242
244
  const compareMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
243
245
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Ordering.Order", [selfType_], [], [compareMethod_], true)
244
246
  }
@@ -277,7 +279,7 @@ const variantName_ = ((modulePrefix_ + ".") + variant_.name_);
277
279
  return ff_compiler_Syntax.MatchCase(at_, [ff_compiler_Syntax.PVariantAs(at_, variantName_, at_, ff_core_Option.None())], [], ff_compiler_Syntax.EInt(at_, ("" + index_)))
278
280
  }
279
281
  }));
280
- const differentVariant_ = ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_, wildcardPattern_], [], ff_compiler_Syntax.EFunctions(at_, [ff_compiler_Syntax.DFunction(at_, numberSignature_, ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, numberCases_)))], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Ordering.compare", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "x")], []), ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "y")], [])], [])));
282
+ const differentVariant_ = ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_, wildcardPattern_], [], ff_compiler_Syntax.EFunctions(at_, [ff_compiler_Syntax.DFunction(at_, numberSignature_, ff_compiler_Syntax.Lambda(at_, noEffect_, numberCases_))], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Ordering.compare", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "x")], []), ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "y")], [])], [])));
281
283
  return [sameCase_, ...sameVariantCases_, differentVariant_]
282
284
  }
283
285
  }
@@ -294,7 +296,7 @@ const fields_a = fields_;
294
296
  if(fields_a.length === 0) {
295
297
  return orderingSame_
296
298
  }
297
- if(fields_a.length >= 1) {
299
+ {
298
300
  const head_ = fields_a[0];
299
301
  const tail_ = fields_a.slice(1);
300
302
  const variableName_ = (head_.name_ + "Ordering");
@@ -328,7 +330,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
328
330
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
329
331
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
330
332
  const signature_ = ff_compiler_Syntax.Signature(at_, "equals", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "x", selfType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "y", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Bool.Bool", []), noEffect_);
331
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeEqualsCases(self_, modulePrefix_, declaration_, selfType_)));
333
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeEqualsCases(self_, modulePrefix_, declaration_, selfType_));
332
334
  const equalsMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
333
335
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Equal.Equal", [selfType_], [], [equalsMethod_], true)
334
336
  }
@@ -376,7 +378,7 @@ if(fields_a.length === 1) {
376
378
  const head_ = fields_a[0];
377
379
  return ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Equal.equals", [ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "x"), head_.name_), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "y"), head_.name_)], [])
378
380
  }
379
- if(fields_a.length >= 1) {
381
+ {
380
382
  const head_ = fields_a[0];
381
383
  const tail_ = fields_a.slice(1);
382
384
  const equalsTerm_ = ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Equal.equals", [ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "x"), head_.name_), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "y"), head_.name_)], []);
@@ -410,8 +412,8 @@ const serializationType_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Seriali
410
412
  const serializeSignature_ = ff_compiler_Syntax.Signature(at_, "serializeUsing", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "serialization", serializationType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "value", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Unit.Unit", []), noEffect_);
411
413
  const deserializeSignature_ = ff_compiler_Syntax.Signature(at_, "deserializeUsing", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "serialization", serializationType_, ff_core_Option.None())], selfType_, noEffect_);
412
414
  const wildcardPattern_ = ff_compiler_Syntax.PVariable(at_, ff_core_Option.None());
413
- const serializeBody_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeSerializeBody(self_, modulePrefix_, declaration_, selfType_)));
414
- const deserializeBody_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_], [], ff_compiler_Deriver.Deriver_makeDeserializeBody(self_, modulePrefix_, declaration_, selfType_))]));
415
+ const serializeBody_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeSerializeBody(self_, modulePrefix_, declaration_, selfType_));
416
+ const deserializeBody_ = ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_], [], ff_compiler_Deriver.Deriver_makeDeserializeBody(self_, modulePrefix_, declaration_, selfType_))]);
415
417
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Serializable.Serializable", [selfType_], [], [ff_compiler_Syntax.DFunction(at_, serializeSignature_, serializeBody_), ff_compiler_Syntax.DFunction(at_, deserializeSignature_, deserializeBody_)], true)
416
418
  }
417
419
 
@@ -471,7 +473,7 @@ return ff_compiler_Syntax.ELet(at_, false, "variantIndex", intType_, grabVariant
471
473
 
472
474
  export function Deriver_makeUpdateChecksum(self_, at_, variantName_, declaration_, variant_) {
473
475
  const fields_ = [...declaration_.commonFields_, ...variant_.fields_];
474
- const variantChecksum_ = ff_core_String.String_size(variantName_);
476
+ const variantChecksum_ = variantName_.length;
475
477
  return ff_compiler_Syntax.EAssignField(at_, "", ff_compiler_Syntax.EVariable(at_, "serialization"), "checksum", ff_compiler_Deriver.Deriver_makeMethodCall(self_, at_, ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "+", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "*", [ff_compiler_Syntax.EInt(at_, "31"), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "serialization"), "checksum")], []), ff_compiler_Syntax.EInt(at_, ("" + variantChecksum_))], []), "bitOr", [ff_compiler_Syntax.EInt(at_, "0")]))
476
478
  }
477
479
 
@@ -559,9 +561,9 @@ const typeArgumentStrings_ = ff_core_List.List_map(typeArguments_, ((_w1) => {
559
561
  return ff_compiler_Deriver.Deriver_makeMethodCall(self_, at_, ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.anyTag", [], [_w1]), "show", [])
560
562
  }));
561
563
  const strings_ = [ff_compiler_Syntax.EString(at_, "\"[\""), ...ff_core_List.List_separate(typeArgumentStrings_, [ff_compiler_Syntax.EString(at_, "\",\"")]), ff_compiler_Syntax.EString(at_, "\"]\"")];
562
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [], [], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.internalAnyTag", [ff_core_List.List_foldLeft(strings_, ff_compiler_Syntax.EString(at_, (("\"" + selfTypeName_) + "\"")), ((a_, b_) => {
564
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [], [], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Any.internalAnyTag", [ff_core_List.List_foldLeft(strings_, ff_compiler_Syntax.EString(at_, (("\"" + selfTypeName_) + "\"")), ((a_, b_) => {
563
565
  return ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "+", [a_, b_], [])
564
- }))], []))]));
566
+ }))], []))]);
565
567
  const method_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
566
568
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Any.HasAnyTag", [selfType_], [], [method_], true)
567
569
  }
@@ -587,7 +589,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
587
589
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
588
590
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
589
591
  const signature_ = ff_compiler_Syntax.Signature(at_, "show", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "value", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/String.String", []), noEffect_);
590
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeShowCases(self_, modulePrefix_, declaration_, selfType_)));
592
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeShowCases(self_, modulePrefix_, declaration_, selfType_));
591
593
  const showMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
592
594
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Show.Show", [selfType_], [], [showMethod_], true)
593
595
  }
@@ -640,7 +642,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
640
642
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
641
643
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
642
644
  const signature_ = ff_compiler_Syntax.Signature(at_, "compare", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "x", selfType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "y", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Ordering.Ordering", []), noEffect_);
643
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeOrderingCases(self_, modulePrefix_, declaration_, selfType_)));
645
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeOrderingCases(self_, modulePrefix_, declaration_, selfType_));
644
646
  const compareMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
645
647
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Ordering.Order", [selfType_], [], [compareMethod_], true)
646
648
  }
@@ -679,7 +681,7 @@ const variantName_ = ((modulePrefix_ + ".") + variant_.name_);
679
681
  return ff_compiler_Syntax.MatchCase(at_, [ff_compiler_Syntax.PVariantAs(at_, variantName_, at_, ff_core_Option.None())], [], ff_compiler_Syntax.EInt(at_, ("" + index_)))
680
682
  }
681
683
  }));
682
- const differentVariant_ = ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_, wildcardPattern_], [], ff_compiler_Syntax.EFunctions(at_, [ff_compiler_Syntax.DFunction(at_, numberSignature_, ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, numberCases_)))], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Ordering.compare", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "x")], []), ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "y")], [])], [])));
684
+ const differentVariant_ = ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_, wildcardPattern_], [], ff_compiler_Syntax.EFunctions(at_, [ff_compiler_Syntax.DFunction(at_, numberSignature_, ff_compiler_Syntax.Lambda(at_, noEffect_, numberCases_))], ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Ordering.compare", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "x")], []), ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "number", [ff_compiler_Syntax.EVariable(at_, "y")], [])], [])));
683
685
  return [sameCase_, ...sameVariantCases_, differentVariant_]
684
686
  }
685
687
  }
@@ -696,7 +698,7 @@ const fields_a = fields_;
696
698
  if(fields_a.length === 0) {
697
699
  return orderingSame_
698
700
  }
699
- if(fields_a.length >= 1) {
701
+ {
700
702
  const head_ = fields_a[0];
701
703
  const tail_ = fields_a.slice(1);
702
704
  const variableName_ = (head_.name_ + "Ordering");
@@ -730,7 +732,7 @@ return ff_compiler_Syntax.TConstructor(at_, t_, [])
730
732
  const selfType_ = ff_compiler_Syntax.TConstructor(at_, ((modulePrefix_ + ".") + declaration_.name_), typeArguments_);
731
733
  const noEffect_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Nothing.Nothing", []);
732
734
  const signature_ = ff_compiler_Syntax.Signature(at_, "equals", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "x", selfType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "y", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Bool.Bool", []), noEffect_);
733
- const body_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeEqualsCases(self_, modulePrefix_, declaration_, selfType_)));
735
+ const body_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeEqualsCases(self_, modulePrefix_, declaration_, selfType_));
734
736
  const equalsMethod_ = ff_compiler_Syntax.DFunction(at_, signature_, body_);
735
737
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Equal.Equal", [selfType_], [], [equalsMethod_], true)
736
738
  }
@@ -778,7 +780,7 @@ if(fields_a.length === 1) {
778
780
  const head_ = fields_a[0];
779
781
  return ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Equal.equals", [ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "x"), head_.name_), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "y"), head_.name_)], [])
780
782
  }
781
- if(fields_a.length >= 1) {
783
+ {
782
784
  const head_ = fields_a[0];
783
785
  const tail_ = fields_a.slice(1);
784
786
  const equalsTerm_ = ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "ff:core/Equal.equals", [ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "x"), head_.name_), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "y"), head_.name_)], []);
@@ -812,8 +814,8 @@ const serializationType_ = ff_compiler_Syntax.TConstructor(at_, "ff:core/Seriali
812
814
  const serializeSignature_ = ff_compiler_Syntax.Signature(at_, "serializeUsing", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "serialization", serializationType_, ff_core_Option.None()), ff_compiler_Syntax.Parameter(at_, false, "value", selfType_, ff_core_Option.None())], ff_compiler_Syntax.TConstructor(at_, "ff:core/Unit.Unit", []), noEffect_);
813
815
  const deserializeSignature_ = ff_compiler_Syntax.Signature(at_, "deserializeUsing", false, [], [], [ff_compiler_Syntax.Parameter(at_, false, "serialization", serializationType_, ff_core_Option.None())], selfType_, noEffect_);
814
816
  const wildcardPattern_ = ff_compiler_Syntax.PVariable(at_, ff_core_Option.None());
815
- const serializeBody_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeSerializeBody(self_, modulePrefix_, declaration_, selfType_)));
816
- const deserializeBody_ = ff_compiler_Syntax.FireflyTarget(ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_], [], ff_compiler_Deriver.Deriver_makeDeserializeBody(self_, modulePrefix_, declaration_, selfType_))]));
817
+ const serializeBody_ = ff_compiler_Syntax.Lambda(at_, noEffect_, ff_compiler_Deriver.Deriver_makeSerializeBody(self_, modulePrefix_, declaration_, selfType_));
818
+ const deserializeBody_ = ff_compiler_Syntax.Lambda(at_, noEffect_, [ff_compiler_Syntax.MatchCase(at_, [wildcardPattern_], [], ff_compiler_Deriver.Deriver_makeDeserializeBody(self_, modulePrefix_, declaration_, selfType_))]);
817
819
  return ff_compiler_Syntax.DInstance(at_, declaration_.generics_, constraints_, "ff:core/Serializable.Serializable", [selfType_], [], [ff_compiler_Syntax.DFunction(at_, serializeSignature_, serializeBody_), ff_compiler_Syntax.DFunction(at_, deserializeSignature_, deserializeBody_)], true)
818
820
  }
819
821
 
@@ -873,7 +875,7 @@ return ff_compiler_Syntax.ELet(at_, false, "variantIndex", intType_, grabVariant
873
875
 
874
876
  export async function Deriver_makeUpdateChecksum$(self_, at_, variantName_, declaration_, variant_, $task) {
875
877
  const fields_ = [...declaration_.commonFields_, ...variant_.fields_];
876
- const variantChecksum_ = ff_core_String.String_size(variantName_);
878
+ const variantChecksum_ = variantName_.length;
877
879
  return ff_compiler_Syntax.EAssignField(at_, "", ff_compiler_Syntax.EVariable(at_, "serialization"), "checksum", ff_compiler_Deriver.Deriver_makeMethodCall(self_, at_, ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "+", [ff_compiler_Deriver.Deriver_makeSimpleCall(self_, at_, "*", [ff_compiler_Syntax.EInt(at_, "31"), ff_compiler_Syntax.EField(at_, false, ff_compiler_Syntax.EVariable(at_, "serialization"), "checksum")], []), ff_compiler_Syntax.EInt(at_, ("" + variantChecksum_))], []), "bitOr", [ff_compiler_Syntax.EInt(at_, "0")]))
878
880
  }
879
881
 
@@ -50,6 +50,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
50
50
 
51
51
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
52
52
 
53
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
54
+
53
55
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
54
56
 
55
57
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -76,6 +78,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
76
78
 
77
79
  import * as ff_core_Path from "../../ff/core/Path.mjs"
78
80
 
81
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
82
+
79
83
  import * as ff_core_Random from "../../ff/core/Random.mjs"
80
84
 
81
85
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -98,8 +102,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
98
102
 
99
103
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
100
104
 
101
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
102
-
103
105
  // type Dictionaries
104
106
  export function Dictionaries(instances_) {
105
107
  return {instances_};
@@ -122,7 +124,7 @@ if(_1.TConstructor) {
122
124
  const name_ = _1.name_;
123
125
  return name_
124
126
  }
125
- if(_1.TVariable) {
127
+ {
126
128
  const i_ = _1.index_;
127
129
  return ff_compiler_Dictionaries.fail_(c_.at_, ("Unexpected unification variable: $" + i_))
128
130
  }
@@ -146,7 +148,7 @@ if(_1.TConstructor) {
146
148
  const name_ = _1.name_;
147
149
  return name_
148
150
  }
149
- if(_1.TVariable) {
151
+ {
150
152
  const i_ = _1.index_;
151
153
  return ff_compiler_Dictionaries.fail_(c_.at_, ("Unexpected unification variable: $" + i_))
152
154
  }
@@ -222,10 +224,7 @@ return ff_compiler_Dictionaries.Dictionaries(ff_core_Map.Map_addAll(self_.instan
222
224
  const _1 = definition_;
223
225
  {
224
226
  const _c = _1;
225
- return ff_compiler_Syntax.DFunction(_c.at_, _c.signature_, ff_compiler_Syntax.Target_mapFirefly(definition_.body_, ((_w1) => {
226
- return ff_compiler_Dictionaries.Dictionaries_processLambda(self2_, functions_, _w1)
227
- })))
228
- return
227
+ return ff_compiler_Syntax.DFunction(_c.at_, _c.signature_, ff_compiler_Dictionaries.Dictionaries_processLambda(self2_, functions_, definition_.body_))
229
228
  }
230
229
  }
231
230
  }
@@ -439,7 +438,7 @@ return ff_compiler_Syntax.DynamicCall(ff_compiler_Dictionaries.Dictionaries_proc
439
438
  }
440
439
  return
441
440
  }
442
- if(_1.StaticCall) {
441
+ {
443
442
  return e_.target_
444
443
  }
445
444
  }))(e_.target_);
@@ -497,7 +496,7 @@ return ff_compiler_Syntax.EAssign(_c.at_, _c.operator_, _c.variable_, ff_compile
497
496
  }
498
497
  return
499
498
  }
500
- if(_1.EAssignField) {
499
+ {
501
500
  const e_ = _1;
502
501
  {
503
502
  const _1 = e_;
@@ -549,7 +548,7 @@ return ff_compiler_Dictionaries.Dictionaries_makeDictionary(self_, at_, instance
549
548
  }));
550
549
  return ff_compiler_Syntax.Dictionary(instance_.packagePair_, instance_.moduleName_, constraint_.name_, firstType_.name_, dictionaries_)
551
550
  }
552
- if(_1.TVariable) {
551
+ {
553
552
  const t_ = _1;
554
553
  return ff_compiler_Dictionaries.fail_(t_.at_, " is still a unification variable")
555
554
  }
@@ -623,10 +622,7 @@ return ff_compiler_Dictionaries.Dictionaries(ff_core_Map.Map_addAll(self_.instan
623
622
  const _1 = definition_;
624
623
  {
625
624
  const _c = _1;
626
- return ff_compiler_Syntax.DFunction(_c.at_, _c.signature_, ff_compiler_Syntax.Target_mapFirefly(definition_.body_, ((_w1) => {
627
- return ff_compiler_Dictionaries.Dictionaries_processLambda(self2_, functions_, _w1)
628
- })))
629
- return
625
+ return ff_compiler_Syntax.DFunction(_c.at_, _c.signature_, ff_compiler_Dictionaries.Dictionaries_processLambda(self2_, functions_, definition_.body_))
630
626
  }
631
627
  }
632
628
  }
@@ -840,7 +836,7 @@ return ff_compiler_Syntax.DynamicCall(ff_compiler_Dictionaries.Dictionaries_proc
840
836
  }
841
837
  return
842
838
  }
843
- if(_1.StaticCall) {
839
+ {
844
840
  return e_.target_
845
841
  }
846
842
  }))(e_.target_);
@@ -898,7 +894,7 @@ return ff_compiler_Syntax.EAssign(_c.at_, _c.operator_, _c.variable_, ff_compile
898
894
  }
899
895
  return
900
896
  }
901
- if(_1.EAssignField) {
897
+ {
902
898
  const e_ = _1;
903
899
  {
904
900
  const _1 = e_;
@@ -950,7 +946,7 @@ return ff_compiler_Dictionaries.Dictionaries_makeDictionary(self_, at_, instance
950
946
  }));
951
947
  return ff_compiler_Syntax.Dictionary(instance_.packagePair_, instance_.moduleName_, constraint_.name_, firstType_.name_, dictionaries_)
952
948
  }
953
- if(_1.TVariable) {
949
+ {
954
950
  const t_ = _1;
955
951
  return ff_compiler_Dictionaries.fail_(t_.at_, " is still a unification variable")
956
952
  }
@@ -46,6 +46,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
46
46
 
47
47
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
48
48
 
49
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
50
+
49
51
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
50
52
 
51
53
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -72,6 +74,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
72
74
 
73
75
  import * as ff_core_Path from "../../ff/core/Path.mjs"
74
76
 
77
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
78
+
75
79
  import * as ff_core_Random from "../../ff/core/Random.mjs"
76
80
 
77
81
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -94,8 +98,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
94
98
 
95
99
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
96
100
 
97
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
98
-
99
101
  // type Environment
100
102
  export function Environment(modulePrefix_, symbols_, traits_, imports_, effect_, selfVariable_) {
101
103
  return {modulePrefix_, symbols_, traits_, imports_, effect_, selfVariable_};
@@ -172,7 +174,7 @@ if(_1.TVariable) {
172
174
  const t_ = _1;
173
175
  return ff_compiler_Environment.fail_(t_.at_, ("Unexpected type variable: $" + t_.index_))
174
176
  }
175
- if(_1.TConstructor) {
177
+ {
176
178
  const t_ = _1;
177
179
  const prefix_ = (t_.name_ + "_");
178
180
  const selfParameter_ = ff_compiler_Syntax.Parameter(d_.at_, false, d_.name_, d_.type_, ff_core_Option.None());
@@ -283,7 +285,7 @@ if(_1.TVariable) {
283
285
  const t_ = _1;
284
286
  return ff_compiler_Environment.fail_(t_.at_, ("Unexpected type variable: $" + t_.index_))
285
287
  }
286
- if(_1.TConstructor) {
288
+ {
287
289
  const t_ = _1;
288
290
  const prefix_ = (t_.name_ + "_");
289
291
  const selfParameter_ = ff_compiler_Syntax.Parameter(d_.at_, false, d_.name_, d_.type_, ff_core_Option.None());