firefly-compiler 0.4.18 → 0.4.20

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 (116) hide show
  1. package/compiler/Builder.ff +1 -1
  2. package/compiler/Compiler.ff +6 -5
  3. package/compiler/Inference.ff +31 -19
  4. package/compiler/JsEmitter.ff +98 -71
  5. package/compiler/JsImporter.ff +1 -1
  6. package/compiler/LspHook.ff +17 -5
  7. package/compiler/Main.ff +6 -6
  8. package/compiler/Parser.ff +50 -52
  9. package/compiler/Patterns.ff +2 -0
  10. package/compiler/Syntax.ff +1 -1
  11. package/compiler/Tokenizer.ff +2 -2
  12. package/compiler/Workspace.ff +2 -2
  13. package/core/Array.ff +135 -294
  14. package/core/Buffer.ff +3 -3
  15. package/core/BuildSystem.ff +1 -1
  16. package/core/Equal.ff +36 -52
  17. package/core/HttpClient.ff +1 -1
  18. package/core/IntMap.ff +14 -18
  19. package/core/JsSystem.ff +1 -1
  20. package/core/JsValue.ff +6 -12
  21. package/core/Json.ff +21 -30
  22. package/core/List.ff +281 -312
  23. package/core/Map.ff +4 -8
  24. package/core/NodeSystem.ff +2 -2
  25. package/core/Option.ff +0 -4
  26. package/core/Ordering.ff +10 -6
  27. package/core/Pair.ff +0 -4
  28. package/core/Random.ff +12 -26
  29. package/core/RbMap.ff +216 -216
  30. package/core/Serializable.ff +9 -18
  31. package/core/Set.ff +0 -1
  32. package/core/SourceLocation.ff +1 -1
  33. package/core/Stream.ff +10 -14
  34. package/core/String.ff +24 -6
  35. package/core/StringMap.ff +15 -19
  36. package/guide/Main.ff +20 -2
  37. package/lsp/CompletionHandler.ff +18 -18
  38. package/lsp/Handler.ff +45 -34
  39. package/lsp/HoverHandler.ff +2 -2
  40. package/lsp/LanguageServer.ff +2 -2
  41. package/lsp/SignatureHelpHandler.ff +1 -1
  42. package/lsp/SymbolHandler.ff +19 -5
  43. package/lux/Lux.ff +3 -3
  44. package/output/js/ff/compiler/Builder.mjs +19 -21
  45. package/output/js/ff/compiler/Compiler.mjs +18 -20
  46. package/output/js/ff/compiler/Dependencies.mjs +8 -10
  47. package/output/js/ff/compiler/Deriver.mjs +234 -236
  48. package/output/js/ff/compiler/Dictionaries.mjs +6 -8
  49. package/output/js/ff/compiler/Environment.mjs +42 -44
  50. package/output/js/ff/compiler/Inference.mjs +346 -304
  51. package/output/js/ff/compiler/JsEmitter.mjs +907 -833
  52. package/output/js/ff/compiler/JsImporter.mjs +0 -2
  53. package/output/js/ff/compiler/LspHook.mjs +872 -51
  54. package/output/js/ff/compiler/Main.mjs +109 -111
  55. package/output/js/ff/compiler/Parser.mjs +427 -441
  56. package/output/js/ff/compiler/Patterns.mjs +64 -50
  57. package/output/js/ff/compiler/Resolver.mjs +36 -38
  58. package/output/js/ff/compiler/Substitution.mjs +4 -6
  59. package/output/js/ff/compiler/Syntax.mjs +160 -162
  60. package/output/js/ff/compiler/Token.mjs +52 -54
  61. package/output/js/ff/compiler/Tokenizer.mjs +16 -18
  62. package/output/js/ff/compiler/Unification.mjs +24 -26
  63. package/output/js/ff/compiler/Wildcards.mjs +0 -2
  64. package/output/js/ff/compiler/Workspace.mjs +18 -20
  65. package/output/js/ff/core/Any.mjs +0 -2
  66. package/output/js/ff/core/Array.mjs +216 -613
  67. package/output/js/ff/core/AssetSystem.mjs +2 -4
  68. package/output/js/ff/core/Atomic.mjs +0 -2
  69. package/output/js/ff/core/Bool.mjs +0 -2
  70. package/output/js/ff/core/Box.mjs +0 -2
  71. package/output/js/ff/core/BrowserSystem.mjs +0 -2
  72. package/output/js/ff/core/Buffer.mjs +0 -2
  73. package/output/js/ff/core/BuildSystem.mjs +12 -14
  74. package/output/js/ff/core/Channel.mjs +0 -2
  75. package/output/js/ff/core/Char.mjs +0 -2
  76. package/output/js/ff/core/Core.mjs +0 -2
  77. package/output/js/ff/core/Duration.mjs +0 -2
  78. package/output/js/ff/core/Equal.mjs +0 -22
  79. package/output/js/ff/core/Error.mjs +0 -2
  80. package/output/js/ff/core/FileHandle.mjs +0 -2
  81. package/output/js/ff/core/Float.mjs +0 -2
  82. package/output/js/ff/core/HttpClient.mjs +2 -4
  83. package/output/js/ff/core/Instant.mjs +0 -2
  84. package/output/js/ff/core/Int.mjs +8 -10
  85. package/output/js/ff/core/IntMap.mjs +32 -42
  86. package/output/js/ff/core/JsSystem.mjs +1 -3
  87. package/output/js/ff/core/JsValue.mjs +5 -12
  88. package/output/js/ff/core/Json.mjs +25 -58
  89. package/output/js/ff/core/List.mjs +648 -1989
  90. package/output/js/ff/core/Lock.mjs +0 -2
  91. package/output/js/ff/core/Log.mjs +0 -2
  92. package/output/js/ff/core/Map.mjs +10 -20
  93. package/output/js/ff/core/NodeSystem.mjs +6 -8
  94. package/output/js/ff/core/Nothing.mjs +0 -2
  95. package/output/js/ff/core/Option.mjs +8 -18
  96. package/output/js/ff/core/Ordering.mjs +20 -98
  97. package/output/js/ff/core/Pair.mjs +6 -16
  98. package/output/js/ff/core/Path.mjs +12 -14
  99. package/output/js/ff/core/Random.mjs +24 -54
  100. package/output/js/ff/core/RbMap.mjs +54 -56
  101. package/output/js/ff/core/Serializable.mjs +19 -36
  102. package/output/js/ff/core/Set.mjs +0 -14
  103. package/output/js/ff/core/Show.mjs +0 -2
  104. package/output/js/ff/core/SourceLocation.mjs +0 -2
  105. package/output/js/ff/core/Stream.mjs +34 -44
  106. package/output/js/ff/core/String.mjs +31 -5
  107. package/output/js/ff/core/StringMap.mjs +32 -42
  108. package/output/js/ff/core/Task.mjs +0 -2
  109. package/output/js/ff/core/Try.mjs +0 -2
  110. package/output/js/ff/core/Unit.mjs +0 -2
  111. package/package.json +1 -1
  112. package/vscode/client/src/extension.ts +30 -2
  113. package/vscode/package.json +17 -1
  114. package/webserver/WebServer.ff +8 -8
  115. package/core/Stack.ff +0 -263
  116. package/output/js/ff/core/Stack.mjs +0 -603
@@ -88,8 +88,6 @@ import * as ff_core_Show from "../../ff/core/Show.mjs"
88
88
 
89
89
  import * as ff_core_SourceLocation from "../../ff/core/SourceLocation.mjs"
90
90
 
91
- import * as ff_core_Stack from "../../ff/core/Stack.mjs"
92
-
93
91
  import * as ff_core_Stream from "../../ff/core/Stream.mjs"
94
92
 
95
93
  import * as ff_core_String from "../../ff/core/String.mjs"
@@ -117,10 +115,10 @@ export function ParsedTargets(js_, jsSync_, jsAsync_, browser_, browserSync_, br
117
115
  return {js_, jsSync_, jsAsync_, browser_, browserSync_, browserAsync_, node_, nodeSync_, nodeAsync_};
118
116
  }
119
117
 
120
- export const binaryOperators_ = ff_core_List.List_toArray(ff_core_List.Link(ff_core_List.Link("||", ff_core_List.Empty()), ff_core_List.Link(ff_core_List.Link("&&", ff_core_List.Empty()), ff_core_List.Link(ff_core_List.Link("!=", ff_core_List.Link("==", ff_core_List.Empty())), ff_core_List.Link(ff_core_List.Link("<=", ff_core_List.Link(">=", ff_core_List.Link("<", ff_core_List.Link(">", ff_core_List.Empty())))), ff_core_List.Link(ff_core_List.Link("+", ff_core_List.Link("-", ff_core_List.Empty())), ff_core_List.Link(ff_core_List.Link("*", ff_core_List.Link("/", ff_core_List.Link("%", ff_core_List.Empty()))), ff_core_List.Link(ff_core_List.Link("^", ff_core_List.Empty()), ff_core_List.Empty()))))))));
118
+ export const binaryOperators_ = [["||"], ["&&"], ["!=", "=="], ["<=", ">=", "<", ">"], ["+", "-"], ["*", "/", "%"], ["^"]];
121
119
 
122
120
  export function make_(packagePair_, file_, tokens_, targetIsNode_, lspHook_) {
123
- return ff_compiler_Parser.Parser(packagePair_, file_, tokens_, ff_core_Array.Array_grabLast(tokens_), targetIsNode_, lspHook_, false, 0, 1)
121
+ return ff_compiler_Parser.Parser(packagePair_, file_, tokens_, ff_core_List.List_grabLast(tokens_), targetIsNode_, lspHook_, false, 0, 1)
124
122
  }
125
123
 
126
124
  export function findBestTarget_(targetIsNode_, body_, targets_) {
@@ -195,7 +193,7 @@ return
195
193
  }
196
194
 
197
195
  export async function make_$(packagePair_, file_, tokens_, targetIsNode_, lspHook_, $task) {
198
- return ff_compiler_Parser.Parser(packagePair_, file_, tokens_, ff_core_Array.Array_grabLast(tokens_), targetIsNode_, lspHook_, false, 0, 1)
196
+ return ff_compiler_Parser.Parser(packagePair_, file_, tokens_, ff_core_List.List_grabLast(tokens_), targetIsNode_, lspHook_, false, 0, 1)
199
197
  }
200
198
 
201
199
  export async function findBestTarget_$(targetIsNode_, body_, targets_, $task) {
@@ -277,8 +275,8 @@ export function Parser_behind(self_) {
277
275
  if((self_.offset_ === 0)) {
278
276
  return ff_compiler_Parser.Parser_current(self_)
279
277
  } else {
280
- if(((self_.offset_ - 1) < ff_core_Array.Array_size(self_.tokens_))) {
281
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ - 1))
278
+ if(((self_.offset_ - 1) < ff_core_List.List_size(self_.tokens_))) {
279
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ - 1))
282
280
  } else {
283
281
  return self_.end_
284
282
  }
@@ -286,24 +284,24 @@ return self_.end_
286
284
  }
287
285
 
288
286
  export function Parser_current(self_) {
289
- if((self_.offset_ < ff_core_Array.Array_size(self_.tokens_))) {
290
- return ff_core_Array.Array_grab(self_.tokens_, self_.offset_)
287
+ if((self_.offset_ < ff_core_List.List_size(self_.tokens_))) {
288
+ return ff_core_List.List_grab(self_.tokens_, self_.offset_)
291
289
  } else {
292
290
  return self_.end_
293
291
  }
294
292
  }
295
293
 
296
294
  export function Parser_ahead(self_) {
297
- if(((self_.offset_ + 1) < ff_core_Array.Array_size(self_.tokens_))) {
298
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ + 1))
295
+ if(((self_.offset_ + 1) < ff_core_List.List_size(self_.tokens_))) {
296
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ + 1))
299
297
  } else {
300
298
  return self_.end_
301
299
  }
302
300
  }
303
301
 
304
302
  export function Parser_aheadAhead(self_) {
305
- if(((self_.offset_ + 2) < ff_core_Array.Array_size(self_.tokens_))) {
306
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ + 2))
303
+ if(((self_.offset_ + 2) < ff_core_List.List_size(self_.tokens_))) {
304
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ + 2))
307
305
  } else {
308
306
  return self_.end_
309
307
  }
@@ -390,46 +388,46 @@ return p_
390
388
  if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "package"))) {
391
389
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Duplicate package definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
392
390
  };
393
- const dependencies_ = ff_core_Stack.make_();
391
+ const dependencies_ = ff_core_Array.make_();
394
392
  while((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "dependency"))) {
395
- ff_core_Stack.Stack_push(dependencies_, ff_compiler_Parser.Parser_parseDependencyDefinition(self_, package_.targets_));
393
+ ff_core_Array.Array_push(dependencies_, ff_compiler_Parser.Parser_parseDependencyDefinition(self_, package_.targets_));
396
394
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
397
395
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
398
396
  }
399
397
  };
400
- const includes_ = ff_core_Stack.make_();
398
+ const includes_ = ff_core_Array.make_();
401
399
  while((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "include"))) {
402
- ff_core_Stack.Stack_push(includes_, ff_compiler_Parser.Parser_parseIncludeDefinition(self_));
400
+ ff_core_Array.Array_push(includes_, ff_compiler_Parser.Parser_parseIncludeDefinition(self_));
403
401
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
404
402
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
405
403
  }
406
404
  };
407
- return ff_compiler_Syntax.PackageInfo(package_, ff_core_Stack.Stack_toList(dependencies_, 0, 9007199254740991), ff_core_Stack.Stack_toList(includes_, 0, 9007199254740991))
405
+ return ff_compiler_Syntax.PackageInfo(package_, ff_core_Array.Array_toList(dependencies_, 0, 9007199254740991), ff_core_Array.Array_toList(includes_, 0, 9007199254740991))
408
406
  }
409
407
 
410
408
  export function Parser_parseModule(self_) {
411
- const imports_ = ff_core_Stack.make_();
412
- const types_ = ff_core_Stack.make_();
413
- const traits_ = ff_core_Stack.make_();
414
- const instances_ = ff_core_Stack.make_();
415
- const extends_ = ff_core_Stack.make_();
416
- const lets_ = ff_core_Stack.make_();
417
- const functions_ = ff_core_Stack.make_();
409
+ const imports_ = ff_core_Array.make_();
410
+ const types_ = ff_core_Array.make_();
411
+ const traits_ = ff_core_Array.make_();
412
+ const instances_ = ff_core_Array.make_();
413
+ const extends_ = ff_core_Array.make_();
414
+ const lets_ = ff_core_Array.make_();
415
+ const functions_ = ff_core_Array.make_();
418
416
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
419
417
  if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower()) && (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LAssign()) || ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LColon())))) {
420
- ff_core_Stack.Stack_push(lets_, ff_compiler_Parser.Parser_parseLetDefinition(self_))
418
+ ff_core_Array.Array_push(lets_, ff_compiler_Parser.Parser_parseLetDefinition(self_))
421
419
  } else if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
422
- ff_core_Stack.Stack_push(functions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false))
420
+ ff_core_Array.Array_push(functions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false))
423
421
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "extend"))) {
424
- ff_core_Stack.Stack_push(extends_, ff_compiler_Parser.Parser_parseExtendDefinition(self_))
422
+ ff_core_Array.Array_push(extends_, ff_compiler_Parser.Parser_parseExtendDefinition(self_))
425
423
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "trait"))) {
426
- ff_core_Stack.Stack_push(traits_, ff_compiler_Parser.Parser_parseTraitDefinition(self_))
424
+ ff_core_Array.Array_push(traits_, ff_compiler_Parser.Parser_parseTraitDefinition(self_))
427
425
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "instance"))) {
428
- ff_core_Stack.Stack_push(instances_, ff_compiler_Parser.Parser_parseInstanceDefinition(self_))
426
+ ff_core_Array.Array_push(instances_, ff_compiler_Parser.Parser_parseInstanceDefinition(self_))
429
427
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs4(ff_compiler_Parser.Parser_current(self_), "data", "class", "capability", "newtype"))) {
430
- ff_core_Stack.Stack_push(types_, ff_compiler_Parser.Parser_parseTypeDefinition(self_))
428
+ ff_core_Array.Array_push(types_, ff_compiler_Parser.Parser_parseTypeDefinition(self_))
431
429
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "import"))) {
432
- ff_core_Stack.Stack_push(imports_, ff_compiler_Parser.Parser_parseImportDefinition(self_, self_.packagePair_))
430
+ ff_core_Array.Array_push(imports_, ff_compiler_Parser.Parser_parseImportDefinition(self_, self_.packagePair_))
433
431
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "include"))) {
434
432
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Includes must be at the top of the file or below 'package'"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
435
433
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "dependency"))) {
@@ -443,7 +441,7 @@ if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_com
443
441
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
444
442
  }
445
443
  };
446
- return ff_compiler_Syntax.Module(self_.file_, self_.packagePair_, ff_core_Stack.Stack_toList(imports_, 0, 9007199254740991), ff_core_Stack.Stack_toList(types_, 0, 9007199254740991), ff_core_Stack.Stack_toList(traits_, 0, 9007199254740991), ff_core_Stack.Stack_toList(instances_, 0, 9007199254740991), ff_core_Stack.Stack_toList(extends_, 0, 9007199254740991), ff_core_Stack.Stack_toList(lets_, 0, 9007199254740991), ff_core_Stack.Stack_toList(functions_, 0, 9007199254740991))
444
+ return ff_compiler_Syntax.Module(self_.file_, self_.packagePair_, ff_core_Array.Array_toList(imports_, 0, 9007199254740991), ff_core_Array.Array_toList(types_, 0, 9007199254740991), ff_core_Array.Array_toList(traits_, 0, 9007199254740991), ff_core_Array.Array_toList(instances_, 0, 9007199254740991), ff_core_Array.Array_toList(extends_, 0, 9007199254740991), ff_core_Array.Array_toList(lets_, 0, 9007199254740991), ff_core_Array.Array_toList(functions_, 0, 9007199254740991))
447
445
  }
448
446
 
449
447
  export function Parser_parseLetDefinition(self_) {
@@ -461,7 +459,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
461
459
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
462
460
  const retult_ = ff_compiler_Syntax.DLet(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), variableType_, value_);
463
461
  if(self_.lspHook_.trackSymbols_) {
464
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 14, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
462
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SLet(false), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
465
463
  };
466
464
  return retult_
467
465
  }
@@ -478,10 +476,7 @@ const targets_ = ff_compiler_Parser.Parser_parseTargets(self_, ff_core_List.List
478
476
  const bestTarget_ = ff_compiler_Parser.findBestTarget_(self_.targetIsNode_, body_, targets_);
479
477
  const result_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, bestTarget_);
480
478
  if(self_.lspHook_.trackSymbols_) {
481
- const kind_ = (member_
482
- ? 6
483
- : 12);
484
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, kind_, signature_.at_, (((_c) => {
479
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, ff_compiler_LspHook.SFunction(member_), signature_.at_, (((_c) => {
485
480
  return ff_compiler_Syntax.Location(_c.file_, _c.line_, (signature_.at_.column_ + ff_core_String.String_size(signature_.name_)))
486
481
  }))(signature_.at_), signature_.at_, ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
487
482
  };
@@ -507,7 +502,7 @@ const lambda_ = ff_compiler_Parser.Parser_parseLambda(self_, parameterCount_, fa
507
502
  do {
508
503
  const _1 = target_;
509
504
  {
510
- if(_1 == "js") {
505
+ if(_1 === "js") {
511
506
  if(ff_core_Equal.notEquals_(targets_.jsSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
512
507
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
513
508
  };
@@ -518,7 +513,7 @@ break
518
513
  }
519
514
  }
520
515
  {
521
- if(_1 == "browser") {
516
+ if(_1 === "browser") {
522
517
  if(ff_core_Equal.notEquals_(targets_.browserSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
523
518
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
524
519
  };
@@ -529,7 +524,7 @@ break
529
524
  }
530
525
  }
531
526
  {
532
- if(_1 == "node") {
527
+ if(_1 === "node") {
533
528
  if(ff_core_Equal.notEquals_(targets_.nodeAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
534
529
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
535
530
  };
@@ -550,8 +545,8 @@ const code_ = processCode_(ff_compiler_Token.Token_raw(ff_compiler_Parser.Parser
550
545
  do {
551
546
  const _1 = ff_core_Pair.Pair(target_, mode_);
552
547
  {
553
- if(_1.first_ == "js") {
554
- if(_1.second_ == "sync") {
548
+ if(_1.first_ === "js") {
549
+ if(_1.second_ === "sync") {
555
550
  if(ff_core_Equal.notEquals_(targets_.jsSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
556
551
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
557
552
  };
@@ -563,8 +558,8 @@ break
563
558
  }
564
559
  }
565
560
  {
566
- if(_1.first_ == "js") {
567
- if(_1.second_ == "async") {
561
+ if(_1.first_ === "js") {
562
+ if(_1.second_ === "async") {
568
563
  if(ff_core_Equal.notEquals_(targets_.jsAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
569
564
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
570
565
  };
@@ -576,8 +571,8 @@ break
576
571
  }
577
572
  }
578
573
  {
579
- if(_1.first_ == "browser") {
580
- if(_1.second_ == "sync") {
574
+ if(_1.first_ === "browser") {
575
+ if(_1.second_ === "sync") {
581
576
  if(ff_core_Equal.notEquals_(targets_.browserSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
582
577
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
583
578
  };
@@ -589,8 +584,8 @@ break
589
584
  }
590
585
  }
591
586
  {
592
- if(_1.first_ == "browser") {
593
- if(_1.second_ == "async") {
587
+ if(_1.first_ === "browser") {
588
+ if(_1.second_ === "async") {
594
589
  if(ff_core_Equal.notEquals_(targets_.browserAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
595
590
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
596
591
  };
@@ -602,8 +597,8 @@ break
602
597
  }
603
598
  }
604
599
  {
605
- if(_1.first_ == "node") {
606
- if(_1.second_ == "sync") {
600
+ if(_1.first_ === "node") {
601
+ if(_1.second_ === "sync") {
607
602
  if(ff_core_Equal.notEquals_(targets_.nodeSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
608
603
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
609
604
  };
@@ -615,8 +610,8 @@ break
615
610
  }
616
611
  }
617
612
  {
618
- if(_1.first_ == "node") {
619
- if(_1.second_ == "async") {
613
+ if(_1.first_ === "node") {
614
+ if(_1.second_ === "async") {
620
615
  if(ff_core_Equal.notEquals_(targets_.nodeAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
621
616
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
622
617
  };
@@ -641,17 +636,17 @@ export function Parser_parseSignature(self_, member_) {
641
636
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
642
637
  const poly_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")
643
638
  ? ff_compiler_Parser.Parser_parseTypeParameters(self_)
644
- : ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty()));
639
+ : ff_compiler_Parser.Poly([], []));
645
640
  const parameters_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")))
646
- ? ff_core_List.Empty()
641
+ ? []
647
642
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, false));
648
643
  const returnType_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())
649
644
  ? (function() {
650
645
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
651
646
  return ff_compiler_Parser.Parser_parseType(self_)
652
647
  })()
653
- : ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "ff:core/Unit.Unit", ff_core_List.Empty()));
654
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(nameToken_), "TemporaryEffect$", ff_core_List.Empty());
648
+ : ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "ff:core/Unit.Unit", []));
649
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(nameToken_), "TemporaryEffect$", []);
655
650
  return ff_compiler_Syntax.Signature(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), member_, poly_.generics_, poly_.constraints_, parameters_, returnType_, temporaryEffect_)
656
651
  }
657
652
 
@@ -663,20 +658,20 @@ const extendToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.
663
658
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
664
659
  const poly_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")
665
660
  ? ff_compiler_Parser.Parser_parseTypeParameters(self_)
666
- : ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty()));
661
+ : ff_compiler_Parser.Poly([], []));
667
662
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
668
663
  const type_ = ff_compiler_Parser.Parser_parseType(self_);
669
664
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
670
- const methods_ = ff_core_Stack.make_();
665
+ const methods_ = ff_core_Array.make_();
671
666
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
672
- ff_core_Stack.Stack_push(methods_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, true));
667
+ ff_core_Array.Array_push(methods_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, true));
673
668
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
674
669
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
675
670
  }
676
671
  };
677
672
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
678
673
  if(self_.lspHook_.trackSymbols_) {
679
- let name_ = ff_compiler_Syntax.Type_show(type_, ff_core_List.Empty());
674
+ let name_ = ff_compiler_Syntax.Type_show(type_, []);
680
675
  ff_core_List.List_each(ff_core_List.List_zip(poly_.generics_, poly_.constraints_), ((_1) => {
681
676
  {
682
677
  const generic_ = _1.first_;
@@ -688,9 +683,9 @@ name_ = ff_core_String.String_replace(name_, ((", " + generic_) + "]"), ((((", "
688
683
  return
689
684
  }
690
685
  }));
691
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, 3, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(extendToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
686
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, ff_compiler_LspHook.SExtend(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(extendToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
692
687
  };
693
- return ff_compiler_Syntax.DExtend(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), poly_.generics_, poly_.constraints_, type_, ff_core_Stack.Stack_toList(methods_, 0, 9007199254740991))
688
+ return ff_compiler_Syntax.DExtend(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), poly_.generics_, poly_.constraints_, type_, ff_core_Array.Array_toList(methods_, 0, 9007199254740991))
694
689
  }
695
690
 
696
691
  export function Parser_parseTraitDefinition(self_) {
@@ -702,26 +697,26 @@ const typeParameterToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_To
702
697
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
703
698
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
704
699
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
705
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
700
+ ? ff_compiler_Parser.Poly([], [])
706
701
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
707
- const constraints_ = ff_core_Stack.make_();
702
+ const constraints_ = ff_core_Array.make_();
708
703
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())) {
709
704
  ff_compiler_Parser.Parser_fail(self_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Trait constraints is not yet implemented");
710
705
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
711
706
  const constraint_ = ff_compiler_Parser.Parser_parseConstraint(self_);
712
- ff_core_Stack.Stack_push(constraints_, (((_c) => {
713
- return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(typeParameterToken_), ff_compiler_Token.Token_raw(typeParameterToken_), ff_core_List.Empty()), constraint_.generics_))
707
+ ff_core_Array.Array_push(constraints_, (((_c) => {
708
+ return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(typeParameterToken_), ff_compiler_Token.Token_raw(typeParameterToken_), []), ...constraint_.generics_])
714
709
  }))(constraint_))
715
710
  };
716
711
  const generatorParameters_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
717
- ? ff_core_List.Empty()
712
+ ? []
718
713
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, false));
719
- const methodGenerators_ = ff_core_Stack.make_();
720
- const methodDefaults_ = ff_core_Stack.make_();
714
+ const methodGenerators_ = ff_core_Array.make_();
715
+ const methodDefaults_ = ff_core_Array.make_();
721
716
  const methodSignatures_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{"))
722
- ? ff_core_List.Empty()
717
+ ? []
723
718
  : (function() {
724
- const signatures_ = ff_core_Stack.make_();
719
+ const signatures_ = ff_core_Array.make_();
725
720
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
726
721
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
727
722
  if(self_.lspHook_.trackSymbols_) {
@@ -730,16 +725,16 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
730
725
  const signatureNameToken_ = ff_compiler_Parser.Parser_current(self_);
731
726
  const signature_ = ff_compiler_Parser.Parser_parseSignature(self_, true);
732
727
  if(self_.lspHook_.trackSymbols_) {
733
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(signatureNameToken_), 12, ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(signatureNameToken_), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
728
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(signatureNameToken_), ff_compiler_LspHook.STraitFunction(), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(signatureNameToken_), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
734
729
  };
735
- ff_core_Stack.Stack_push(signatures_, signature_);
730
+ ff_core_Array.Array_push(signatures_, signature_);
736
731
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")) {
737
732
  const generator_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_ahead(self_), "generate"));
738
733
  const body_ = ff_compiler_Parser.Parser_parseLambda(self_, ff_core_List.List_size(signature_.parameters_), true, false);
739
734
  if(generator_) {
740
- ff_core_Stack.Stack_push(methodGenerators_, ff_core_Pair.Pair(signature_.name_, body_))
735
+ ff_core_Array.Array_push(methodGenerators_, ff_core_Pair.Pair(signature_.name_, body_))
741
736
  } else {
742
- ff_core_Stack.Stack_push(methodDefaults_, ff_core_Pair.Pair(signature_.name_, body_))
737
+ ff_core_Array.Array_push(methodDefaults_, ff_core_Pair.Pair(signature_.name_, body_))
743
738
  }
744
739
  };
745
740
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -747,12 +742,12 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
747
742
  }
748
743
  };
749
744
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
750
- return ff_core_Stack.Stack_toList(signatures_, 0, 9007199254740991)
745
+ return ff_core_Array.Array_toList(signatures_, 0, 9007199254740991)
751
746
  })());
752
747
  if(self_.lspHook_.trackSymbols_) {
753
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 11, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(traitToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
748
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.STrait(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(traitToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
754
749
  };
755
- return ff_compiler_Syntax.DTrait(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), ff_core_List.Link(ff_compiler_Token.Token_raw(typeParameterToken_), poly_.generics_), ff_core_List.List_addAll(ff_core_Stack.Stack_toList(constraints_, 0, 9007199254740991), poly_.constraints_), generatorParameters_, methodSignatures_, ff_core_Stack.Stack_toList(methodDefaults_, 0, 9007199254740991), ff_core_Stack.Stack_toList(methodGenerators_, 0, 9007199254740991))
750
+ return ff_compiler_Syntax.DTrait(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), [ff_compiler_Token.Token_raw(typeParameterToken_), ...poly_.generics_], [...ff_core_Array.Array_toList(constraints_, 0, 9007199254740991), ...poly_.constraints_], generatorParameters_, methodSignatures_, ff_core_Array.Array_toList(methodDefaults_, 0, 9007199254740991), ff_core_Array.Array_toList(methodGenerators_, 0, 9007199254740991))
756
751
  }
757
752
 
758
753
  export function Parser_parseInstanceDefinition(self_) {
@@ -762,18 +757,18 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
762
757
  const instanceToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "instance");
763
758
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
764
759
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
765
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
760
+ ? ff_compiler_Parser.Poly([], [])
766
761
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
767
- const typeArguments_ = ff_core_Stack.make_();
768
- ff_core_Stack.Stack_push(typeArguments_, ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.List_map(poly_.generics_, ((_w1) => {
769
- return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), _w1, ff_core_List.Empty())
762
+ const typeArguments_ = ff_core_Array.make_();
763
+ ff_core_Array.Array_push(typeArguments_, ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.List_map(poly_.generics_, ((_w1) => {
764
+ return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), _w1, [])
770
765
  }))));
771
766
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
772
767
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
773
768
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")) {
774
769
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "[");
775
770
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
776
- ff_core_Stack.Stack_push(typeArguments_, ff_compiler_Parser.Parser_parseType(self_));
771
+ ff_core_Array.Array_push(typeArguments_, ff_compiler_Parser.Parser_parseType(self_));
777
772
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
778
773
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
779
774
  }
@@ -782,24 +777,24 @@ ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]")
782
777
  };
783
778
  const generatorArguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, ff_compiler_Token.Token_at(nameToken_), false).first_;
784
779
  const methods_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{"))
785
- ? ff_core_List.Empty()
780
+ ? []
786
781
  : (function() {
787
- const definitions_ = ff_core_Stack.make_();
782
+ const definitions_ = ff_core_Array.make_();
788
783
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
789
784
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
790
- ff_core_Stack.Stack_push(definitions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false));
785
+ ff_core_Array.Array_push(definitions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false));
791
786
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
792
787
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
793
788
  }
794
789
  };
795
790
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
796
- return ff_core_Stack.Stack_toList(definitions_, 0, 9007199254740991)
791
+ return ff_core_Array.Array_toList(definitions_, 0, 9007199254740991)
797
792
  })());
798
793
  if(self_.lspHook_.trackSymbols_) {
799
794
  const name_ = ((ff_compiler_Token.Token_raw(token_) + ": ") + ff_compiler_Token.Token_raw(nameToken_));
800
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, 19, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(instanceToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
795
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, ff_compiler_LspHook.SInstance(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(instanceToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
801
796
  };
802
- return ff_compiler_Syntax.DInstance(ff_compiler_Token.Token_at(nameToken_), poly_.generics_, poly_.constraints_, ff_compiler_Token.Token_raw(nameToken_), ff_core_Stack.Stack_toList(typeArguments_, 0, 9007199254740991), generatorArguments_, methods_, false)
797
+ return ff_compiler_Syntax.DInstance(ff_compiler_Token.Token_at(nameToken_), poly_.generics_, poly_.constraints_, ff_compiler_Token.Token_raw(nameToken_), ff_core_Array.Array_toList(typeArguments_, 0, 9007199254740991), generatorArguments_, methods_, false)
803
798
  }
804
799
 
805
800
  export function Parser_parseTypeDefinition(self_) {
@@ -808,8 +803,8 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
808
803
  };
809
804
  const newtype_ = ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "newtype");
810
805
  const effectParameter_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "capability")
811
- ? ff_core_List.Link("Q$", ff_core_List.Empty())
812
- : ff_core_List.Empty());
806
+ ? ["Q$"]
807
+ : []);
813
808
  const allowMutable_ = ff_compiler_Token.Token_rawIs2(ff_compiler_Parser.Parser_current(self_), "class", "capability");
814
809
  const kindToken_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "newtype")
815
810
  ? ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "newtype")
@@ -820,26 +815,26 @@ const kindToken_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_curr
820
815
  : ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "capability"));
821
816
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
822
817
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
823
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
818
+ ? ff_compiler_Parser.Poly([], [])
824
819
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
825
820
  if(((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
826
821
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{")
827
822
  };
828
823
  const commonFields_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
829
- ? ff_core_List.Empty()
824
+ ? []
830
825
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, true));
831
826
  const variants_ = ((newtype_ || (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))
832
- ? ff_core_List.Link(ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), ff_core_List.Empty()), ff_core_List.Empty())
827
+ ? [ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), [])]
833
828
  : (function() {
834
829
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
835
- const variantsBuilder_ = ff_core_Stack.make_();
830
+ const variantsBuilder_ = ff_core_Array.make_();
836
831
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
837
832
  if(self_.lspHook_.trackSymbols_) {
838
833
  ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolBegin())
839
834
  };
840
835
  const variantNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
841
836
  const variantFields_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
842
- ? ff_core_List.Empty()
837
+ ? []
843
838
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, true));
844
839
  if(((!allowMutable_) && ff_core_List.List_any(variantFields_, ((_w1) => {
845
840
  return _w1.mutable_
@@ -848,16 +843,16 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
848
843
  return _w1.mutable_
849
844
  }))).at_, "Only classes can have mutable fields"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
850
845
  };
851
- ff_core_Stack.Stack_push(variantsBuilder_, ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_raw(variantNameToken_), variantFields_));
846
+ ff_core_Array.Array_push(variantsBuilder_, ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_raw(variantNameToken_), variantFields_));
852
847
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
853
848
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
854
849
  };
855
850
  if(self_.lspHook_.trackSymbols_) {
856
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(variantNameToken_), 10, ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(variantNameToken_), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
851
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(variantNameToken_), ff_compiler_LspHook.SVariant(), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(variantNameToken_), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
857
852
  }
858
853
  };
859
854
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
860
- return ff_core_Stack.Stack_toList(variantsBuilder_, 0, 9007199254740991)
855
+ return ff_core_Array.Array_toList(variantsBuilder_, 0, 9007199254740991)
861
856
  })());
862
857
  if((newtype_ && (ff_core_List.List_size(commonFields_) !== 1))) {
863
858
  ff_core_Log.show_(commonFields_, ff_core_Show.ff_core_Show_Show$ff_core_List_List(ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Parameter));
@@ -870,19 +865,19 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
870
865
  return _w1.mutable_
871
866
  }))).at_, "Only classes and capabilities can have mutable fields"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
872
867
  };
873
- const generics_ = ff_core_List.List_addAll(effectParameter_, poly_.generics_);
868
+ const generics_ = [...effectParameter_, ...poly_.generics_];
874
869
  const result_ = ff_compiler_Syntax.DType(ff_compiler_Token.Token_at(nameToken_), newtype_, (!allowMutable_), ff_compiler_Token.Token_raw(nameToken_), generics_, poly_.constraints_, commonFields_, variants_);
875
870
  if(self_.lspHook_.trackSymbols_) {
876
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 5, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(kindToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
871
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SType(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(kindToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
877
872
  };
878
873
  return result_
879
874
  }
880
875
 
881
876
  export function Parser_parseImportDefinition(self_, currentPackagePair_) {
882
877
  const importToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "import");
883
- const path_ = ff_core_Stack.make_();
878
+ const path_ = ff_core_Array.make_();
884
879
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
885
- ff_core_Stack.Stack_push(path_, ff_compiler_Parser.Parser_parseDashedName(self_));
880
+ ff_core_Array.Array_push(path_, ff_compiler_Parser.Parser_parseDashedName(self_));
886
881
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDot())
887
882
  };
888
883
  const fileToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
@@ -901,7 +896,7 @@ const packageName_ = ff_compiler_Parser.Parser_parseDashedName(self_);
901
896
  return ff_compiler_Syntax.PackagePair(userName_, packageName_)
902
897
  })()
903
898
  : currentPackagePair_);
904
- return ff_compiler_Syntax.DImport(ff_compiler_Token.Token_at(fileToken_), alias_, packagePair_, ff_core_Stack.Stack_toList(path_, 0, 9007199254740991), ff_compiler_Token.Token_raw(fileToken_))
899
+ return ff_compiler_Syntax.DImport(ff_compiler_Token.Token_at(fileToken_), alias_, packagePair_, ff_core_Array.Array_toList(path_, 0, 9007199254740991), ff_compiler_Token.Token_raw(fileToken_))
905
900
  }
906
901
 
907
902
  export function Parser_parsePackageDefinition(self_) {
@@ -946,7 +941,7 @@ const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(sel
946
941
  do {
947
942
  const _1 = ff_compiler_Token.Token_raw(token_);
948
943
  {
949
- if(_1 == "node") {
944
+ if(_1 === "node") {
950
945
  const _guard1 = targets_.node_;
951
946
  if(_guard1) {
952
947
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(token_), "Duplicate target name"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -955,7 +950,7 @@ break
955
950
  }
956
951
  }
957
952
  {
958
- if(_1 == "node") {
953
+ if(_1 === "node") {
959
954
  targets_ = (((_c) => {
960
955
  return ff_compiler_Syntax.TargetNames(true, _c.browser_)
961
956
  }))(targets_)
@@ -963,7 +958,7 @@ break
963
958
  }
964
959
  }
965
960
  {
966
- if(_1 == "browser") {
961
+ if(_1 === "browser") {
967
962
  const _guard1 = targets_.browser_;
968
963
  if(_guard1) {
969
964
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(token_), "Duplicate target name"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -972,7 +967,7 @@ break
972
967
  }
973
968
  }
974
969
  {
975
- if(_1 == "browser") {
970
+ if(_1 === "browser") {
976
971
  targets_ = (((_c) => {
977
972
  return ff_compiler_Syntax.TargetNames(_c.node_, true)
978
973
  }))(targets_)
@@ -1003,7 +998,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDot());
1003
998
  return ff_core_String.String_grabInt(ff_compiler_Token.Token_raw(ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LInt())))
1004
999
  })()
1005
1000
  : 0);
1006
- return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(majorMinor_), ff_core_String.String_grabInt(ff_core_Array.Array_grab(parts_, 0)), ff_core_String.String_grabInt(ff_core_Array.Array_grab(parts_, 1)), patch_)
1001
+ return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(majorMinor_), ff_core_String.String_grabInt(ff_core_List.List_grab(parts_, 0)), ff_core_String.String_grabInt(ff_core_List.List_grab(parts_, 1)), patch_)
1007
1002
  } else {
1008
1003
  const major_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LInt());
1009
1004
  return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(major_), ff_core_String.String_grabInt(ff_compiler_Token.Token_raw(major_)), 0, 0)
@@ -1046,19 +1041,19 @@ return part_
1046
1041
 
1047
1042
  export function Parser_parseTypeParameters(self_) {
1048
1043
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "[");
1049
- const parameters_ = ff_core_Stack.make_();
1050
- const constraints_ = ff_core_Stack.make_();
1044
+ const parameters_ = ff_core_Array.make_();
1045
+ const constraints_ = ff_core_Array.make_();
1051
1046
  while(((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LSemicolon())))) {
1052
1047
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LBracketLeft())) {
1053
- ff_core_Stack.Stack_push(constraints_, ff_compiler_Parser.Parser_parseConstraint(self_))
1048
+ ff_core_Array.Array_push(constraints_, ff_compiler_Parser.Parser_parseConstraint(self_))
1054
1049
  } else {
1055
1050
  const parameterNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1056
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Token.Token_raw(parameterNameToken_));
1051
+ ff_core_Array.Array_push(parameters_, ff_compiler_Token.Token_raw(parameterNameToken_));
1057
1052
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())) {
1058
1053
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
1059
1054
  const constraint_ = ff_compiler_Parser.Parser_parseConstraint(self_);
1060
- ff_core_Stack.Stack_push(constraints_, (((_c) => {
1061
- return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_raw(parameterNameToken_), ff_core_List.Empty()), constraint_.generics_))
1055
+ ff_core_Array.Array_push(constraints_, (((_c) => {
1056
+ return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_raw(parameterNameToken_), []), ...constraint_.generics_])
1062
1057
  }))(constraint_))
1063
1058
  }
1064
1059
  };
@@ -1067,16 +1062,16 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1067
1062
  }
1068
1063
  };
1069
1064
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
1070
- return ff_compiler_Parser.Poly(ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991), ff_core_Stack.Stack_toList(constraints_, 0, 9007199254740991))
1065
+ return ff_compiler_Parser.Poly(ff_core_Array.Array_toList(parameters_, 0, 9007199254740991), ff_core_Array.Array_toList(constraints_, 0, 9007199254740991))
1071
1066
  }
1072
1067
 
1073
1068
  export function Parser_parseTypeArguments(self_, parenthesis_ = false) {
1074
1069
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), (parenthesis_
1075
1070
  ? "("
1076
1071
  : "["));
1077
- const types_ = ff_core_Stack.make_();
1072
+ const types_ = ff_core_Array.make_();
1078
1073
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1079
- ff_core_Stack.Stack_push(types_, ff_compiler_Parser.Parser_parseType(self_));
1074
+ ff_core_Array.Array_push(types_, ff_compiler_Parser.Parser_parseType(self_));
1080
1075
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1081
1076
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1082
1077
  }
@@ -1084,11 +1079,11 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1084
1079
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), (parenthesis_
1085
1080
  ? ")"
1086
1081
  : "]"));
1087
- return ff_core_Stack.Stack_toList(types_, 0, 9007199254740991)
1082
+ return ff_core_Array.Array_toList(types_, 0, 9007199254740991)
1088
1083
  }
1089
1084
 
1090
1085
  export function Parser_parseFunctionParameters(self_, allowMutable_ = false) {
1091
- const parameters_ = ff_core_Stack.make_();
1086
+ const parameters_ = ff_core_Array.make_();
1092
1087
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
1093
1088
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1094
1089
  const lspTrackSymbols_ = (self_.lspHook_.trackSymbols_ && allowMutable_);
@@ -1102,8 +1097,8 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LKeyword())
1102
1097
  };
1103
1098
  const parameterNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
1104
1099
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())))) {
1105
- const t_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), "ff:core/Nothing.Nothing", ff_core_List.Empty());
1106
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), t_, ff_core_Option.None()));
1100
+ const t_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), "ff:core/Nothing.Nothing", []);
1101
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), t_, ff_core_Option.None()));
1107
1102
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1108
1103
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1109
1104
  }
@@ -1116,9 +1111,9 @@ const default_ = ((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
1116
1111
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
1117
1112
  return ff_core_Option.Some(ff_compiler_Parser.Parser_parseTerm(self_))
1118
1113
  })());
1119
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), parameterType_, default_));
1114
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), parameterType_, default_));
1120
1115
  if(lspTrackSymbols_) {
1121
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(parameterNameToken_), 7, ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_end(parameterNameToken_), ff_compiler_Token.Token_at(lspFirst_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
1116
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(parameterNameToken_), ff_compiler_LspHook.SParameter(), ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_end(parameterNameToken_), ff_compiler_Token.Token_at(lspFirst_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
1122
1117
  };
1123
1118
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1124
1119
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
@@ -1126,11 +1121,11 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1126
1121
  }
1127
1122
  };
1128
1123
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
1129
- return ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991)
1124
+ return ff_core_Array.Array_toList(parameters_, 0, 9007199254740991)
1130
1125
  }
1131
1126
 
1132
1127
  export function Parser_parseFunctionArguments(self_, callAt_, trailing_) {
1133
- const arguments_ = ff_core_Stack.make_();
1128
+ const arguments_ = ff_core_Array.make_();
1134
1129
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
1135
1130
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
1136
1131
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -1145,13 +1140,13 @@ return ff_core_Option.Some(token_)
1145
1140
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
1146
1141
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1147
1142
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1148
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
1143
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
1149
1144
  return ff_compiler_Token.Token_raw(_w1)
1150
1145
  }))));
1151
1146
  self_.lspEmittedArgumentHook_ = true
1152
1147
  }
1153
1148
  };
1154
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(ff_compiler_Token.Token_at(argumentToken_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
1149
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(ff_compiler_Token.Token_at(argumentToken_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
1155
1150
  return ff_compiler_Token.Token_raw(_w1)
1156
1151
  })), value_));
1157
1152
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -1160,7 +1155,7 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1160
1155
  };
1161
1156
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1162
1157
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1163
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
1158
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
1164
1159
  self_.lspEmittedArgumentHook_ = true
1165
1160
  }
1166
1161
  };
@@ -1171,30 +1166,30 @@ if(trailing_) {
1171
1166
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower(), ff_compiler_Token.LUpper(), ff_compiler_Token.LString()) || ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LInt(), ff_compiler_Token.LChar(), ff_compiler_Token.LFloat())))) {
1172
1167
  lastWasCurly_ = true;
1173
1168
  const term_ = ff_compiler_Parser.Parser_parseTerm(self_);
1174
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(term_.at_, "TemporaryEffect$", ff_core_List.Empty());
1175
- const cases_ = ff_core_List.Link(ff_compiler_Syntax.MatchCase(term_.at_, ff_core_List.Empty(), ff_core_List.Empty(), term_), ff_core_List.Empty());
1169
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(term_.at_, "TemporaryEffect$", []);
1170
+ const cases_ = [ff_compiler_Syntax.MatchCase(term_.at_, [], [], term_)];
1176
1171
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1177
1172
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1178
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
1173
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
1179
1174
  self_.lspEmittedArgumentHook_ = true
1180
1175
  }
1181
1176
  };
1182
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(term_.at_, ff_compiler_Syntax.Lambda(term_.at_, temporaryEffect_, cases_))))
1177
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(term_.at_, ff_compiler_Syntax.Lambda(term_.at_, temporaryEffect_, cases_))))
1183
1178
  } else {
1184
1179
  while((ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{") || ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon()))) {
1185
1180
  lastWasCurly_ = ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{");
1186
1181
  const lambda_ = ff_compiler_Parser.Parser_parseLambda(self_, 0, false, true);
1187
1182
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1188
1183
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1189
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
1184
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
1190
1185
  self_.lspEmittedArgumentHook_ = true
1191
1186
  }
1192
1187
  };
1193
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(lambda_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(lambda_.at_, lambda_)))
1188
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(lambda_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(lambda_.at_, lambda_)))
1194
1189
  }
1195
1190
  }
1196
1191
  };
1197
- return ff_core_Pair.Pair(ff_core_Stack.Stack_toList(arguments_, 0, 9007199254740991), lastWasCurly_)
1192
+ return ff_core_Pair.Pair(ff_core_Array.Array_toList(arguments_, 0, 9007199254740991), lastWasCurly_)
1198
1193
  }
1199
1194
 
1200
1195
  export function Parser_parseLambda(self_, defaultParameterCount_ = 0, ignoreGenerateKeyword_ = false, allowColon_ = false) {
@@ -1207,21 +1202,21 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LKeyword())
1207
1202
  };
1208
1203
  const result_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe())
1209
1204
  ? (function() {
1210
- const cases_ = ff_core_Stack.make_();
1205
+ const cases_ = ff_core_Array.make_();
1211
1206
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe())) {
1212
- ff_core_Stack.Stack_push(cases_, ff_compiler_Parser.Parser_parseCase(self_))
1207
+ ff_core_Array.Array_push(cases_, ff_compiler_Parser.Parser_parseCase(self_))
1213
1208
  };
1214
- return ff_core_Stack.Stack_toList(cases_, 0, 9007199254740991)
1209
+ return ff_core_Array.Array_toList(cases_, 0, 9007199254740991)
1215
1210
  })()
1216
1211
  : (ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower(), ff_compiler_Token.LWildcard()) && ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LComma(), ff_compiler_Token.LArrowThick()))
1217
1212
  ? (function() {
1218
- const parameters_ = ff_core_Stack.make_();
1213
+ const parameters_ = ff_core_Array.make_();
1219
1214
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick()))) {
1220
1215
  const isVariable_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower());
1221
1216
  const parameterToken_ = (isVariable_
1222
1217
  ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower())
1223
1218
  : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LWildcard()));
1224
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(parameterToken_), (isVariable_
1219
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(parameterToken_), (isVariable_
1225
1220
  ? ff_core_Option.Some(ff_compiler_Token.Token_raw(parameterToken_))
1226
1221
  : ff_core_Option.None())));
1227
1222
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick()))) {
@@ -1230,7 +1225,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1230
1225
  };
1231
1226
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick());
1232
1227
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
1233
- return ff_core_List.Link(ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991), ff_core_List.Empty(), term_), ff_core_List.Empty())
1228
+ return [ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_toList(parameters_, 0, 9007199254740991), [], term_)]
1234
1229
  })()
1235
1230
  : (function() {
1236
1231
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
@@ -1243,40 +1238,40 @@ return ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(token_), ff_core_
1243
1238
  : ff_core_List.List_map(ff_core_List.range_(defaultParameterCount_), ((i_) => {
1244
1239
  return ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(token_), ff_core_Option.None())
1245
1240
  })));
1246
- return ff_core_List.Link(ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), arguments_, ff_core_List.Empty(), e_), ff_core_List.Empty())
1241
+ return [ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), arguments_, [], e_)]
1247
1242
  })());
1248
1243
  if((!colon_)) {
1249
1244
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}")
1250
1245
  };
1251
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), "TemporaryEffect$", ff_core_List.Empty());
1246
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), "TemporaryEffect$", []);
1252
1247
  return ff_compiler_Syntax.Lambda(ff_compiler_Token.Token_at(token_), temporaryEffect_, result_)
1253
1248
  }
1254
1249
 
1255
1250
  export function Parser_parseCase(self_) {
1256
1251
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LPipe());
1257
- const patterns_ = ff_core_Stack.make_();
1252
+ const patterns_ = ff_core_Array.make_();
1258
1253
  while(((!ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick(), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
1259
- ff_core_Stack.Stack_push(patterns_, ff_compiler_Parser.Parser_parsePattern(self_));
1254
+ ff_core_Array.Array_push(patterns_, ff_compiler_Parser.Parser_parsePattern(self_));
1260
1255
  if(((!ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick(), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
1261
1256
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1262
1257
  }
1263
1258
  };
1264
- const guards_ = ff_core_Stack.make_();
1259
+ const guards_ = ff_core_Array.make_();
1265
1260
  while(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")) {
1266
- ff_core_Stack.Stack_push(guards_, ff_compiler_Parser.Parser_parseCaseGuard(self_))
1261
+ ff_core_Array.Array_push(guards_, ff_compiler_Parser.Parser_parseCaseGuard(self_))
1267
1262
  };
1268
1263
  if(((!ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) || (!ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())))) {
1269
1264
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick())
1270
1265
  };
1271
1266
  const body_ = ff_compiler_Parser.Parser_parseStatements(self_);
1272
- return ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_toList(patterns_, 0, 9007199254740991), ff_core_Stack.Stack_toList(guards_, 0, 9007199254740991), body_)
1267
+ return ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_toList(patterns_, 0, 9007199254740991), ff_core_Array.Array_toList(guards_, 0, 9007199254740991), body_)
1273
1268
  }
1274
1269
 
1275
1270
  export function Parser_parseCaseGuard(self_) {
1276
1271
  const guardToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LBracketLeft());
1277
1272
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
1278
1273
  const p_ = ((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe()))
1279
- ? ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(guardToken_), "True", ff_core_List.Empty())
1274
+ ? ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(guardToken_), "True", [])
1280
1275
  : (function() {
1281
1276
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LPipe());
1282
1277
  return ff_compiler_Parser.Parser_parsePattern(self_)
@@ -1322,29 +1317,29 @@ return ff_compiler_Syntax.PChar(ff_compiler_Token.Token_at(token_), ff_compiler_
1322
1317
  : (function() {
1323
1318
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1324
1319
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
1325
- const patterns_ = ff_core_Stack.make_();
1320
+ const patterns_ = ff_core_Array.make_();
1326
1321
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
1327
1322
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1328
1323
  const pattern_ = ff_compiler_Parser.Parser_parsePattern(self_);
1329
1324
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1330
1325
  if(ff_compiler_LspHook.strictlyBetween_(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1331
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_size(patterns_), ff_core_Option.None()));
1326
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_size(patterns_), ff_core_Option.None()));
1332
1327
  self_.lspEmittedArgumentHook_ = true
1333
1328
  }
1334
1329
  };
1335
- ff_core_Stack.Stack_push(patterns_, pattern_);
1330
+ ff_core_Array.Array_push(patterns_, pattern_);
1336
1331
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1337
1332
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
1338
1333
  }
1339
1334
  };
1340
1335
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1341
1336
  if(ff_compiler_LspHook.strictlyBetween_(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1342
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_size(patterns_), ff_core_Option.None()));
1337
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_size(patterns_), ff_core_Option.None()));
1343
1338
  self_.lspEmittedArgumentHook_ = true
1344
1339
  }
1345
1340
  };
1346
1341
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
1347
- return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_Stack.Stack_toList(patterns_, 0, 9007199254740991))
1342
+ return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_Array.Array_toList(patterns_, 0, 9007199254740991))
1348
1343
  } else {
1349
1344
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
1350
1345
  const asToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
@@ -1353,7 +1348,7 @@ return ff_compiler_Syntax.PVariantAs(ff_compiler_Token.Token_at(token_), ff_comp
1353
1348
  const wildcardToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LWildcard());
1354
1349
  return ff_compiler_Syntax.PVariantAs(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_compiler_Token.Token_at(wildcardToken_), ff_core_Option.None())
1355
1350
  } else {
1356
- return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.Empty())
1351
+ return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), [])
1357
1352
  }
1358
1353
  }
1359
1354
  })());
@@ -1371,7 +1366,7 @@ const leftTypes_ = (((ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_cu
1371
1366
  ? (function() {
1372
1367
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
1373
1368
  const pair_ = ff_core_List.List_unzip(ff_compiler_Parser.Parser_parseRecordType(self_));
1374
- return ff_core_List.Link(ff_compiler_Syntax.TConstructor(at_, ("Record$" + ff_core_List.List_join(pair_.first_, "$")), pair_.second_), ff_core_List.Empty())
1369
+ return [ff_compiler_Syntax.TConstructor(at_, ("Record$" + ff_core_List.List_join(pair_.first_, "$")), pair_.second_)]
1375
1370
  })()
1376
1371
  : ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")
1377
1372
  ? ff_compiler_Parser.Parser_parseTypeArguments(self_, true)
@@ -1381,16 +1376,16 @@ const namespace_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
1381
1376
  : "");
1382
1377
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1383
1378
  const arguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
1384
- ? ff_core_List.Empty()
1379
+ ? []
1385
1380
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
1386
- return ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_), ff_core_List.Empty())
1381
+ return [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_)]
1387
1382
  })());
1388
1383
  if(((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick())) && (ff_core_List.List_size(leftTypes_) === 1))) {
1389
1384
  return ff_core_List.List_grabFirst(leftTypes_)
1390
1385
  } else {
1391
1386
  const arrowToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick());
1392
1387
  const rightType_ = ff_compiler_Parser.Parser_parseType(self_);
1393
- return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(arrowToken_), ("Function$" + ff_core_List.List_size(leftTypes_)), ff_core_List.List_addAll(leftTypes_, ff_core_List.Link(rightType_, ff_core_List.Empty())))
1388
+ return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(arrowToken_), ("Function$" + ff_core_List.List_size(leftTypes_)), [...leftTypes_, rightType_])
1394
1389
  }
1395
1390
  }
1396
1391
 
@@ -1400,14 +1395,14 @@ const namespace_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
1400
1395
  : "");
1401
1396
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1402
1397
  const arguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
1403
- ? ff_core_List.Empty()
1398
+ ? []
1404
1399
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
1405
1400
  return ff_compiler_Syntax.Constraint(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_)
1406
1401
  }
1407
1402
 
1408
1403
  export function Parser_parseStatements(self_) {
1409
1404
  if(ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight(), ff_compiler_Token.LPipe())) {
1410
- return ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Unit", ff_core_List.Empty(), ff_core_Option.None())
1405
+ return ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Unit", [], ff_core_Option.None())
1411
1406
  } else {
1412
1407
  let result_ = ff_compiler_Parser.Parser_parseStatement(self_);
1413
1408
  while(ff_compiler_Parser.Parser_currentIsSeparator(self_, ff_compiler_Token.LSemicolon())) {
@@ -1490,30 +1485,27 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
1490
1485
  return ff_compiler_Parser.Parser_parseType(self_)
1491
1486
  })());
1492
1487
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LAssign())))) {
1493
- const unit_ = ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", ff_core_List.Empty(), ff_core_Option.None());
1488
+ const unit_ = ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", [], ff_core_Option.None());
1494
1489
  return ff_compiler_Syntax.ELet(ff_compiler_Token.Token_at(nameToken_), mutable_, ff_compiler_Token.Token_raw(nameToken_), valueType_, unit_, unit_)
1495
1490
  } else {
1496
1491
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
1497
1492
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
1498
1493
  if(self_.lspHook_.trackSymbols_) {
1499
- const kind_ = (mutable_
1500
- ? 13
1501
- : 14);
1502
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), kind_, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(mutableToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
1494
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SLet(mutable_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(mutableToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
1503
1495
  };
1504
1496
  const body_ = (ff_compiler_Parser.Parser_currentIsSeparator(self_, ff_compiler_Token.LSemicolon())
1505
1497
  ? (function() {
1506
1498
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon());
1507
1499
  return ff_compiler_Parser.Parser_parseStatements(self_)
1508
1500
  })()
1509
- : ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", ff_core_List.Empty(), ff_core_Option.None()));
1501
+ : ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", [], ff_core_Option.None()));
1510
1502
  return ff_compiler_Syntax.ELet(ff_compiler_Token.Token_at(nameToken_), mutable_, ff_compiler_Token.Token_raw(nameToken_), valueType_, value_, body_)
1511
1503
  }
1512
1504
  }
1513
1505
 
1514
1506
  export function Parser_parseFunctions(self_) {
1515
1507
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
1516
- const functions_ = ff_core_Stack.make_();
1508
+ const functions_ = ff_core_Array.make_();
1517
1509
  while(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "function")) {
1518
1510
  if(self_.lspHook_.trackSymbols_) {
1519
1511
  ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolBegin())
@@ -1522,13 +1514,13 @@ const functionAt_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip
1522
1514
  const signature_ = ff_compiler_Parser.Parser_parseSignature(self_, false);
1523
1515
  const body_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))
1524
1516
  ? (function() {
1525
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(functionAt_, "TemporaryEffect$", ff_core_List.Empty());
1526
- return ff_compiler_Syntax.Lambda(functionAt_, temporaryEffect_, ff_core_List.Empty())
1517
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(functionAt_, "TemporaryEffect$", []);
1518
+ return ff_compiler_Syntax.Lambda(functionAt_, temporaryEffect_, [])
1527
1519
  })()
1528
1520
  : ff_compiler_Parser.Parser_parseLambda(self_, ff_core_List.List_size(signature_.parameters_), false, false));
1529
- ff_core_Stack.Stack_push(functions_, ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(body_)));
1521
+ ff_core_Array.Array_push(functions_, ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(body_)));
1530
1522
  if(self_.lspHook_.trackSymbols_) {
1531
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, 12, signature_.at_, (((_c) => {
1523
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, ff_compiler_LspHook.SFunction(false), signature_.at_, (((_c) => {
1532
1524
  return ff_compiler_Syntax.Location(_c.file_, _c.line_, (signature_.at_.column_ + ff_core_String.String_size(signature_.name_)))
1533
1525
  }))(signature_.at_), functionAt_, ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
1534
1526
  };
@@ -1539,7 +1531,7 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
1539
1531
  }
1540
1532
  };
1541
1533
  const body_ = ff_compiler_Parser.Parser_parseStatements(self_);
1542
- return ff_compiler_Syntax.EFunctions(at_, ff_core_Stack.Stack_toList(functions_, 0, 9007199254740991), body_)
1534
+ return ff_compiler_Syntax.EFunctions(at_, ff_core_Array.Array_toList(functions_, 0, 9007199254740991), body_)
1543
1535
  }
1544
1536
 
1545
1537
  export function Parser_parseTerm(self_) {
@@ -1547,10 +1539,10 @@ return ff_compiler_Parser.Parser_parseBinary(self_, 0)
1547
1539
  }
1548
1540
 
1549
1541
  export function Parser_parseBinary(self_, level_) {
1550
- if((level_ >= ff_core_Array.Array_size(ff_compiler_Parser.binaryOperators_))) {
1542
+ if((level_ >= ff_core_List.List_size(ff_compiler_Parser.binaryOperators_))) {
1551
1543
  return ff_compiler_Parser.Parser_parseUnary(self_)
1552
1544
  } else {
1553
- const operators_ = ff_core_Array.Array_grab(ff_compiler_Parser.binaryOperators_, level_);
1545
+ const operators_ = ff_core_List.List_grab(ff_compiler_Parser.binaryOperators_, level_);
1554
1546
  let result_ = ff_compiler_Parser.Parser_parseBinary(self_, (level_ + 1));
1555
1547
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LOperator())) {
1556
1548
  while(ff_core_List.List_any(operators_, ((value_) => {
@@ -1558,41 +1550,41 @@ return ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), v
1558
1550
  }))) {
1559
1551
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator());
1560
1552
  const right_ = ff_compiler_Parser.Parser_parseBinary(self_, (level_ + 1));
1561
- const arguments_ = ff_core_List.Link(ff_compiler_Syntax.Argument(result_.at_, ff_core_Option.None(), result_), ff_core_List.Link(ff_compiler_Syntax.Argument(right_.at_, ff_core_Option.None(), right_), ff_core_List.Empty()));
1553
+ const arguments_ = [ff_compiler_Syntax.Argument(result_.at_, ff_core_Option.None(), result_), ff_compiler_Syntax.Argument(right_.at_, ff_core_Option.None(), right_)];
1562
1554
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, ff_compiler_Token.Token_at(token_));
1563
1555
  const target_ = (((_1) => {
1564
1556
  {
1565
- if(_1 == "==") {
1557
+ if(_1 === "==") {
1566
1558
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Equal.equals"), false)
1567
1559
  return
1568
1560
  }
1569
1561
  }
1570
1562
  {
1571
- if(_1 == "!=") {
1563
+ if(_1 === "!=") {
1572
1564
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Equal.notEquals"), false)
1573
1565
  return
1574
1566
  }
1575
1567
  }
1576
1568
  {
1577
- if(_1 == "<") {
1569
+ if(_1 === "<") {
1578
1570
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.before"), false)
1579
1571
  return
1580
1572
  }
1581
1573
  }
1582
1574
  {
1583
- if(_1 == "<=") {
1575
+ if(_1 === "<=") {
1584
1576
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.notAfter"), false)
1585
1577
  return
1586
1578
  }
1587
1579
  }
1588
1580
  {
1589
- if(_1 == ">") {
1581
+ if(_1 === ">") {
1590
1582
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.after"), false)
1591
1583
  return
1592
1584
  }
1593
1585
  }
1594
1586
  {
1595
- if(_1 == ">=") {
1587
+ if(_1 === ">=") {
1596
1588
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.notBefore"), false)
1597
1589
  return
1598
1590
  }
@@ -1603,7 +1595,7 @@ return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_T
1603
1595
  return
1604
1596
  }
1605
1597
  }))(ff_compiler_Token.Token_raw(token_));
1606
- result_ = ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, ff_core_List.Empty(), arguments_, ff_core_List.Empty())
1598
+ result_ = ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, [], arguments_, [])
1607
1599
  }
1608
1600
  };
1609
1601
  return result_
@@ -1616,7 +1608,7 @@ const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator
1616
1608
  const term_ = ff_compiler_Parser.Parser_parseUnary(self_);
1617
1609
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, ff_compiler_Token.Token_at(token_));
1618
1610
  const target_ = ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_)), false);
1619
- return ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, ff_core_List.Empty(), ff_core_List.Link(ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), term_), ff_core_List.Empty()), ff_core_List.Empty())
1611
+ return ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, [], [ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), term_)], [])
1620
1612
  } else {
1621
1613
  return ff_compiler_Parser.Parser_parseFieldsAndCalls(self_)
1622
1614
  }
@@ -1646,12 +1638,12 @@ result_ = ff_compiler_Syntax.EField(ff_compiler_Token.Token_at(token_), false, r
1646
1638
  } else {
1647
1639
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
1648
1640
  const typeArguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
1649
- ? ff_core_List.Empty()
1641
+ ? []
1650
1642
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
1651
1643
  const arguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, result_.at_, true);
1652
1644
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_);
1653
1645
  const target_ = ff_compiler_Syntax.DynamicCall(result_, tailCall_);
1654
- result_ = ff_compiler_Syntax.ECall(result_.at_, target_, effect_, typeArguments_, arguments_.first_, ff_core_List.Empty());
1646
+ result_ = ff_compiler_Syntax.ECall(result_.at_, target_, effect_, typeArguments_, arguments_.first_, []);
1655
1647
  if((arguments_.second_ && ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower()))) {
1656
1648
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
1657
1649
  result_ = ff_compiler_Syntax.EField(ff_compiler_Token.Token_at(token_), false, result_, ff_compiler_Token.Token_raw(token_))
@@ -1723,7 +1715,7 @@ export function Parser_parseVariant(self_, prefix_) {
1723
1715
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1724
1716
  const name_ = (prefix_ + ff_compiler_Token.Token_raw(token_));
1725
1717
  const typeArguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
1726
- ? ff_core_List.Empty()
1718
+ ? []
1727
1719
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
1728
1720
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "?")) {
1729
1721
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator());
@@ -1747,13 +1739,13 @@ const prefix_ = (namespace_ + extraNamespace_);
1747
1739
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
1748
1740
  const name_ = (prefix_ + ff_compiler_Token.Token_raw(token_));
1749
1741
  const fields_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")))
1750
- ? ff_core_List.Empty()
1742
+ ? []
1751
1743
  : ff_compiler_Parser.Parser_parseRecord(self_, ff_core_Option.Some(ff_compiler_Token.Token_at(token_))));
1752
1744
  return ff_compiler_Syntax.ECopy(ff_compiler_Token.Token_at(token_), name_, record_, fields_)
1753
1745
  }
1754
1746
 
1755
1747
  export function Parser_parseRecord(self_, copyAt_) {
1756
- const fields_ = ff_core_Stack.make_();
1748
+ const fields_ = ff_core_Array.make_();
1757
1749
  const startBracketAt_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "("));
1758
1750
  const startAt_ = ff_core_Option.Option_else(copyAt_, (() => {
1759
1751
  return startBracketAt_
@@ -1768,57 +1760,57 @@ return ff_compiler_Syntax.Field(ff_compiler_Token.Token_at(fieldToken_), ff_comp
1768
1760
  : ff_compiler_Syntax.Field(ff_compiler_Token.Token_at(fieldToken_), ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(fieldToken_), ff_compiler_Token.Token_raw(fieldToken_))));
1769
1761
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1770
1762
  if(ff_compiler_LspHook.strictlyBetween_(startAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1771
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Stack.Stack_size(fields_), ff_core_Option.Option_filter(ff_core_Option.Some(field_.name_), ((_w1) => {
1763
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Array.Array_size(fields_), ff_core_Option.Option_filter(ff_core_Option.Some(field_.name_), ((_w1) => {
1772
1764
  return (_w1 !== "")
1773
1765
  }))));
1774
1766
  self_.lspEmittedArgumentHook_ = true
1775
1767
  }
1776
1768
  };
1777
- ff_core_Stack.Stack_push(fields_, field_);
1769
+ ff_core_Array.Array_push(fields_, field_);
1778
1770
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1779
1771
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1780
1772
  }
1781
1773
  };
1782
1774
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
1783
1775
  if(ff_compiler_LspHook.strictlyBetween_(startAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
1784
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Stack.Stack_size(fields_), ff_core_Option.None()));
1776
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Array.Array_size(fields_), ff_core_Option.None()));
1785
1777
  self_.lspEmittedArgumentHook_ = true
1786
1778
  }
1787
1779
  };
1788
1780
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
1789
- return ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991)
1781
+ return ff_core_Array.Array_toList(fields_, 0, 9007199254740991)
1790
1782
  }
1791
1783
 
1792
1784
  export function Parser_parseRecordType(self_) {
1793
- const fields_ = ff_core_Stack.make_();
1785
+ const fields_ = ff_core_Array.make_();
1794
1786
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
1795
1787
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1796
1788
  const fieldToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
1797
1789
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LColon());
1798
- ff_core_Stack.Stack_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parseType(self_)));
1790
+ ff_core_Array.Array_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parseType(self_)));
1799
1791
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1800
1792
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1801
1793
  }
1802
1794
  };
1803
1795
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
1804
- return ff_core_List.List_sortBy(ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991), ((_w1) => {
1796
+ return ff_core_List.List_sortBy(ff_core_Array.Array_toList(fields_, 0, 9007199254740991), ((_w1) => {
1805
1797
  return _w1.first_
1806
1798
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1807
1799
  }
1808
1800
 
1809
1801
  export function Parser_parseRecordPattern(self_) {
1810
- const fields_ = ff_core_Stack.make_();
1802
+ const fields_ = ff_core_Array.make_();
1811
1803
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
1812
1804
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1813
1805
  const fieldToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
1814
1806
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
1815
- ff_core_Stack.Stack_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parsePattern(self_)));
1807
+ ff_core_Array.Array_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parsePattern(self_)));
1816
1808
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
1817
1809
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1818
1810
  }
1819
1811
  };
1820
1812
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
1821
- return ff_core_List.List_sortBy(ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991), ((_w1) => {
1813
+ return ff_core_List.List_sortBy(ff_core_Array.Array_toList(fields_, 0, 9007199254740991), ((_w1) => {
1822
1814
  return _w1.first_
1823
1815
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1824
1816
  }
@@ -1829,26 +1821,26 @@ function convertListPattern_(at_, items_) {
1829
1821
  const at_a = at_;
1830
1822
  const items_a = items_;
1831
1823
  {
1832
- if(items_a.Empty) {
1833
- return ff_compiler_Syntax.PVariant(at_, "ff:core/List.Empty", ff_core_List.Empty())
1824
+ if(items_a.length === 0) {
1825
+ return ff_compiler_Syntax.PVariant(at_, "List$Empty", [])
1834
1826
  return
1835
1827
  }
1836
1828
  }
1837
1829
  {
1838
- if(items_a.Link) {
1839
- const p_ = items_a.head_.first_;
1840
- if(!items_a.head_.second_) {
1841
- const ps_ = items_a.tail_;
1842
- return ff_compiler_Syntax.PVariant(at_, "ff:core/List.Link", ff_core_List.Link(p_, ff_core_List.Link(convertListPattern_(at_, ps_), ff_core_List.Empty())))
1830
+ if(items_a.length > 0) {
1831
+ const p_ = items_a[0].first_;
1832
+ if(!items_a[0].second_) {
1833
+ const ps_ = items_a.slice(1);
1834
+ return ff_compiler_Syntax.PVariant(at_, "List$Link", [p_, convertListPattern_(at_, ps_)])
1843
1835
  return
1844
1836
  }
1845
1837
  }
1846
1838
  }
1847
1839
  {
1848
- if(items_a.Link) {
1849
- const p_ = items_a.head_.first_;
1850
- if(items_a.head_.second_) {
1851
- if(items_a.tail_.Empty) {
1840
+ if(items_a.length > 0) {
1841
+ const p_ = items_a[0].first_;
1842
+ if(items_a[0].second_) {
1843
+ if(items_a.length === 1) {
1852
1844
  return p_
1853
1845
  return
1854
1846
  }
@@ -1856,9 +1848,9 @@ return
1856
1848
  }
1857
1849
  }
1858
1850
  {
1859
- if(items_a.Link) {
1860
- const p_ = items_a.head_.first_;
1861
- if(items_a.head_.second_) {
1851
+ if(items_a.length > 0) {
1852
+ const p_ = items_a[0].first_;
1853
+ if(items_a[0].second_) {
1862
1854
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(p_.at_, "Invalid pattern: ... is only allowed for the last element in a list"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1863
1855
  return
1864
1856
  }
@@ -1866,7 +1858,7 @@ return
1866
1858
  }
1867
1859
  }
1868
1860
  }
1869
- const items_ = ff_core_Stack.make_();
1861
+ const items_ = ff_core_Array.make_();
1870
1862
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "["));
1871
1863
  while((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
1872
1864
  const spread_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LDotDotDot());
@@ -1876,30 +1868,30 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDotDotDot())
1876
1868
  const pattern_ = ((spread_ && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))
1877
1869
  ? ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), ff_core_Option.None())
1878
1870
  : ff_compiler_Parser.Parser_parsePattern(self_));
1879
- ff_core_Stack.Stack_push(items_, ff_core_Pair.Pair(pattern_, spread_));
1871
+ ff_core_Array.Array_push(items_, ff_core_Pair.Pair(pattern_, spread_));
1880
1872
  if((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
1881
1873
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1882
1874
  }
1883
1875
  };
1884
1876
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
1885
- return convertListPattern_(at_, ff_core_Stack.Stack_toList(items_, 0, 9007199254740991))
1877
+ return convertListPattern_(at_, ff_core_Array.Array_toList(items_, 0, 9007199254740991))
1886
1878
  }
1887
1879
 
1888
1880
  export function Parser_parseList(self_) {
1889
- const items_ = ff_core_Stack.make_();
1881
+ const items_ = ff_core_Array.make_();
1890
1882
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "["));
1891
1883
  while((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
1892
1884
  const spread_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LDotDotDot());
1893
1885
  if(spread_) {
1894
1886
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDotDotDot())
1895
1887
  };
1896
- ff_core_Stack.Stack_push(items_, ff_core_Pair.Pair(ff_compiler_Parser.Parser_parseTerm(self_), spread_));
1888
+ ff_core_Array.Array_push(items_, ff_core_Pair.Pair(ff_compiler_Parser.Parser_parseTerm(self_), spread_));
1897
1889
  if((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
1898
1890
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
1899
1891
  }
1900
1892
  };
1901
1893
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
1902
- return ff_compiler_Syntax.EList(at_, ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_), ff_core_Stack.Stack_toList(items_, 0, 9007199254740991))
1894
+ return ff_compiler_Syntax.EList(at_, ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_), ff_core_Array.Array_toList(items_, 0, 9007199254740991))
1903
1895
  }
1904
1896
 
1905
1897
  export async function Parser_fail$(self_, at_, message_, $task) {
@@ -1910,8 +1902,8 @@ export async function Parser_behind$(self_, $task) {
1910
1902
  if((self_.offset_ === 0)) {
1911
1903
  return ff_compiler_Parser.Parser_current(self_)
1912
1904
  } else {
1913
- if(((self_.offset_ - 1) < ff_core_Array.Array_size(self_.tokens_))) {
1914
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ - 1))
1905
+ if(((self_.offset_ - 1) < ff_core_List.List_size(self_.tokens_))) {
1906
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ - 1))
1915
1907
  } else {
1916
1908
  return self_.end_
1917
1909
  }
@@ -1919,24 +1911,24 @@ return self_.end_
1919
1911
  }
1920
1912
 
1921
1913
  export async function Parser_current$(self_, $task) {
1922
- if((self_.offset_ < ff_core_Array.Array_size(self_.tokens_))) {
1923
- return ff_core_Array.Array_grab(self_.tokens_, self_.offset_)
1914
+ if((self_.offset_ < ff_core_List.List_size(self_.tokens_))) {
1915
+ return ff_core_List.List_grab(self_.tokens_, self_.offset_)
1924
1916
  } else {
1925
1917
  return self_.end_
1926
1918
  }
1927
1919
  }
1928
1920
 
1929
1921
  export async function Parser_ahead$(self_, $task) {
1930
- if(((self_.offset_ + 1) < ff_core_Array.Array_size(self_.tokens_))) {
1931
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ + 1))
1922
+ if(((self_.offset_ + 1) < ff_core_List.List_size(self_.tokens_))) {
1923
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ + 1))
1932
1924
  } else {
1933
1925
  return self_.end_
1934
1926
  }
1935
1927
  }
1936
1928
 
1937
1929
  export async function Parser_aheadAhead$(self_, $task) {
1938
- if(((self_.offset_ + 2) < ff_core_Array.Array_size(self_.tokens_))) {
1939
- return ff_core_Array.Array_grab(self_.tokens_, (self_.offset_ + 2))
1930
+ if(((self_.offset_ + 2) < ff_core_List.List_size(self_.tokens_))) {
1931
+ return ff_core_List.List_grab(self_.tokens_, (self_.offset_ + 2))
1940
1932
  } else {
1941
1933
  return self_.end_
1942
1934
  }
@@ -2023,46 +2015,46 @@ return p_
2023
2015
  if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "package"))) {
2024
2016
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Duplicate package definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2025
2017
  };
2026
- const dependencies_ = ff_core_Stack.make_();
2018
+ const dependencies_ = ff_core_Array.make_();
2027
2019
  while((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "dependency"))) {
2028
- ff_core_Stack.Stack_push(dependencies_, ff_compiler_Parser.Parser_parseDependencyDefinition(self_, package_.targets_));
2020
+ ff_core_Array.Array_push(dependencies_, ff_compiler_Parser.Parser_parseDependencyDefinition(self_, package_.targets_));
2029
2021
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
2030
2022
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2031
2023
  }
2032
2024
  };
2033
- const includes_ = ff_core_Stack.make_();
2025
+ const includes_ = ff_core_Array.make_();
2034
2026
  while((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "include"))) {
2035
- ff_core_Stack.Stack_push(includes_, ff_compiler_Parser.Parser_parseIncludeDefinition(self_));
2027
+ ff_core_Array.Array_push(includes_, ff_compiler_Parser.Parser_parseIncludeDefinition(self_));
2036
2028
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
2037
2029
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2038
2030
  }
2039
2031
  };
2040
- return ff_compiler_Syntax.PackageInfo(package_, ff_core_Stack.Stack_toList(dependencies_, 0, 9007199254740991), ff_core_Stack.Stack_toList(includes_, 0, 9007199254740991))
2032
+ return ff_compiler_Syntax.PackageInfo(package_, ff_core_Array.Array_toList(dependencies_, 0, 9007199254740991), ff_core_Array.Array_toList(includes_, 0, 9007199254740991))
2041
2033
  }
2042
2034
 
2043
2035
  export async function Parser_parseModule$(self_, $task) {
2044
- const imports_ = ff_core_Stack.make_();
2045
- const types_ = ff_core_Stack.make_();
2046
- const traits_ = ff_core_Stack.make_();
2047
- const instances_ = ff_core_Stack.make_();
2048
- const extends_ = ff_core_Stack.make_();
2049
- const lets_ = ff_core_Stack.make_();
2050
- const functions_ = ff_core_Stack.make_();
2036
+ const imports_ = ff_core_Array.make_();
2037
+ const types_ = ff_core_Array.make_();
2038
+ const traits_ = ff_core_Array.make_();
2039
+ const instances_ = ff_core_Array.make_();
2040
+ const extends_ = ff_core_Array.make_();
2041
+ const lets_ = ff_core_Array.make_();
2042
+ const functions_ = ff_core_Array.make_();
2051
2043
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LEnd()))) {
2052
2044
  if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower()) && (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LAssign()) || ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LColon())))) {
2053
- ff_core_Stack.Stack_push(lets_, ff_compiler_Parser.Parser_parseLetDefinition(self_))
2045
+ ff_core_Array.Array_push(lets_, ff_compiler_Parser.Parser_parseLetDefinition(self_))
2054
2046
  } else if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
2055
- ff_core_Stack.Stack_push(functions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false))
2047
+ ff_core_Array.Array_push(functions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false))
2056
2048
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "extend"))) {
2057
- ff_core_Stack.Stack_push(extends_, ff_compiler_Parser.Parser_parseExtendDefinition(self_))
2049
+ ff_core_Array.Array_push(extends_, ff_compiler_Parser.Parser_parseExtendDefinition(self_))
2058
2050
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "trait"))) {
2059
- ff_core_Stack.Stack_push(traits_, ff_compiler_Parser.Parser_parseTraitDefinition(self_))
2051
+ ff_core_Array.Array_push(traits_, ff_compiler_Parser.Parser_parseTraitDefinition(self_))
2060
2052
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "instance"))) {
2061
- ff_core_Stack.Stack_push(instances_, ff_compiler_Parser.Parser_parseInstanceDefinition(self_))
2053
+ ff_core_Array.Array_push(instances_, ff_compiler_Parser.Parser_parseInstanceDefinition(self_))
2062
2054
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs4(ff_compiler_Parser.Parser_current(self_), "data", "class", "capability", "newtype"))) {
2063
- ff_core_Stack.Stack_push(types_, ff_compiler_Parser.Parser_parseTypeDefinition(self_))
2055
+ ff_core_Array.Array_push(types_, ff_compiler_Parser.Parser_parseTypeDefinition(self_))
2064
2056
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "import"))) {
2065
- ff_core_Stack.Stack_push(imports_, ff_compiler_Parser.Parser_parseImportDefinition(self_, self_.packagePair_))
2057
+ ff_core_Array.Array_push(imports_, ff_compiler_Parser.Parser_parseImportDefinition(self_, self_.packagePair_))
2066
2058
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "include"))) {
2067
2059
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Includes must be at the top of the file or below 'package'"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2068
2060
  } else if((ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "dependency"))) {
@@ -2076,7 +2068,7 @@ if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_com
2076
2068
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2077
2069
  }
2078
2070
  };
2079
- return ff_compiler_Syntax.Module(self_.file_, self_.packagePair_, ff_core_Stack.Stack_toList(imports_, 0, 9007199254740991), ff_core_Stack.Stack_toList(types_, 0, 9007199254740991), ff_core_Stack.Stack_toList(traits_, 0, 9007199254740991), ff_core_Stack.Stack_toList(instances_, 0, 9007199254740991), ff_core_Stack.Stack_toList(extends_, 0, 9007199254740991), ff_core_Stack.Stack_toList(lets_, 0, 9007199254740991), ff_core_Stack.Stack_toList(functions_, 0, 9007199254740991))
2071
+ return ff_compiler_Syntax.Module(self_.file_, self_.packagePair_, ff_core_Array.Array_toList(imports_, 0, 9007199254740991), ff_core_Array.Array_toList(types_, 0, 9007199254740991), ff_core_Array.Array_toList(traits_, 0, 9007199254740991), ff_core_Array.Array_toList(instances_, 0, 9007199254740991), ff_core_Array.Array_toList(extends_, 0, 9007199254740991), ff_core_Array.Array_toList(lets_, 0, 9007199254740991), ff_core_Array.Array_toList(functions_, 0, 9007199254740991))
2080
2072
  }
2081
2073
 
2082
2074
  export async function Parser_parseLetDefinition$(self_, $task) {
@@ -2094,7 +2086,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
2094
2086
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
2095
2087
  const retult_ = ff_compiler_Syntax.DLet(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), variableType_, value_);
2096
2088
  if(self_.lspHook_.trackSymbols_) {
2097
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 14, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2089
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SLet(false), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2098
2090
  };
2099
2091
  return retult_
2100
2092
  }
@@ -2111,10 +2103,7 @@ const targets_ = ff_compiler_Parser.Parser_parseTargets(self_, ff_core_List.List
2111
2103
  const bestTarget_ = ff_compiler_Parser.findBestTarget_(self_.targetIsNode_, body_, targets_);
2112
2104
  const result_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, bestTarget_);
2113
2105
  if(self_.lspHook_.trackSymbols_) {
2114
- const kind_ = (member_
2115
- ? 6
2116
- : 12);
2117
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, kind_, signature_.at_, (((_c) => {
2106
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, ff_compiler_LspHook.SFunction(member_), signature_.at_, (((_c) => {
2118
2107
  return ff_compiler_Syntax.Location(_c.file_, _c.line_, (signature_.at_.column_ + ff_core_String.String_size(signature_.name_)))
2119
2108
  }))(signature_.at_), signature_.at_, ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2120
2109
  };
@@ -2140,7 +2129,7 @@ const lambda_ = ff_compiler_Parser.Parser_parseLambda(self_, parameterCount_, fa
2140
2129
  do {
2141
2130
  const _1 = target_;
2142
2131
  {
2143
- if(_1 == "js") {
2132
+ if(_1 === "js") {
2144
2133
  if(ff_core_Equal.notEquals_(targets_.jsSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2145
2134
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2146
2135
  };
@@ -2151,7 +2140,7 @@ break
2151
2140
  }
2152
2141
  }
2153
2142
  {
2154
- if(_1 == "browser") {
2143
+ if(_1 === "browser") {
2155
2144
  if(ff_core_Equal.notEquals_(targets_.browserSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2156
2145
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2157
2146
  };
@@ -2162,7 +2151,7 @@ break
2162
2151
  }
2163
2152
  }
2164
2153
  {
2165
- if(_1 == "node") {
2154
+ if(_1 === "node") {
2166
2155
  if(ff_core_Equal.notEquals_(targets_.nodeAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2167
2156
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2168
2157
  };
@@ -2183,8 +2172,8 @@ const code_ = processCode_(ff_compiler_Token.Token_raw(ff_compiler_Parser.Parser
2183
2172
  do {
2184
2173
  const _1 = ff_core_Pair.Pair(target_, mode_);
2185
2174
  {
2186
- if(_1.first_ == "js") {
2187
- if(_1.second_ == "sync") {
2175
+ if(_1.first_ === "js") {
2176
+ if(_1.second_ === "sync") {
2188
2177
  if(ff_core_Equal.notEquals_(targets_.jsSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2189
2178
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2190
2179
  };
@@ -2196,8 +2185,8 @@ break
2196
2185
  }
2197
2186
  }
2198
2187
  {
2199
- if(_1.first_ == "js") {
2200
- if(_1.second_ == "async") {
2188
+ if(_1.first_ === "js") {
2189
+ if(_1.second_ === "async") {
2201
2190
  if(ff_core_Equal.notEquals_(targets_.jsAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2202
2191
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2203
2192
  };
@@ -2209,8 +2198,8 @@ break
2209
2198
  }
2210
2199
  }
2211
2200
  {
2212
- if(_1.first_ == "browser") {
2213
- if(_1.second_ == "sync") {
2201
+ if(_1.first_ === "browser") {
2202
+ if(_1.second_ === "sync") {
2214
2203
  if(ff_core_Equal.notEquals_(targets_.browserSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2215
2204
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2216
2205
  };
@@ -2222,8 +2211,8 @@ break
2222
2211
  }
2223
2212
  }
2224
2213
  {
2225
- if(_1.first_ == "browser") {
2226
- if(_1.second_ == "async") {
2214
+ if(_1.first_ === "browser") {
2215
+ if(_1.second_ === "async") {
2227
2216
  if(ff_core_Equal.notEquals_(targets_.browserAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2228
2217
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2229
2218
  };
@@ -2235,8 +2224,8 @@ break
2235
2224
  }
2236
2225
  }
2237
2226
  {
2238
- if(_1.first_ == "node") {
2239
- if(_1.second_ == "sync") {
2227
+ if(_1.first_ === "node") {
2228
+ if(_1.second_ === "sync") {
2240
2229
  if(ff_core_Equal.notEquals_(targets_.nodeSync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2241
2230
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2242
2231
  };
@@ -2248,8 +2237,8 @@ break
2248
2237
  }
2249
2238
  }
2250
2239
  {
2251
- if(_1.first_ == "node") {
2252
- if(_1.second_ == "async") {
2240
+ if(_1.first_ === "node") {
2241
+ if(_1.second_ === "async") {
2253
2242
  if(ff_core_Equal.notEquals_(targets_.nodeAsync_, ff_core_Option.None(), ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String))) {
2254
2243
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Duplicate target definition"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2255
2244
  };
@@ -2274,17 +2263,17 @@ export async function Parser_parseSignature$(self_, member_, $task) {
2274
2263
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
2275
2264
  const poly_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")
2276
2265
  ? ff_compiler_Parser.Parser_parseTypeParameters(self_)
2277
- : ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty()));
2266
+ : ff_compiler_Parser.Poly([], []));
2278
2267
  const parameters_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")))
2279
- ? ff_core_List.Empty()
2268
+ ? []
2280
2269
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, false));
2281
2270
  const returnType_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())
2282
2271
  ? (await (async function() {
2283
2272
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2284
2273
  return ff_compiler_Parser.Parser_parseType(self_)
2285
2274
  })())
2286
- : ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "ff:core/Unit.Unit", ff_core_List.Empty()));
2287
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(nameToken_), "TemporaryEffect$", ff_core_List.Empty());
2275
+ : ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "ff:core/Unit.Unit", []));
2276
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(nameToken_), "TemporaryEffect$", []);
2288
2277
  return ff_compiler_Syntax.Signature(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), member_, poly_.generics_, poly_.constraints_, parameters_, returnType_, temporaryEffect_)
2289
2278
  }
2290
2279
 
@@ -2296,20 +2285,20 @@ const extendToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.
2296
2285
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
2297
2286
  const poly_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")
2298
2287
  ? ff_compiler_Parser.Parser_parseTypeParameters(self_)
2299
- : ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty()));
2288
+ : ff_compiler_Parser.Poly([], []));
2300
2289
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2301
2290
  const type_ = ff_compiler_Parser.Parser_parseType(self_);
2302
2291
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
2303
- const methods_ = ff_core_Stack.make_();
2292
+ const methods_ = ff_core_Array.make_();
2304
2293
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2305
- ff_core_Stack.Stack_push(methods_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, true));
2294
+ ff_core_Array.Array_push(methods_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, true));
2306
2295
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2307
2296
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2308
2297
  }
2309
2298
  };
2310
2299
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
2311
2300
  if(self_.lspHook_.trackSymbols_) {
2312
- let name_ = ff_compiler_Syntax.Type_show(type_, ff_core_List.Empty());
2301
+ let name_ = ff_compiler_Syntax.Type_show(type_, []);
2313
2302
  ff_core_List.List_each(ff_core_List.List_zip(poly_.generics_, poly_.constraints_), ((_1) => {
2314
2303
  {
2315
2304
  const generic_ = _1.first_;
@@ -2321,9 +2310,9 @@ name_ = ff_core_String.String_replace(name_, ((", " + generic_) + "]"), ((((", "
2321
2310
  return
2322
2311
  }
2323
2312
  }));
2324
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, 3, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(extendToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2313
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, ff_compiler_LspHook.SExtend(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(extendToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2325
2314
  };
2326
- return ff_compiler_Syntax.DExtend(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), poly_.generics_, poly_.constraints_, type_, ff_core_Stack.Stack_toList(methods_, 0, 9007199254740991))
2315
+ return ff_compiler_Syntax.DExtend(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), poly_.generics_, poly_.constraints_, type_, ff_core_Array.Array_toList(methods_, 0, 9007199254740991))
2327
2316
  }
2328
2317
 
2329
2318
  export async function Parser_parseTraitDefinition$(self_, $task) {
@@ -2335,26 +2324,26 @@ const typeParameterToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_To
2335
2324
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2336
2325
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2337
2326
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
2338
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
2327
+ ? ff_compiler_Parser.Poly([], [])
2339
2328
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
2340
- const constraints_ = ff_core_Stack.make_();
2329
+ const constraints_ = ff_core_Array.make_();
2341
2330
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())) {
2342
2331
  ff_compiler_Parser.Parser_fail(self_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Trait constraints is not yet implemented");
2343
2332
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2344
2333
  const constraint_ = ff_compiler_Parser.Parser_parseConstraint(self_);
2345
- ff_core_Stack.Stack_push(constraints_, (((_c) => {
2346
- return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(typeParameterToken_), ff_compiler_Token.Token_raw(typeParameterToken_), ff_core_List.Empty()), constraint_.generics_))
2334
+ ff_core_Array.Array_push(constraints_, (((_c) => {
2335
+ return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(typeParameterToken_), ff_compiler_Token.Token_raw(typeParameterToken_), []), ...constraint_.generics_])
2347
2336
  }))(constraint_))
2348
2337
  };
2349
2338
  const generatorParameters_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
2350
- ? ff_core_List.Empty()
2339
+ ? []
2351
2340
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, false));
2352
- const methodGenerators_ = ff_core_Stack.make_();
2353
- const methodDefaults_ = ff_core_Stack.make_();
2341
+ const methodGenerators_ = ff_core_Array.make_();
2342
+ const methodDefaults_ = ff_core_Array.make_();
2354
2343
  const methodSignatures_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{"))
2355
- ? ff_core_List.Empty()
2344
+ ? []
2356
2345
  : (await (async function() {
2357
- const signatures_ = ff_core_Stack.make_();
2346
+ const signatures_ = ff_core_Array.make_();
2358
2347
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
2359
2348
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2360
2349
  if(self_.lspHook_.trackSymbols_) {
@@ -2363,16 +2352,16 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
2363
2352
  const signatureNameToken_ = ff_compiler_Parser.Parser_current(self_);
2364
2353
  const signature_ = ff_compiler_Parser.Parser_parseSignature(self_, true);
2365
2354
  if(self_.lspHook_.trackSymbols_) {
2366
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(signatureNameToken_), 12, ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(signatureNameToken_), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2355
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(signatureNameToken_), ff_compiler_LspHook.STraitFunction(), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(signatureNameToken_), ff_compiler_Token.Token_at(signatureNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2367
2356
  };
2368
- ff_core_Stack.Stack_push(signatures_, signature_);
2357
+ ff_core_Array.Array_push(signatures_, signature_);
2369
2358
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")) {
2370
2359
  const generator_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LKeyword()) && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_ahead(self_), "generate"));
2371
2360
  const body_ = ff_compiler_Parser.Parser_parseLambda(self_, ff_core_List.List_size(signature_.parameters_), true, false);
2372
2361
  if(generator_) {
2373
- ff_core_Stack.Stack_push(methodGenerators_, ff_core_Pair.Pair(signature_.name_, body_))
2362
+ ff_core_Array.Array_push(methodGenerators_, ff_core_Pair.Pair(signature_.name_, body_))
2374
2363
  } else {
2375
- ff_core_Stack.Stack_push(methodDefaults_, ff_core_Pair.Pair(signature_.name_, body_))
2364
+ ff_core_Array.Array_push(methodDefaults_, ff_core_Pair.Pair(signature_.name_, body_))
2376
2365
  }
2377
2366
  };
2378
2367
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -2380,12 +2369,12 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2380
2369
  }
2381
2370
  };
2382
2371
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
2383
- return ff_core_Stack.Stack_toList(signatures_, 0, 9007199254740991)
2372
+ return ff_core_Array.Array_toList(signatures_, 0, 9007199254740991)
2384
2373
  })()));
2385
2374
  if(self_.lspHook_.trackSymbols_) {
2386
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 11, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(traitToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2375
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.STrait(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(traitToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2387
2376
  };
2388
- return ff_compiler_Syntax.DTrait(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), ff_core_List.Link(ff_compiler_Token.Token_raw(typeParameterToken_), poly_.generics_), ff_core_List.List_addAll(ff_core_Stack.Stack_toList(constraints_, 0, 9007199254740991), poly_.constraints_), generatorParameters_, methodSignatures_, ff_core_Stack.Stack_toList(methodDefaults_, 0, 9007199254740991), ff_core_Stack.Stack_toList(methodGenerators_, 0, 9007199254740991))
2377
+ return ff_compiler_Syntax.DTrait(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), [ff_compiler_Token.Token_raw(typeParameterToken_), ...poly_.generics_], [...ff_core_Array.Array_toList(constraints_, 0, 9007199254740991), ...poly_.constraints_], generatorParameters_, methodSignatures_, ff_core_Array.Array_toList(methodDefaults_, 0, 9007199254740991), ff_core_Array.Array_toList(methodGenerators_, 0, 9007199254740991))
2389
2378
  }
2390
2379
 
2391
2380
  export async function Parser_parseInstanceDefinition$(self_, $task) {
@@ -2395,18 +2384,18 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
2395
2384
  const instanceToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "instance");
2396
2385
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2397
2386
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
2398
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
2387
+ ? ff_compiler_Parser.Poly([], [])
2399
2388
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
2400
- const typeArguments_ = ff_core_Stack.make_();
2401
- ff_core_Stack.Stack_push(typeArguments_, ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.List_map(poly_.generics_, ((_w1) => {
2402
- return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), _w1, ff_core_List.Empty())
2389
+ const typeArguments_ = ff_core_Array.make_();
2390
+ ff_core_Array.Array_push(typeArguments_, ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.List_map(poly_.generics_, ((_w1) => {
2391
+ return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), _w1, [])
2403
2392
  }))));
2404
2393
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2405
2394
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2406
2395
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "[")) {
2407
2396
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "[");
2408
2397
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2409
- ff_core_Stack.Stack_push(typeArguments_, ff_compiler_Parser.Parser_parseType(self_));
2398
+ ff_core_Array.Array_push(typeArguments_, ff_compiler_Parser.Parser_parseType(self_));
2410
2399
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2411
2400
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2412
2401
  }
@@ -2415,24 +2404,24 @@ ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]")
2415
2404
  };
2416
2405
  const generatorArguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, ff_compiler_Token.Token_at(nameToken_), false).first_;
2417
2406
  const methods_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{"))
2418
- ? ff_core_List.Empty()
2407
+ ? []
2419
2408
  : (await (async function() {
2420
- const definitions_ = ff_core_Stack.make_();
2409
+ const definitions_ = ff_core_Array.make_();
2421
2410
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
2422
2411
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2423
- ff_core_Stack.Stack_push(definitions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false));
2412
+ ff_core_Array.Array_push(definitions_, ff_compiler_Parser.Parser_parseFunctionDefinition(self_, false));
2424
2413
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2425
2414
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2426
2415
  }
2427
2416
  };
2428
2417
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
2429
- return ff_core_Stack.Stack_toList(definitions_, 0, 9007199254740991)
2418
+ return ff_core_Array.Array_toList(definitions_, 0, 9007199254740991)
2430
2419
  })()));
2431
2420
  if(self_.lspHook_.trackSymbols_) {
2432
2421
  const name_ = ((ff_compiler_Token.Token_raw(token_) + ": ") + ff_compiler_Token.Token_raw(nameToken_));
2433
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, 19, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(instanceToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2422
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(name_, ff_compiler_LspHook.SInstance(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(instanceToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2434
2423
  };
2435
- return ff_compiler_Syntax.DInstance(ff_compiler_Token.Token_at(nameToken_), poly_.generics_, poly_.constraints_, ff_compiler_Token.Token_raw(nameToken_), ff_core_Stack.Stack_toList(typeArguments_, 0, 9007199254740991), generatorArguments_, methods_, false)
2424
+ return ff_compiler_Syntax.DInstance(ff_compiler_Token.Token_at(nameToken_), poly_.generics_, poly_.constraints_, ff_compiler_Token.Token_raw(nameToken_), ff_core_Array.Array_toList(typeArguments_, 0, 9007199254740991), generatorArguments_, methods_, false)
2436
2425
  }
2437
2426
 
2438
2427
  export async function Parser_parseTypeDefinition$(self_, $task) {
@@ -2441,8 +2430,8 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbol
2441
2430
  };
2442
2431
  const newtype_ = ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "newtype");
2443
2432
  const effectParameter_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "capability")
2444
- ? ff_core_List.Link("Q$", ff_core_List.Empty())
2445
- : ff_core_List.Empty());
2433
+ ? ["Q$"]
2434
+ : []);
2446
2435
  const allowMutable_ = ff_compiler_Token.Token_rawIs2(ff_compiler_Parser.Parser_current(self_), "class", "capability");
2447
2436
  const kindToken_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "newtype")
2448
2437
  ? ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "newtype")
@@ -2453,26 +2442,26 @@ const kindToken_ = (ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_curr
2453
2442
  : ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "capability"));
2454
2443
  const nameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2455
2444
  const poly_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
2456
- ? ff_compiler_Parser.Poly(ff_core_List.Empty(), ff_core_List.Empty())
2445
+ ? ff_compiler_Parser.Poly([], [])
2457
2446
  : ff_compiler_Parser.Parser_parseTypeParameters(self_));
2458
2447
  if(((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
2459
2448
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{")
2460
2449
  };
2461
2450
  const commonFields_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
2462
- ? ff_core_List.Empty()
2451
+ ? []
2463
2452
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, true));
2464
2453
  const variants_ = ((newtype_ || (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))
2465
- ? ff_core_List.Link(ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), ff_core_List.Empty()), ff_core_List.Empty())
2454
+ ? [ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_raw(nameToken_), [])]
2466
2455
  : (await (async function() {
2467
2456
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "{");
2468
- const variantsBuilder_ = ff_core_Stack.make_();
2457
+ const variantsBuilder_ = ff_core_Array.make_();
2469
2458
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2470
2459
  if(self_.lspHook_.trackSymbols_) {
2471
2460
  ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolBegin())
2472
2461
  };
2473
2462
  const variantNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2474
2463
  const variantFields_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "("))
2475
- ? ff_core_List.Empty()
2464
+ ? []
2476
2465
  : ff_compiler_Parser.Parser_parseFunctionParameters(self_, true));
2477
2466
  if(((!allowMutable_) && ff_core_List.List_any(variantFields_, ((_w1) => {
2478
2467
  return _w1.mutable_
@@ -2481,16 +2470,16 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
2481
2470
  return _w1.mutable_
2482
2471
  }))).at_, "Only classes can have mutable fields"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2483
2472
  };
2484
- ff_core_Stack.Stack_push(variantsBuilder_, ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_raw(variantNameToken_), variantFields_));
2473
+ ff_core_Array.Array_push(variantsBuilder_, ff_compiler_Syntax.Variant(ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_raw(variantNameToken_), variantFields_));
2485
2474
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2486
2475
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
2487
2476
  };
2488
2477
  if(self_.lspHook_.trackSymbols_) {
2489
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(variantNameToken_), 10, ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(variantNameToken_), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2478
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(variantNameToken_), ff_compiler_LspHook.SVariant(), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(variantNameToken_), ff_compiler_Token.Token_at(variantNameToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2490
2479
  }
2491
2480
  };
2492
2481
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}");
2493
- return ff_core_Stack.Stack_toList(variantsBuilder_, 0, 9007199254740991)
2482
+ return ff_core_Array.Array_toList(variantsBuilder_, 0, 9007199254740991)
2494
2483
  })()));
2495
2484
  if((newtype_ && (ff_core_List.List_size(commonFields_) !== 1))) {
2496
2485
  ff_core_Log.show_(commonFields_, ff_core_Show.ff_core_Show_Show$ff_core_List_List(ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Parameter));
@@ -2503,19 +2492,19 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
2503
2492
  return _w1.mutable_
2504
2493
  }))).at_, "Only classes and capabilities can have mutable fields"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
2505
2494
  };
2506
- const generics_ = ff_core_List.List_addAll(effectParameter_, poly_.generics_);
2495
+ const generics_ = [...effectParameter_, ...poly_.generics_];
2507
2496
  const result_ = ff_compiler_Syntax.DType(ff_compiler_Token.Token_at(nameToken_), newtype_, (!allowMutable_), ff_compiler_Token.Token_raw(nameToken_), generics_, poly_.constraints_, commonFields_, variants_);
2508
2497
  if(self_.lspHook_.trackSymbols_) {
2509
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), 5, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(kindToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2498
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SType(), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(kindToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2510
2499
  };
2511
2500
  return result_
2512
2501
  }
2513
2502
 
2514
2503
  export async function Parser_parseImportDefinition$(self_, currentPackagePair_, $task) {
2515
2504
  const importToken_ = ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LKeyword(), "import");
2516
- const path_ = ff_core_Stack.make_();
2505
+ const path_ = ff_core_Array.make_();
2517
2506
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
2518
- ff_core_Stack.Stack_push(path_, ff_compiler_Parser.Parser_parseDashedName(self_));
2507
+ ff_core_Array.Array_push(path_, ff_compiler_Parser.Parser_parseDashedName(self_));
2519
2508
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDot())
2520
2509
  };
2521
2510
  const fileToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
@@ -2534,7 +2523,7 @@ const packageName_ = ff_compiler_Parser.Parser_parseDashedName(self_);
2534
2523
  return ff_compiler_Syntax.PackagePair(userName_, packageName_)
2535
2524
  })())
2536
2525
  : currentPackagePair_);
2537
- return ff_compiler_Syntax.DImport(ff_compiler_Token.Token_at(fileToken_), alias_, packagePair_, ff_core_Stack.Stack_toList(path_, 0, 9007199254740991), ff_compiler_Token.Token_raw(fileToken_))
2526
+ return ff_compiler_Syntax.DImport(ff_compiler_Token.Token_at(fileToken_), alias_, packagePair_, ff_core_Array.Array_toList(path_, 0, 9007199254740991), ff_compiler_Token.Token_raw(fileToken_))
2538
2527
  }
2539
2528
 
2540
2529
  export async function Parser_parsePackageDefinition$(self_, $task) {
@@ -2579,7 +2568,7 @@ const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(sel
2579
2568
  do {
2580
2569
  const _1 = ff_compiler_Token.Token_raw(token_);
2581
2570
  {
2582
- if(_1 == "node") {
2571
+ if(_1 === "node") {
2583
2572
  const _guard1 = targets_.node_;
2584
2573
  if(_guard1) {
2585
2574
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(token_), "Duplicate target name"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -2588,7 +2577,7 @@ break
2588
2577
  }
2589
2578
  }
2590
2579
  {
2591
- if(_1 == "node") {
2580
+ if(_1 === "node") {
2592
2581
  targets_ = (((_c) => {
2593
2582
  return ff_compiler_Syntax.TargetNames(true, _c.browser_)
2594
2583
  }))(targets_)
@@ -2596,7 +2585,7 @@ break
2596
2585
  }
2597
2586
  }
2598
2587
  {
2599
- if(_1 == "browser") {
2588
+ if(_1 === "browser") {
2600
2589
  const _guard1 = targets_.browser_;
2601
2590
  if(_guard1) {
2602
2591
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Token.Token_at(token_), "Duplicate target name"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -2605,7 +2594,7 @@ break
2605
2594
  }
2606
2595
  }
2607
2596
  {
2608
- if(_1 == "browser") {
2597
+ if(_1 === "browser") {
2609
2598
  targets_ = (((_c) => {
2610
2599
  return ff_compiler_Syntax.TargetNames(_c.node_, true)
2611
2600
  }))(targets_)
@@ -2636,7 +2625,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDot());
2636
2625
  return ff_core_String.String_grabInt(ff_compiler_Token.Token_raw(ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LInt())))
2637
2626
  })())
2638
2627
  : 0);
2639
- return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(majorMinor_), ff_core_String.String_grabInt(ff_core_Array.Array_grab(parts_, 0)), ff_core_String.String_grabInt(ff_core_Array.Array_grab(parts_, 1)), patch_)
2628
+ return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(majorMinor_), ff_core_String.String_grabInt(ff_core_List.List_grab(parts_, 0)), ff_core_String.String_grabInt(ff_core_List.List_grab(parts_, 1)), patch_)
2640
2629
  } else {
2641
2630
  const major_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LInt());
2642
2631
  return ff_compiler_Syntax.Version(ff_compiler_Token.Token_at(major_), ff_core_String.String_grabInt(ff_compiler_Token.Token_raw(major_)), 0, 0)
@@ -2679,19 +2668,19 @@ return part_
2679
2668
 
2680
2669
  export async function Parser_parseTypeParameters$(self_, $task) {
2681
2670
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "[");
2682
- const parameters_ = ff_core_Stack.make_();
2683
- const constraints_ = ff_core_Stack.make_();
2671
+ const parameters_ = ff_core_Array.make_();
2672
+ const constraints_ = ff_core_Array.make_();
2684
2673
  while(((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LSemicolon())))) {
2685
2674
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LBracketLeft())) {
2686
- ff_core_Stack.Stack_push(constraints_, ff_compiler_Parser.Parser_parseConstraint(self_))
2675
+ ff_core_Array.Array_push(constraints_, ff_compiler_Parser.Parser_parseConstraint(self_))
2687
2676
  } else {
2688
2677
  const parameterNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2689
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Token.Token_raw(parameterNameToken_));
2678
+ ff_core_Array.Array_push(parameters_, ff_compiler_Token.Token_raw(parameterNameToken_));
2690
2679
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())) {
2691
2680
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
2692
2681
  const constraint_ = ff_compiler_Parser.Parser_parseConstraint(self_);
2693
- ff_core_Stack.Stack_push(constraints_, (((_c) => {
2694
- return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_raw(parameterNameToken_), ff_core_List.Empty()), constraint_.generics_))
2682
+ ff_core_Array.Array_push(constraints_, (((_c) => {
2683
+ return ff_compiler_Syntax.Constraint(_c.at_, _c.name_, [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_raw(parameterNameToken_), []), ...constraint_.generics_])
2695
2684
  }))(constraint_))
2696
2685
  }
2697
2686
  };
@@ -2700,16 +2689,16 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2700
2689
  }
2701
2690
  };
2702
2691
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
2703
- return ff_compiler_Parser.Poly(ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991), ff_core_Stack.Stack_toList(constraints_, 0, 9007199254740991))
2692
+ return ff_compiler_Parser.Poly(ff_core_Array.Array_toList(parameters_, 0, 9007199254740991), ff_core_Array.Array_toList(constraints_, 0, 9007199254740991))
2704
2693
  }
2705
2694
 
2706
2695
  export async function Parser_parseTypeArguments$(self_, parenthesis_ = false, $task) {
2707
2696
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), (parenthesis_
2708
2697
  ? "("
2709
2698
  : "["));
2710
- const types_ = ff_core_Stack.make_();
2699
+ const types_ = ff_core_Array.make_();
2711
2700
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2712
- ff_core_Stack.Stack_push(types_, ff_compiler_Parser.Parser_parseType(self_));
2701
+ ff_core_Array.Array_push(types_, ff_compiler_Parser.Parser_parseType(self_));
2713
2702
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2714
2703
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2715
2704
  }
@@ -2717,11 +2706,11 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2717
2706
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), (parenthesis_
2718
2707
  ? ")"
2719
2708
  : "]"));
2720
- return ff_core_Stack.Stack_toList(types_, 0, 9007199254740991)
2709
+ return ff_core_Array.Array_toList(types_, 0, 9007199254740991)
2721
2710
  }
2722
2711
 
2723
2712
  export async function Parser_parseFunctionParameters$(self_, allowMutable_ = false, $task) {
2724
- const parameters_ = ff_core_Stack.make_();
2713
+ const parameters_ = ff_core_Array.make_();
2725
2714
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
2726
2715
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2727
2716
  const lspTrackSymbols_ = (self_.lspHook_.trackSymbols_ && allowMutable_);
@@ -2735,8 +2724,8 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LKeyword())
2735
2724
  };
2736
2725
  const parameterNameToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
2737
2726
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon())))) {
2738
- const t_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), "ff:core/Nothing.Nothing", ff_core_List.Empty());
2739
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), t_, ff_core_Option.None()));
2727
+ const t_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(parameterNameToken_), "ff:core/Nothing.Nothing", []);
2728
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), t_, ff_core_Option.None()));
2740
2729
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2741
2730
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
2742
2731
  }
@@ -2749,9 +2738,9 @@ const default_ = ((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
2749
2738
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
2750
2739
  return ff_core_Option.Some(ff_compiler_Parser.Parser_parseTerm(self_))
2751
2740
  })()));
2752
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), parameterType_, default_));
2741
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.Parameter(ff_compiler_Token.Token_at(parameterNameToken_), mutable_, ff_compiler_Token.Token_raw(parameterNameToken_), parameterType_, default_));
2753
2742
  if(lspTrackSymbols_) {
2754
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(parameterNameToken_), 7, ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_end(parameterNameToken_), ff_compiler_Token.Token_at(lspFirst_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2743
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(parameterNameToken_), ff_compiler_LspHook.SParameter(), ff_compiler_Token.Token_at(parameterNameToken_), ff_compiler_Token.Token_end(parameterNameToken_), ff_compiler_Token.Token_at(lspFirst_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
2755
2744
  };
2756
2745
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2757
2746
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
@@ -2759,11 +2748,11 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
2759
2748
  }
2760
2749
  };
2761
2750
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
2762
- return ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991)
2751
+ return ff_core_Array.Array_toList(parameters_, 0, 9007199254740991)
2763
2752
  }
2764
2753
 
2765
2754
  export async function Parser_parseFunctionArguments$(self_, callAt_, trailing_, $task) {
2766
- const arguments_ = ff_core_Stack.make_();
2755
+ const arguments_ = ff_core_Array.make_();
2767
2756
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
2768
2757
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
2769
2758
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -2778,13 +2767,13 @@ return ff_core_Option.Some(token_)
2778
2767
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
2779
2768
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2780
2769
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2781
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
2770
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
2782
2771
  return ff_compiler_Token.Token_raw(_w1)
2783
2772
  }))));
2784
2773
  self_.lspEmittedArgumentHook_ = true
2785
2774
  }
2786
2775
  };
2787
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(ff_compiler_Token.Token_at(argumentToken_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
2776
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(ff_compiler_Token.Token_at(argumentToken_), ff_core_Option.Option_map(nameToken_, ((_w1) => {
2788
2777
  return ff_compiler_Token.Token_raw(_w1)
2789
2778
  })), value_));
2790
2779
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
@@ -2793,7 +2782,7 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
2793
2782
  };
2794
2783
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2795
2784
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2796
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
2785
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
2797
2786
  self_.lspEmittedArgumentHook_ = true
2798
2787
  }
2799
2788
  };
@@ -2804,30 +2793,30 @@ if(trailing_) {
2804
2793
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower(), ff_compiler_Token.LUpper(), ff_compiler_Token.LString()) || ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LInt(), ff_compiler_Token.LChar(), ff_compiler_Token.LFloat())))) {
2805
2794
  lastWasCurly_ = true;
2806
2795
  const term_ = ff_compiler_Parser.Parser_parseTerm(self_);
2807
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(term_.at_, "TemporaryEffect$", ff_core_List.Empty());
2808
- const cases_ = ff_core_List.Link(ff_compiler_Syntax.MatchCase(term_.at_, ff_core_List.Empty(), ff_core_List.Empty(), term_), ff_core_List.Empty());
2796
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(term_.at_, "TemporaryEffect$", []);
2797
+ const cases_ = [ff_compiler_Syntax.MatchCase(term_.at_, [], [], term_)];
2809
2798
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2810
2799
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2811
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
2800
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
2812
2801
  self_.lspEmittedArgumentHook_ = true
2813
2802
  }
2814
2803
  };
2815
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(term_.at_, ff_compiler_Syntax.Lambda(term_.at_, temporaryEffect_, cases_))))
2804
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(term_.at_, ff_compiler_Syntax.Lambda(term_.at_, temporaryEffect_, cases_))))
2816
2805
  } else {
2817
2806
  while((ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{") || ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LColon()))) {
2818
2807
  lastWasCurly_ = ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{");
2819
2808
  const lambda_ = ff_compiler_Parser.Parser_parseLambda(self_, 0, false, true);
2820
2809
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2821
2810
  if(ff_compiler_LspHook.strictlyBetween_(callAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2822
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Stack.Stack_size(arguments_), ff_core_Option.None()));
2811
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(callAt_, ff_core_Array.Array_size(arguments_), ff_core_Option.None()));
2823
2812
  self_.lspEmittedArgumentHook_ = true
2824
2813
  }
2825
2814
  };
2826
- ff_core_Stack.Stack_push(arguments_, ff_compiler_Syntax.Argument(lambda_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(lambda_.at_, lambda_)))
2815
+ ff_core_Array.Array_push(arguments_, ff_compiler_Syntax.Argument(lambda_.at_, ff_core_Option.None(), ff_compiler_Syntax.ELambda(lambda_.at_, lambda_)))
2827
2816
  }
2828
2817
  }
2829
2818
  };
2830
- return ff_core_Pair.Pair(ff_core_Stack.Stack_toList(arguments_, 0, 9007199254740991), lastWasCurly_)
2819
+ return ff_core_Pair.Pair(ff_core_Array.Array_toList(arguments_, 0, 9007199254740991), lastWasCurly_)
2831
2820
  }
2832
2821
 
2833
2822
  export async function Parser_parseLambda$(self_, defaultParameterCount_ = 0, ignoreGenerateKeyword_ = false, allowColon_ = false, $task) {
@@ -2840,21 +2829,21 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LKeyword())
2840
2829
  };
2841
2830
  const result_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe())
2842
2831
  ? (await (async function() {
2843
- const cases_ = ff_core_Stack.make_();
2832
+ const cases_ = ff_core_Array.make_();
2844
2833
  while(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe())) {
2845
- ff_core_Stack.Stack_push(cases_, ff_compiler_Parser.Parser_parseCase(self_))
2834
+ ff_core_Array.Array_push(cases_, ff_compiler_Parser.Parser_parseCase(self_))
2846
2835
  };
2847
- return ff_core_Stack.Stack_toList(cases_, 0, 9007199254740991)
2836
+ return ff_core_Array.Array_toList(cases_, 0, 9007199254740991)
2848
2837
  })())
2849
2838
  : (ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower(), ff_compiler_Token.LWildcard()) && ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_ahead(self_), ff_compiler_Token.LComma(), ff_compiler_Token.LArrowThick()))
2850
2839
  ? (await (async function() {
2851
- const parameters_ = ff_core_Stack.make_();
2840
+ const parameters_ = ff_core_Array.make_();
2852
2841
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick()))) {
2853
2842
  const isVariable_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower());
2854
2843
  const parameterToken_ = (isVariable_
2855
2844
  ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower())
2856
2845
  : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LWildcard()));
2857
- ff_core_Stack.Stack_push(parameters_, ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(parameterToken_), (isVariable_
2846
+ ff_core_Array.Array_push(parameters_, ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(parameterToken_), (isVariable_
2858
2847
  ? ff_core_Option.Some(ff_compiler_Token.Token_raw(parameterToken_))
2859
2848
  : ff_core_Option.None())));
2860
2849
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick()))) {
@@ -2863,7 +2852,7 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2863
2852
  };
2864
2853
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick());
2865
2854
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
2866
- return ff_core_List.Link(ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_toList(parameters_, 0, 9007199254740991), ff_core_List.Empty(), term_), ff_core_List.Empty())
2855
+ return [ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_toList(parameters_, 0, 9007199254740991), [], term_)]
2867
2856
  })())
2868
2857
  : (await (async function() {
2869
2858
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
@@ -2876,40 +2865,40 @@ return ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(token_), ff_core_
2876
2865
  : ff_core_List.List_map(ff_core_List.range_(defaultParameterCount_), ((i_) => {
2877
2866
  return ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(token_), ff_core_Option.None())
2878
2867
  })));
2879
- return ff_core_List.Link(ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), arguments_, ff_core_List.Empty(), e_), ff_core_List.Empty())
2868
+ return [ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), arguments_, [], e_)]
2880
2869
  })()));
2881
2870
  if((!colon_)) {
2882
2871
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "}")
2883
2872
  };
2884
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), "TemporaryEffect$", ff_core_List.Empty());
2873
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), "TemporaryEffect$", []);
2885
2874
  return ff_compiler_Syntax.Lambda(ff_compiler_Token.Token_at(token_), temporaryEffect_, result_)
2886
2875
  }
2887
2876
 
2888
2877
  export async function Parser_parseCase$(self_, $task) {
2889
2878
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LPipe());
2890
- const patterns_ = ff_core_Stack.make_();
2879
+ const patterns_ = ff_core_Array.make_();
2891
2880
  while(((!ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick(), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
2892
- ff_core_Stack.Stack_push(patterns_, ff_compiler_Parser.Parser_parsePattern(self_));
2881
+ ff_core_Array.Array_push(patterns_, ff_compiler_Parser.Parser_parsePattern(self_));
2893
2882
  if(((!ff_compiler_Token.Token_is3(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick(), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))) {
2894
2883
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2895
2884
  }
2896
2885
  };
2897
- const guards_ = ff_core_Stack.make_();
2886
+ const guards_ = ff_core_Array.make_();
2898
2887
  while(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")) {
2899
- ff_core_Stack.Stack_push(guards_, ff_compiler_Parser.Parser_parseCaseGuard(self_))
2888
+ ff_core_Array.Array_push(guards_, ff_compiler_Parser.Parser_parseCaseGuard(self_))
2900
2889
  };
2901
2890
  if(((!ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) || (!ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe(), ff_compiler_Token.LBracketRight())))) {
2902
2891
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick())
2903
2892
  };
2904
2893
  const body_ = ff_compiler_Parser.Parser_parseStatements(self_);
2905
- return ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_toList(patterns_, 0, 9007199254740991), ff_core_Stack.Stack_toList(guards_, 0, 9007199254740991), body_)
2894
+ return ff_compiler_Syntax.MatchCase(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_toList(patterns_, 0, 9007199254740991), ff_core_Array.Array_toList(guards_, 0, 9007199254740991), body_)
2906
2895
  }
2907
2896
 
2908
2897
  export async function Parser_parseCaseGuard$(self_, $task) {
2909
2898
  const guardToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LBracketLeft());
2910
2899
  const term_ = ff_compiler_Parser.Parser_parseStatements(self_);
2911
2900
  const p_ = ((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LPipe()))
2912
- ? ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(guardToken_), "True", ff_core_List.Empty())
2901
+ ? ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(guardToken_), "True", [])
2913
2902
  : (await (async function() {
2914
2903
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LPipe());
2915
2904
  return ff_compiler_Parser.Parser_parsePattern(self_)
@@ -2955,29 +2944,29 @@ return ff_compiler_Syntax.PChar(ff_compiler_Token.Token_at(token_), ff_compiler_
2955
2944
  : (await (async function() {
2956
2945
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
2957
2946
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
2958
- const patterns_ = ff_core_Stack.make_();
2947
+ const patterns_ = ff_core_Array.make_();
2959
2948
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
2960
2949
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2961
2950
  const pattern_ = ff_compiler_Parser.Parser_parsePattern(self_);
2962
2951
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2963
2952
  if(ff_compiler_LspHook.strictlyBetween_(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2964
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_size(patterns_), ff_core_Option.None()));
2953
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_size(patterns_), ff_core_Option.None()));
2965
2954
  self_.lspEmittedArgumentHook_ = true
2966
2955
  }
2967
2956
  };
2968
- ff_core_Stack.Stack_push(patterns_, pattern_);
2957
+ ff_core_Array.Array_push(patterns_, pattern_);
2969
2958
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
2970
2959
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LComma())
2971
2960
  }
2972
2961
  };
2973
2962
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
2974
2963
  if(ff_compiler_LspHook.strictlyBetween_(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
2975
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Stack.Stack_size(patterns_), ff_core_Option.None()));
2964
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(ff_compiler_Token.Token_at(token_), ff_core_Array.Array_size(patterns_), ff_core_Option.None()));
2976
2965
  self_.lspEmittedArgumentHook_ = true
2977
2966
  }
2978
2967
  };
2979
2968
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
2980
- return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_Stack.Stack_toList(patterns_, 0, 9007199254740991))
2969
+ return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_Array.Array_toList(patterns_, 0, 9007199254740991))
2981
2970
  } else {
2982
2971
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())) {
2983
2972
  const asToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
@@ -2986,7 +2975,7 @@ return ff_compiler_Syntax.PVariantAs(ff_compiler_Token.Token_at(token_), ff_comp
2986
2975
  const wildcardToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LWildcard());
2987
2976
  return ff_compiler_Syntax.PVariantAs(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_compiler_Token.Token_at(wildcardToken_), ff_core_Option.None())
2988
2977
  } else {
2989
- return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), ff_core_List.Empty())
2978
+ return ff_compiler_Syntax.PVariant(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_), [])
2990
2979
  }
2991
2980
  }
2992
2981
  })()));
@@ -3004,7 +2993,7 @@ const leftTypes_ = (((ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_cu
3004
2993
  ? (await (async function() {
3005
2994
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
3006
2995
  const pair_ = ff_core_List.List_unzip(ff_compiler_Parser.Parser_parseRecordType(self_));
3007
- return ff_core_List.Link(ff_compiler_Syntax.TConstructor(at_, ("Record$" + ff_core_List.List_join(pair_.first_, "$")), pair_.second_), ff_core_List.Empty())
2996
+ return [ff_compiler_Syntax.TConstructor(at_, ("Record$" + ff_core_List.List_join(pair_.first_, "$")), pair_.second_)]
3008
2997
  })())
3009
2998
  : ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")
3010
2999
  ? ff_compiler_Parser.Parser_parseTypeArguments(self_, true)
@@ -3014,16 +3003,16 @@ const namespace_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
3014
3003
  : "");
3015
3004
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
3016
3005
  const arguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
3017
- ? ff_core_List.Empty()
3006
+ ? []
3018
3007
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
3019
- return ff_core_List.Link(ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_), ff_core_List.Empty())
3008
+ return [ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_)]
3020
3009
  })()));
3021
3010
  if(((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LArrowThick())) && (ff_core_List.List_size(leftTypes_) === 1))) {
3022
3011
  return ff_core_List.List_grabFirst(leftTypes_)
3023
3012
  } else {
3024
3013
  const arrowToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThick());
3025
3014
  const rightType_ = ff_compiler_Parser.Parser_parseType(self_);
3026
- return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(arrowToken_), ("Function$" + ff_core_List.List_size(leftTypes_)), ff_core_List.List_addAll(leftTypes_, ff_core_List.Link(rightType_, ff_core_List.Empty())))
3015
+ return ff_compiler_Syntax.TConstructor(ff_compiler_Token.Token_at(arrowToken_), ("Function$" + ff_core_List.List_size(leftTypes_)), [...leftTypes_, rightType_])
3027
3016
  }
3028
3017
  }
3029
3018
 
@@ -3033,14 +3022,14 @@ const namespace_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current
3033
3022
  : "");
3034
3023
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
3035
3024
  const arguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
3036
- ? ff_core_List.Empty()
3025
+ ? []
3037
3026
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
3038
3027
  return ff_compiler_Syntax.Constraint(ff_compiler_Token.Token_at(token_), (namespace_ + ff_compiler_Token.Token_raw(token_)), arguments_)
3039
3028
  }
3040
3029
 
3041
3030
  export async function Parser_parseStatements$(self_, $task) {
3042
3031
  if(ff_compiler_Token.Token_is2(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight(), ff_compiler_Token.LPipe())) {
3043
- return ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Unit", ff_core_List.Empty(), ff_core_Option.None())
3032
+ return ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), "Unit", [], ff_core_Option.None())
3044
3033
  } else {
3045
3034
  let result_ = ff_compiler_Parser.Parser_parseStatement(self_);
3046
3035
  while(ff_compiler_Parser.Parser_currentIsSeparator(self_, ff_compiler_Token.LSemicolon())) {
@@ -3123,30 +3112,27 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LColon());
3123
3112
  return ff_compiler_Parser.Parser_parseType(self_)
3124
3113
  })()));
3125
3114
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LAssign())))) {
3126
- const unit_ = ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", ff_core_List.Empty(), ff_core_Option.None());
3115
+ const unit_ = ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", [], ff_core_Option.None());
3127
3116
  return ff_compiler_Syntax.ELet(ff_compiler_Token.Token_at(nameToken_), mutable_, ff_compiler_Token.Token_raw(nameToken_), valueType_, unit_, unit_)
3128
3117
  } else {
3129
3118
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
3130
3119
  const value_ = ff_compiler_Parser.Parser_parseTerm(self_);
3131
3120
  if(self_.lspHook_.trackSymbols_) {
3132
- const kind_ = (mutable_
3133
- ? 13
3134
- : 14);
3135
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), kind_, ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(mutableToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
3121
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(ff_compiler_Token.Token_raw(nameToken_), ff_compiler_LspHook.SLet(mutable_), ff_compiler_Token.Token_at(nameToken_), ff_compiler_Token.Token_end(nameToken_), ff_compiler_Token.Token_at(mutableToken_), ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
3136
3122
  };
3137
3123
  const body_ = (ff_compiler_Parser.Parser_currentIsSeparator(self_, ff_compiler_Token.LSemicolon())
3138
3124
  ? (await (async function() {
3139
3125
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon());
3140
3126
  return ff_compiler_Parser.Parser_parseStatements(self_)
3141
3127
  })())
3142
- : ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", ff_core_List.Empty(), ff_core_Option.None()));
3128
+ : ff_compiler_Syntax.EVariant(ff_compiler_Token.Token_at(keywordToken_), "Unit", [], ff_core_Option.None()));
3143
3129
  return ff_compiler_Syntax.ELet(ff_compiler_Token.Token_at(nameToken_), mutable_, ff_compiler_Token.Token_raw(nameToken_), valueType_, value_, body_)
3144
3130
  }
3145
3131
  }
3146
3132
 
3147
3133
  export async function Parser_parseFunctions$(self_, $task) {
3148
3134
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
3149
- const functions_ = ff_core_Stack.make_();
3135
+ const functions_ = ff_core_Array.make_();
3150
3136
  while(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "function")) {
3151
3137
  if(self_.lspHook_.trackSymbols_) {
3152
3138
  ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolBegin())
@@ -3155,13 +3141,13 @@ const functionAt_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip
3155
3141
  const signature_ = ff_compiler_Parser.Parser_parseSignature(self_, false);
3156
3142
  const body_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "{")))
3157
3143
  ? (await (async function() {
3158
- const temporaryEffect_ = ff_compiler_Syntax.TConstructor(functionAt_, "TemporaryEffect$", ff_core_List.Empty());
3159
- return ff_compiler_Syntax.Lambda(functionAt_, temporaryEffect_, ff_core_List.Empty())
3144
+ const temporaryEffect_ = ff_compiler_Syntax.TConstructor(functionAt_, "TemporaryEffect$", []);
3145
+ return ff_compiler_Syntax.Lambda(functionAt_, temporaryEffect_, [])
3160
3146
  })())
3161
3147
  : ff_compiler_Parser.Parser_parseLambda(self_, ff_core_List.List_size(signature_.parameters_), false, false));
3162
- ff_core_Stack.Stack_push(functions_, ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(body_)));
3148
+ ff_core_Array.Array_push(functions_, ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(body_)));
3163
3149
  if(self_.lspHook_.trackSymbols_) {
3164
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, 12, signature_.at_, (((_c) => {
3150
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseSymbolEnd(signature_.name_, ff_compiler_LspHook.SFunction(false), signature_.at_, (((_c) => {
3165
3151
  return ff_compiler_Syntax.Location(_c.file_, _c.line_, (signature_.at_.column_ + ff_core_String.String_size(signature_.name_)))
3166
3152
  }))(signature_.at_), functionAt_, ff_compiler_Token.Token_end(ff_compiler_Parser.Parser_behind(self_))))
3167
3153
  };
@@ -3172,7 +3158,7 @@ ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LSemicolon())
3172
3158
  }
3173
3159
  };
3174
3160
  const body_ = ff_compiler_Parser.Parser_parseStatements(self_);
3175
- return ff_compiler_Syntax.EFunctions(at_, ff_core_Stack.Stack_toList(functions_, 0, 9007199254740991), body_)
3161
+ return ff_compiler_Syntax.EFunctions(at_, ff_core_Array.Array_toList(functions_, 0, 9007199254740991), body_)
3176
3162
  }
3177
3163
 
3178
3164
  export async function Parser_parseTerm$(self_, $task) {
@@ -3180,10 +3166,10 @@ return ff_compiler_Parser.Parser_parseBinary(self_, 0)
3180
3166
  }
3181
3167
 
3182
3168
  export async function Parser_parseBinary$(self_, level_, $task) {
3183
- if((level_ >= ff_core_Array.Array_size(ff_compiler_Parser.binaryOperators_))) {
3169
+ if((level_ >= ff_core_List.List_size(ff_compiler_Parser.binaryOperators_))) {
3184
3170
  return ff_compiler_Parser.Parser_parseUnary(self_)
3185
3171
  } else {
3186
- const operators_ = ff_core_Array.Array_grab(ff_compiler_Parser.binaryOperators_, level_);
3172
+ const operators_ = ff_core_List.List_grab(ff_compiler_Parser.binaryOperators_, level_);
3187
3173
  let result_ = ff_compiler_Parser.Parser_parseBinary(self_, (level_ + 1));
3188
3174
  if(ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LOperator())) {
3189
3175
  while(ff_core_List.List_any(operators_, ((value_) => {
@@ -3191,41 +3177,41 @@ return ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), v
3191
3177
  }))) {
3192
3178
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator());
3193
3179
  const right_ = ff_compiler_Parser.Parser_parseBinary(self_, (level_ + 1));
3194
- const arguments_ = ff_core_List.Link(ff_compiler_Syntax.Argument(result_.at_, ff_core_Option.None(), result_), ff_core_List.Link(ff_compiler_Syntax.Argument(right_.at_, ff_core_Option.None(), right_), ff_core_List.Empty()));
3180
+ const arguments_ = [ff_compiler_Syntax.Argument(result_.at_, ff_core_Option.None(), result_), ff_compiler_Syntax.Argument(right_.at_, ff_core_Option.None(), right_)];
3195
3181
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, ff_compiler_Token.Token_at(token_));
3196
3182
  const target_ = (((_1) => {
3197
3183
  {
3198
- if(_1 == "==") {
3184
+ if(_1 === "==") {
3199
3185
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Equal.equals"), false)
3200
3186
  return
3201
3187
  }
3202
3188
  }
3203
3189
  {
3204
- if(_1 == "!=") {
3190
+ if(_1 === "!=") {
3205
3191
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Equal.notEquals"), false)
3206
3192
  return
3207
3193
  }
3208
3194
  }
3209
3195
  {
3210
- if(_1 == "<") {
3196
+ if(_1 === "<") {
3211
3197
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.before"), false)
3212
3198
  return
3213
3199
  }
3214
3200
  }
3215
3201
  {
3216
- if(_1 == "<=") {
3202
+ if(_1 === "<=") {
3217
3203
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.notAfter"), false)
3218
3204
  return
3219
3205
  }
3220
3206
  }
3221
3207
  {
3222
- if(_1 == ">") {
3208
+ if(_1 === ">") {
3223
3209
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.after"), false)
3224
3210
  return
3225
3211
  }
3226
3212
  }
3227
3213
  {
3228
- if(_1 == ">=") {
3214
+ if(_1 === ">=") {
3229
3215
  return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), "ff:core/Ordering.notBefore"), false)
3230
3216
  return
3231
3217
  }
@@ -3236,7 +3222,7 @@ return ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_T
3236
3222
  return
3237
3223
  }
3238
3224
  }))(ff_compiler_Token.Token_raw(token_));
3239
- result_ = ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, ff_core_List.Empty(), arguments_, ff_core_List.Empty())
3225
+ result_ = ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, [], arguments_, [])
3240
3226
  }
3241
3227
  };
3242
3228
  return result_
@@ -3249,7 +3235,7 @@ const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator
3249
3235
  const term_ = ff_compiler_Parser.Parser_parseUnary(self_);
3250
3236
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, ff_compiler_Token.Token_at(token_));
3251
3237
  const target_ = ff_compiler_Syntax.DynamicCall(ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(token_), ff_compiler_Token.Token_raw(token_)), false);
3252
- return ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, ff_core_List.Empty(), ff_core_List.Link(ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), term_), ff_core_List.Empty()), ff_core_List.Empty())
3238
+ return ff_compiler_Syntax.ECall(ff_compiler_Token.Token_at(token_), target_, effect_, [], [ff_compiler_Syntax.Argument(term_.at_, ff_core_Option.None(), term_)], [])
3253
3239
  } else {
3254
3240
  return ff_compiler_Parser.Parser_parseFieldsAndCalls(self_)
3255
3241
  }
@@ -3279,12 +3265,12 @@ result_ = ff_compiler_Syntax.EField(ff_compiler_Token.Token_at(token_), false, r
3279
3265
  } else {
3280
3266
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_));
3281
3267
  const typeArguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
3282
- ? ff_core_List.Empty()
3268
+ ? []
3283
3269
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
3284
3270
  const arguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, result_.at_, true);
3285
3271
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_);
3286
3272
  const target_ = ff_compiler_Syntax.DynamicCall(result_, tailCall_);
3287
- result_ = ff_compiler_Syntax.ECall(result_.at_, target_, effect_, typeArguments_, arguments_.first_, ff_core_List.Empty());
3273
+ result_ = ff_compiler_Syntax.ECall(result_.at_, target_, effect_, typeArguments_, arguments_.first_, []);
3288
3274
  if((arguments_.second_ && ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower()))) {
3289
3275
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
3290
3276
  result_ = ff_compiler_Syntax.EField(ff_compiler_Token.Token_at(token_), false, result_, ff_compiler_Token.Token_raw(token_))
@@ -3356,7 +3342,7 @@ export async function Parser_parseVariant$(self_, prefix_, $task) {
3356
3342
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
3357
3343
  const name_ = (prefix_ + ff_compiler_Token.Token_raw(token_));
3358
3344
  const typeArguments_ = ((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "["))
3359
- ? ff_core_List.Empty()
3345
+ ? []
3360
3346
  : ff_compiler_Parser.Parser_parseTypeArguments(self_, false));
3361
3347
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "?")) {
3362
3348
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LOperator());
@@ -3380,13 +3366,13 @@ const prefix_ = (namespace_ + extraNamespace_);
3380
3366
  const token_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper());
3381
3367
  const name_ = (prefix_ + ff_compiler_Token.Token_raw(token_));
3382
3368
  const fields_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")))
3383
- ? ff_core_List.Empty()
3369
+ ? []
3384
3370
  : ff_compiler_Parser.Parser_parseRecord(self_, ff_core_Option.Some(ff_compiler_Token.Token_at(token_))));
3385
3371
  return ff_compiler_Syntax.ECopy(ff_compiler_Token.Token_at(token_), name_, record_, fields_)
3386
3372
  }
3387
3373
 
3388
3374
  export async function Parser_parseRecord$(self_, copyAt_, $task) {
3389
- const fields_ = ff_core_Stack.make_();
3375
+ const fields_ = ff_core_Array.make_();
3390
3376
  const startBracketAt_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "("));
3391
3377
  const startAt_ = ff_core_Option.Option_else(copyAt_, (() => {
3392
3378
  return startBracketAt_
@@ -3401,57 +3387,57 @@ return ff_compiler_Syntax.Field(ff_compiler_Token.Token_at(fieldToken_), ff_comp
3401
3387
  : ff_compiler_Syntax.Field(ff_compiler_Token.Token_at(fieldToken_), ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Syntax.EVariable(ff_compiler_Token.Token_at(fieldToken_), ff_compiler_Token.Token_raw(fieldToken_))));
3402
3388
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
3403
3389
  if(ff_compiler_LspHook.strictlyBetween_(startAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
3404
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Stack.Stack_size(fields_), ff_core_Option.Option_filter(ff_core_Option.Some(field_.name_), ((_w1) => {
3390
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Array.Array_size(fields_), ff_core_Option.Option_filter(ff_core_Option.Some(field_.name_), ((_w1) => {
3405
3391
  return (_w1 !== "")
3406
3392
  }))));
3407
3393
  self_.lspEmittedArgumentHook_ = true
3408
3394
  }
3409
3395
  };
3410
- ff_core_Stack.Stack_push(fields_, field_);
3396
+ ff_core_Array.Array_push(fields_, field_);
3411
3397
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
3412
3398
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
3413
3399
  }
3414
3400
  };
3415
3401
  if((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) && (!self_.lspEmittedArgumentHook_))) {
3416
3402
  if(ff_compiler_LspHook.strictlyBetween_(startAt_, ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), self_.lspHook_.at_, 1)) {
3417
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Stack.Stack_size(fields_), ff_core_Option.None()));
3403
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ParseArgumentHook(startAt_, ff_core_Array.Array_size(fields_), ff_core_Option.None()));
3418
3404
  self_.lspEmittedArgumentHook_ = true
3419
3405
  }
3420
3406
  };
3421
3407
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
3422
- return ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991)
3408
+ return ff_core_Array.Array_toList(fields_, 0, 9007199254740991)
3423
3409
  }
3424
3410
 
3425
3411
  export async function Parser_parseRecordType$(self_, $task) {
3426
- const fields_ = ff_core_Stack.make_();
3412
+ const fields_ = ff_core_Array.make_();
3427
3413
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
3428
3414
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
3429
3415
  const fieldToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
3430
3416
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LColon());
3431
- ff_core_Stack.Stack_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parseType(self_)));
3417
+ ff_core_Array.Array_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parseType(self_)));
3432
3418
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
3433
3419
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
3434
3420
  }
3435
3421
  };
3436
3422
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
3437
- return ff_core_List.List_sortBy(ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991), ((_w1) => {
3423
+ return ff_core_List.List_sortBy(ff_core_Array.Array_toList(fields_, 0, 9007199254740991), ((_w1) => {
3438
3424
  return _w1.first_
3439
3425
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
3440
3426
  }
3441
3427
 
3442
3428
  export async function Parser_parseRecordPattern$(self_, $task) {
3443
- const fields_ = ff_core_Stack.make_();
3429
+ const fields_ = ff_core_Array.make_();
3444
3430
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "(");
3445
3431
  while((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
3446
3432
  const fieldToken_ = ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower());
3447
3433
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LAssign());
3448
- ff_core_Stack.Stack_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parsePattern(self_)));
3434
+ ff_core_Array.Array_push(fields_, ff_core_Pair.Pair(ff_compiler_Token.Token_raw(fieldToken_), ff_compiler_Parser.Parser_parsePattern(self_)));
3449
3435
  if((!ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LBracketRight()))) {
3450
3436
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
3451
3437
  }
3452
3438
  };
3453
3439
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), ")");
3454
- return ff_core_List.List_sortBy(ff_core_Stack.Stack_toList(fields_, 0, 9007199254740991), ((_w1) => {
3440
+ return ff_core_List.List_sortBy(ff_core_Array.Array_toList(fields_, 0, 9007199254740991), ((_w1) => {
3455
3441
  return _w1.first_
3456
3442
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
3457
3443
  }
@@ -3462,26 +3448,26 @@ function convertListPattern_(at_, items_) {
3462
3448
  const at_a = at_;
3463
3449
  const items_a = items_;
3464
3450
  {
3465
- if(items_a.Empty) {
3466
- return ff_compiler_Syntax.PVariant(at_, "ff:core/List.Empty", ff_core_List.Empty())
3451
+ if(items_a.length === 0) {
3452
+ return ff_compiler_Syntax.PVariant(at_, "List$Empty", [])
3467
3453
  return
3468
3454
  }
3469
3455
  }
3470
3456
  {
3471
- if(items_a.Link) {
3472
- const p_ = items_a.head_.first_;
3473
- if(!items_a.head_.second_) {
3474
- const ps_ = items_a.tail_;
3475
- return ff_compiler_Syntax.PVariant(at_, "ff:core/List.Link", ff_core_List.Link(p_, ff_core_List.Link(convertListPattern_(at_, ps_), ff_core_List.Empty())))
3457
+ if(items_a.length > 0) {
3458
+ const p_ = items_a[0].first_;
3459
+ if(!items_a[0].second_) {
3460
+ const ps_ = items_a.slice(1);
3461
+ return ff_compiler_Syntax.PVariant(at_, "List$Link", [p_, convertListPattern_(at_, ps_)])
3476
3462
  return
3477
3463
  }
3478
3464
  }
3479
3465
  }
3480
3466
  {
3481
- if(items_a.Link) {
3482
- const p_ = items_a.head_.first_;
3483
- if(items_a.head_.second_) {
3484
- if(items_a.tail_.Empty) {
3467
+ if(items_a.length > 0) {
3468
+ const p_ = items_a[0].first_;
3469
+ if(items_a[0].second_) {
3470
+ if(items_a.length === 1) {
3485
3471
  return p_
3486
3472
  return
3487
3473
  }
@@ -3489,9 +3475,9 @@ return
3489
3475
  }
3490
3476
  }
3491
3477
  {
3492
- if(items_a.Link) {
3493
- const p_ = items_a.head_.first_;
3494
- if(items_a.head_.second_) {
3478
+ if(items_a.length > 0) {
3479
+ const p_ = items_a[0].first_;
3480
+ if(items_a[0].second_) {
3495
3481
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(p_.at_, "Invalid pattern: ... is only allowed for the last element in a list"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
3496
3482
  return
3497
3483
  }
@@ -3499,7 +3485,7 @@ return
3499
3485
  }
3500
3486
  }
3501
3487
  }
3502
- const items_ = ff_core_Stack.make_();
3488
+ const items_ = ff_core_Array.make_();
3503
3489
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "["));
3504
3490
  while((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
3505
3491
  const spread_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LDotDotDot());
@@ -3509,30 +3495,30 @@ ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDotDotDot())
3509
3495
  const pattern_ = ((spread_ && ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))
3510
3496
  ? ff_compiler_Syntax.PVariable(ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_current(self_)), ff_core_Option.None())
3511
3497
  : ff_compiler_Parser.Parser_parsePattern(self_));
3512
- ff_core_Stack.Stack_push(items_, ff_core_Pair.Pair(pattern_, spread_));
3498
+ ff_core_Array.Array_push(items_, ff_core_Pair.Pair(pattern_, spread_));
3513
3499
  if((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
3514
3500
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
3515
3501
  }
3516
3502
  };
3517
3503
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
3518
- return convertListPattern_(at_, ff_core_Stack.Stack_toList(items_, 0, 9007199254740991))
3504
+ return convertListPattern_(at_, ff_core_Array.Array_toList(items_, 0, 9007199254740991))
3519
3505
  }
3520
3506
 
3521
3507
  export async function Parser_parseList$(self_, $task) {
3522
- const items_ = ff_core_Stack.make_();
3508
+ const items_ = ff_core_Array.make_();
3523
3509
  const at_ = ff_compiler_Token.Token_at(ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketLeft(), "["));
3524
3510
  while((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
3525
3511
  const spread_ = ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LDotDotDot());
3526
3512
  if(spread_) {
3527
3513
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LDotDotDot())
3528
3514
  };
3529
- ff_core_Stack.Stack_push(items_, ff_core_Pair.Pair(ff_compiler_Parser.Parser_parseTerm(self_), spread_));
3515
+ ff_core_Array.Array_push(items_, ff_core_Pair.Pair(ff_compiler_Parser.Parser_parseTerm(self_), spread_));
3530
3516
  if((!ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "]"))) {
3531
3517
  ff_compiler_Parser.Parser_skipSeparator(self_, ff_compiler_Token.LComma())
3532
3518
  }
3533
3519
  };
3534
3520
  ff_compiler_Parser.Parser_rawSkip(self_, ff_compiler_Token.LBracketRight(), "]");
3535
- return ff_compiler_Syntax.EList(at_, ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_), ff_core_Stack.Stack_toList(items_, 0, 9007199254740991))
3521
+ return ff_compiler_Syntax.EList(at_, ff_compiler_Parser.Parser_freshUnificationVariable(self_, at_), ff_core_Array.Array_toList(items_, 0, 9007199254740991))
3536
3522
  }
3537
3523
 
3538
3524
  export const ff_core_Any_HasAnyTag$ff_compiler_Parser_Poly = {
@@ -3880,7 +3866,7 @@ serialization_.offset_ += 1;
3880
3866
  {
3881
3867
  const _1 = variantIndex_;
3882
3868
  {
3883
- if(_1 == 0) {
3869
+ if(_1 === 0) {
3884
3870
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 23), 0);
3885
3871
  return ff_compiler_Parser.Poly(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_List_List(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_List_List(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Constraint).deserializeUsing_(serialization_))
3886
3872
  return
@@ -3914,7 +3900,7 @@ serialization_.offset_ += 1;
3914
3900
  {
3915
3901
  const _1 = variantIndex_;
3916
3902
  {
3917
- if(_1 == 0) {
3903
+ if(_1 === 0) {
3918
3904
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 23), 0);
3919
3905
  return ff_compiler_Parser.Poly(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_List_List(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_List_List(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Constraint).deserializeUsing_(serialization_))
3920
3906
  return
@@ -3958,7 +3944,7 @@ serialization_.offset_ += 1;
3958
3944
  {
3959
3945
  const _1 = variantIndex_;
3960
3946
  {
3961
- if(_1 == 0) {
3947
+ if(_1 === 0) {
3962
3948
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 32), 0);
3963
3949
  return ff_compiler_Parser.ParsedTargets(ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_))
3964
3950
  return
@@ -3999,7 +3985,7 @@ serialization_.offset_ += 1;
3999
3985
  {
4000
3986
  const _1 = variantIndex_;
4001
3987
  {
4002
- if(_1 == 0) {
3988
+ if(_1 === 0) {
4003
3989
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 32), 0);
4004
3990
  return ff_compiler_Parser.ParsedTargets(ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Lambda).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_))
4005
3991
  return