firefly-compiler 0.4.20 → 0.4.22

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 (72) hide show
  1. package/compiler/Builder.ff +23 -13
  2. package/compiler/Dictionaries.ff +10 -10
  3. package/compiler/Inference.ff +167 -148
  4. package/compiler/JsEmitter.ff +122 -78
  5. package/compiler/LspHook.ff +6 -3
  6. package/compiler/Main.ff +24 -10
  7. package/compiler/Patterns.ff +1 -1
  8. package/compiler/Resolver.ff +167 -159
  9. package/compiler/Substitution.ff +2 -2
  10. package/compiler/Syntax.ff +1 -0
  11. package/compiler/Unification.ff +1 -1
  12. package/core/Array.ff +6 -4
  13. package/core/Int.ff +12 -12
  14. package/core/List.ff +6 -4
  15. package/core/Map.ff +8 -0
  16. package/core/Set.ff +7 -0
  17. package/experimental/benchmarks/ListGrab.ff +23 -0
  18. package/experimental/benchmarks/ListGrab.java +55 -0
  19. package/experimental/benchmarks/Pyrotek45.ff +30 -0
  20. package/experimental/benchmarks/Pyrotek45.java +64 -0
  21. package/experimental/tests/TestJson.ff +26 -0
  22. package/lsp/Handler.ff +65 -61
  23. package/lsp/SignatureHelpHandler.ff +5 -4
  24. package/lsp/TestReferences.ff +15 -0
  25. package/lsp/TestReferencesCase.ff +8 -0
  26. package/output/js/ff/compiler/Builder.mjs +50 -44
  27. package/output/js/ff/compiler/Dependencies.mjs +0 -2
  28. package/output/js/ff/compiler/Deriver.mjs +16 -140
  29. package/output/js/ff/compiler/Dictionaries.mjs +24 -238
  30. package/output/js/ff/compiler/Environment.mjs +12 -154
  31. package/output/js/ff/compiler/Inference.mjs +207 -1069
  32. package/output/js/ff/compiler/JsEmitter.mjs +434 -2342
  33. package/output/js/ff/compiler/JsImporter.mjs +0 -12
  34. package/output/js/ff/compiler/LspHook.mjs +20 -446
  35. package/output/js/ff/compiler/Main.mjs +110 -553
  36. package/output/js/ff/compiler/Parser.mjs +36 -356
  37. package/output/js/ff/compiler/Patterns.mjs +24 -204
  38. package/output/js/ff/compiler/Resolver.mjs +428 -554
  39. package/output/js/ff/compiler/Substitution.mjs +6 -164
  40. package/output/js/ff/compiler/Syntax.mjs +449 -3293
  41. package/output/js/ff/compiler/Token.mjs +9 -1095
  42. package/output/js/ff/compiler/Tokenizer.mjs +4 -2
  43. package/output/js/ff/compiler/Unification.mjs +30 -364
  44. package/output/js/ff/compiler/Wildcards.mjs +0 -86
  45. package/output/js/ff/compiler/Workspace.mjs +8 -96
  46. package/output/js/ff/core/Array.mjs +15 -8
  47. package/output/js/ff/core/AssetSystem.mjs +4 -14
  48. package/output/js/ff/core/Bool.mjs +0 -12
  49. package/output/js/ff/core/Core.mjs +0 -30
  50. package/output/js/ff/core/Int.mjs +24 -24
  51. package/output/js/ff/core/IntMap.mjs +0 -8
  52. package/output/js/ff/core/Json.mjs +0 -40
  53. package/output/js/ff/core/List.mjs +23 -32
  54. package/output/js/ff/core/Lock.mjs +0 -10
  55. package/output/js/ff/core/Map.mjs +26 -24
  56. package/output/js/ff/core/Option.mjs +10 -286
  57. package/output/js/ff/core/Ordering.mjs +16 -158
  58. package/output/js/ff/core/Pair.mjs +2 -34
  59. package/output/js/ff/core/Path.mjs +2 -28
  60. package/output/js/ff/core/Random.mjs +4 -4
  61. package/output/js/ff/core/RbMap.mjs +56 -644
  62. package/output/js/ff/core/Set.mjs +16 -0
  63. package/output/js/ff/core/Show.mjs +0 -16
  64. package/output/js/ff/core/Stream.mjs +14 -144
  65. package/output/js/ff/core/StringMap.mjs +0 -8
  66. package/output/js/ff/core/Try.mjs +4 -108
  67. package/output/js/ff/core/Unit.mjs +2 -16
  68. package/package.json +1 -1
  69. package/postgresql/Pg.ff +23 -23
  70. package/vscode/package.json +1 -1
  71. package/bin/firefly.mjs +0 -2
  72. package/guide/Main.ff +0 -22
@@ -97,8 +97,8 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
97
97
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
98
98
 
99
99
  // type Resolver
100
- export function Resolver(variables_, variableLocations_, variants_, types_, typeGenerics_, typeLocations_, asyncTypes_, typeParameters_, traits_, traitLocations_, state_, lspHook_) {
101
- return {variables_, variableLocations_, variants_, types_, typeGenerics_, typeLocations_, asyncTypes_, typeParameters_, traits_, traitLocations_, state_, lspHook_};
100
+ export function Resolver(variables_, variableLocations_, asVariables_, variants_, types_, typeGenerics_, typeLocations_, asyncTypes_, typeParameters_, traits_, traitLocations_, state_, lspHook_) {
101
+ return {variables_, variableLocations_, asVariables_, variants_, types_, typeGenerics_, typeLocations_, asyncTypes_, typeParameters_, traits_, traitLocations_, state_, lspHook_};
102
102
  }
103
103
 
104
104
  // type ResolverState
@@ -106,14 +106,19 @@ export function ResolverState(nextUnificationVariableIndex_) {
106
106
  return {nextUnificationVariableIndex_};
107
107
  }
108
108
 
109
+ // type CaseVariable
110
+ export function CaseVariable(at_, name_, asBound_) {
111
+ return {at_, name_, asBound_};
112
+ }
113
+
109
114
 
110
115
 
111
116
  export function make_(packagePair_, moduleName_, lspHook_) {
112
- return ff_compiler_Resolver.Resolver(ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_compiler_Resolver.ResolverState(2), lspHook_)
117
+ return ff_compiler_Resolver.Resolver(ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_compiler_Resolver.ResolverState(2), lspHook_)
113
118
  }
114
119
 
115
120
  export async function make_$(packagePair_, moduleName_, lspHook_, $task) {
116
- return ff_compiler_Resolver.Resolver(ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_compiler_Resolver.ResolverState(2), lspHook_)
121
+ return ff_compiler_Resolver.Resolver(ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toMap([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_compiler_Resolver.ResolverState(2), lspHook_)
117
122
  }
118
123
 
119
124
  export function Resolver_freshUnificationVariable(self_, at_) {
@@ -156,7 +161,6 @@ return module2_
156
161
  export function Resolver_checkInstanceType(self_, type_) {
157
162
  {
158
163
  const _1 = type_;
159
- {
160
164
  if(_1.TConstructor) {
161
165
  const name_ = _1.name_;
162
166
  const typeArguments_ = _1.generics_;
@@ -168,7 +172,6 @@ ff_compiler_Resolver.Resolver_checkInstanceType(self_, _w1)
168
172
  }))
169
173
  return
170
174
  }
171
- }
172
175
  {
173
176
 
174
177
  return
@@ -183,18 +186,13 @@ ff_core_List.List_each(imports_, ((import_) => {
183
186
  const _1 = ff_core_List.List_find(modules_, ((_w1) => {
184
187
  return (ff_core_String.String_dropLast(_w1.file_, 3) === import_.file_)
185
188
  }));
186
- {
187
189
  if(_1.Some) {
188
190
  const module_ = _1.value_;
189
191
  resolver_ = ff_compiler_Resolver.Resolver_processDefinitions(resolver_, module_, ff_core_Option.Some(import_.alias_))
190
192
  return
191
193
  }
192
- }
193
- {
194
194
  if(_1.None) {
195
195
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(import_.at_, ("No such module: " + import_.file_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
196
- return
197
- }
198
196
  }
199
197
  }
200
198
  }));
@@ -206,28 +204,18 @@ function entry_(name_, unqualified_) {
206
204
  const full_ = ((((ff_compiler_Syntax.PackagePair_groupName(module_.packagePair_, ":") + "/") + ff_core_String.String_dropLast(module_.file_, 3)) + ".") + name_);
207
205
  {
208
206
  const _1 = importAlias_;
209
- {
210
207
  if(_1.None) {
211
208
  return [ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
212
- return
213
- }
214
209
  }
215
- {
216
210
  if(_1.Some) {
217
211
  const alias_ = _1.value_;
218
- const _guard1 = unqualified_;
219
- if(_guard1) {
212
+ if(unqualified_) {
220
213
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
221
- return
222
- }
223
214
  }
224
215
  }
225
- {
226
216
  if(_1.Some) {
227
217
  const alias_ = _1.value_;
228
218
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(full_, full_)]
229
- return
230
- }
231
219
  }
232
220
  }
233
221
  }
@@ -309,21 +297,20 @@ return entry_(_w1.name_, true)
309
297
  const _1 = self_;
310
298
  {
311
299
  const _c = _1;
312
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
313
- return
300
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
314
301
  }
315
302
  }
316
303
  }
317
304
 
318
305
  export function Resolver_resolveTypeDefinition(self_, definition_) {
319
306
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_)) {
320
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
307
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
321
308
  };
322
309
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
323
310
  return ff_core_Pair.Pair(g_, g_)
324
311
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
325
312
  const self2_ = (((_c) => {
326
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
313
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
327
314
  }))(self_);
328
315
  if((!ff_core_Option.Option_any(ff_core_List.List_first(definition_.generics_), ((_w1) => {
329
316
  return (_w1 === "Q$")
@@ -352,14 +339,14 @@ const _1 = f_;
352
339
  {
353
340
  const _c = _1;
354
341
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
355
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
342
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
356
343
  })))
357
344
  return
358
345
  }
359
346
  }
360
347
  })), ff_core_List.List_map(definition_.variants_, ((v_) => {
361
348
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, v_.at_)) {
362
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None()))
349
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None(), true))
363
350
  };
364
351
  {
365
352
  const _1 = v_;
@@ -375,7 +362,7 @@ const _1 = f_;
375
362
  {
376
363
  const _c = _1;
377
364
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
378
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
365
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
379
366
  })))
380
367
  return
381
368
  }
@@ -392,13 +379,13 @@ return
392
379
 
393
380
  export function Resolver_resolveTraitDefinition(self_, definition_) {
394
381
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
395
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
382
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
396
383
  };
397
384
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
398
385
  return ff_core_Pair.Pair(g_, g_)
399
386
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
400
387
  const self2_ = (((_c) => {
401
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
388
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
402
389
  }))(self_);
403
390
  {
404
391
  const _1 = definition_;
@@ -418,16 +405,12 @@ return (_w1.name_ === name_)
418
405
  const function1_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(lambda_));
419
406
  const function2_ = ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, function1_, true, false);
420
407
  return ff_core_Pair.Pair(name_, (((_1) => {
421
- {
422
408
  if(_1.FireflyTarget) {
423
409
  const lambda_ = _1.lambda_;
424
410
  return lambda_
425
- return
426
- }
427
411
  }
428
412
  {
429
413
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(signature_.at_, "Internal error: Expected method default to be a lambda"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
430
- return
431
414
  }
432
415
  }))(function2_.body_))
433
416
  return
@@ -443,13 +426,13 @@ const traitDefinedAt_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.tra
443
426
  return definition_.at_
444
427
  }));
445
428
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, traitDefinedAt_))) {
446
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None()))
429
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None(), true))
447
430
  };
448
431
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
449
432
  return ff_core_Pair.Pair(g_, g_)
450
433
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
451
434
  const self2_ = (((_c) => {
452
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
435
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
453
436
  }))(self_);
454
437
  const traitName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self2_.traits_, definition_.traitName_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
455
438
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(definition_.at_, ("No such trait: " + definition_.traitName_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -475,10 +458,10 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
475
458
  return ff_core_Pair.Pair(g_, g_)
476
459
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
477
460
  const selfWithNoQ_ = (((_c) => {
478
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, definition_.name_, definition_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, definition_.name_, definition_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
461
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, definition_.name_, definition_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, definition_.name_, definition_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
479
462
  }))(self_);
480
463
  const selfWithQ_ = (((_c) => {
481
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_add(selfWithNoQ_.types_, "Q$", "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, ff_core_Set.Set_add(selfWithNoQ_.typeParameters_, "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
464
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_add(selfWithNoQ_.types_, "Q$", "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, ff_core_Set.Set_add(selfWithNoQ_.typeParameters_, "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
482
465
  }))(selfWithNoQ_);
483
466
  {
484
467
  const _1 = definition_;
@@ -496,65 +479,53 @@ return
496
479
 
497
480
  export function Resolver_resolveLetDefinition(self_, definition_, topLevel_) {
498
481
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
499
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
482
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), topLevel_))
500
483
  };
501
484
  {
502
485
  const _1 = definition_;
503
486
  {
504
487
  const _c = _1;
505
- return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true))
506
- return
488
+ return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true, false))
507
489
  }
508
490
  }
509
491
  }
510
492
 
511
- export function Resolver_resolveTerm(self_, term_, topLevel_) {
493
+ export function Resolver_resolveTerm(self_, term_, topLevel_, inField_ = false) {
512
494
  {
513
- const self_a = self_;
514
- const term_a = term_;
515
- const topLevel_a = topLevel_;
516
- {
517
- if(term_a.EString) {
495
+ const _1 = term_;
496
+ if(_1.EString) {
518
497
  return term_
519
- return
520
- }
521
498
  }
522
- {
523
- if(term_a.EChar) {
499
+ if(_1.EChar) {
524
500
  return term_
525
- return
526
- }
527
501
  }
528
- {
529
- if(term_a.EInt) {
502
+ if(_1.EInt) {
530
503
  return term_
531
- return
532
- }
533
504
  }
534
- {
535
- if(term_a.EFloat) {
505
+ if(_1.EFloat) {
536
506
  return term_
537
- return
538
- }
539
507
  }
540
- {
541
- if(term_a.EVariable) {
542
- const e_ = term_a;
508
+ if(_1.EVariable) {
509
+ const e_ = _1;
543
510
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
544
511
  const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocations_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
545
512
  return e_.at_
546
513
  }));
547
514
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, at_))) {
548
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None()))
515
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None(), true))
549
516
  }
550
517
  };
518
+ if(((!inField_) && ff_core_Option.Option_any(ff_core_Map.Map_get(self_.asVariables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
519
+ return (!ff_core_Option.Option_isEmpty(_w1))
520
+ })))) {
521
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Only field access is allowed on as-bound variables"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
522
+ };
551
523
  return ff_core_Option.Option_else(ff_core_Option.Option_map(ff_core_Map.Map_get(self_.variables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
552
524
  {
553
525
  const _1 = e_;
554
526
  {
555
527
  const _c = _1;
556
528
  return ff_compiler_Syntax.EVariable(_c.at_, _w1)
557
- return
558
529
  }
559
530
  }
560
531
  })), (() => {
@@ -562,29 +533,24 @@ return term_
562
533
  }))
563
534
  return
564
535
  }
565
- }
566
- {
567
- if(term_a.EList) {
568
- const at_ = term_a.at_;
569
- const t_ = term_a.elementType_;
570
- const items_ = term_a.items_;
536
+ if(_1.EList) {
537
+ const at_ = _1.at_;
538
+ const t_ = _1.elementType_;
539
+ const items_ = _1.items_;
571
540
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
572
541
  {
573
542
  const item_ = _1.first_;
574
543
  const spread_ = _1.second_;
575
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
576
- return
544
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
577
545
  }
578
546
  })))
579
547
  return
580
548
  }
581
- }
582
- {
583
- if(term_a.EVariant) {
584
- const at_ = term_a.at_;
585
- const name_ = term_a.name_;
586
- const typeArguments_ = term_a.typeArguments_;
587
- const arguments_ = term_a.arguments_;
549
+ if(_1.EVariant) {
550
+ const at_ = _1.at_;
551
+ const name_ = _1.name_;
552
+ const typeArguments_ = _1.typeArguments_;
553
+ const arguments_ = _1.arguments_;
588
554
  return ff_compiler_Syntax.EVariant(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
589
555
  return name_
590
556
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -595,20 +561,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
595
561
  const _1 = a_;
596
562
  {
597
563
  const _c = _1;
598
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
599
- return
564
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
600
565
  }
601
566
  }
602
567
  }))
603
568
  })))
604
569
  return
605
570
  }
606
- }
607
- {
608
- if(term_a.EVariantIs) {
609
- const at_ = term_a.at_;
610
- const name_ = term_a.name_;
611
- const typeArguments_ = term_a.typeArguments_;
571
+ if(_1.EVariantIs) {
572
+ const at_ = _1.at_;
573
+ const name_ = _1.name_;
574
+ const typeArguments_ = _1.typeArguments_;
612
575
  return ff_compiler_Syntax.EVariantIs(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
613
576
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variant: " + name_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
614
577
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -616,75 +579,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
616
579
  })))
617
580
  return
618
581
  }
619
- }
620
- {
621
- if(term_a.ECopy) {
622
- const at_ = term_a.at_;
623
- const name_ = term_a.name_;
624
- const record_ = term_a.record_;
625
- const arguments_ = term_a.arguments_;
582
+ if(_1.ECopy) {
583
+ const at_ = _1.at_;
584
+ const name_ = _1.name_;
585
+ const record_ = _1.record_;
586
+ const arguments_ = _1.arguments_;
626
587
  return ff_compiler_Syntax.ECopy(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
627
588
  return name_
628
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), ff_core_List.List_map(arguments_, ((f_) => {
589
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, true), ff_core_List.List_map(arguments_, ((f_) => {
629
590
  {
630
591
  const _1 = f_;
631
592
  {
632
593
  const _c = _1;
633
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
634
- return
594
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
635
595
  }
636
596
  }
637
597
  })))
638
598
  return
639
599
  }
640
- }
641
- {
642
- if(term_a.EField) {
643
- const e_ = term_a;
600
+ if(_1.EField) {
601
+ const e_ = _1;
644
602
  {
645
603
  const _1 = e_;
646
604
  {
647
605
  const _c = _1;
648
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
649
- return
606
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
650
607
  }
651
608
  }
652
609
  return
653
610
  }
654
- }
655
- {
656
- if(term_a.ELambda) {
657
- const at_ = term_a.at_;
658
- const lambdaAt_ = term_a.lambda_.at_;
659
- const cases_ = term_a.lambda_.cases_;
611
+ if(_1.ELambda) {
612
+ const at_ = _1.at_;
613
+ const lambdaAt_ = _1.lambda_.at_;
614
+ const cases_ = _1.lambda_.cases_;
660
615
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
661
616
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
662
617
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
663
618
  }))))
664
619
  return
665
620
  }
666
- }
667
- {
668
- if(term_a.EPipe) {
669
- const at_ = term_a.at_;
670
- const value_ = term_a.value_;
671
- const effect_ = term_a.effect_;
672
- const function_ = term_a.function_;
673
- return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_))
674
- return
675
- }
676
- }
677
- {
678
- if(term_a.ECall) {
679
- const at_ = term_a.at_;
680
- if(term_a.target_.DynamicCall) {
681
- const target_ = term_a.target_;
682
- const effect_ = term_a.effect_;
683
- const typeArguments_ = term_a.typeArguments_;
684
- const arguments_ = term_a.arguments_;
685
- const dictionaries_ = term_a.dictionaries_;
621
+ if(_1.EPipe) {
622
+ const at_ = _1.at_;
623
+ const value_ = _1.value_;
624
+ const effect_ = _1.effect_;
625
+ const function_ = _1.function_;
626
+ return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_, false))
627
+ }
628
+ if(_1.ECall && _1.target_.DynamicCall) {
629
+ const at_ = _1.at_;
630
+ const target_ = _1.target_;
631
+ const effect_ = _1.effect_;
632
+ const typeArguments_ = _1.typeArguments_;
633
+ const arguments_ = _1.arguments_;
634
+ const dictionaries_ = _1.dictionaries_;
686
635
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
687
- return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_), _c.tailCall_)
636
+ return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_, false), _c.tailCall_)
688
637
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
689
638
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
690
639
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -692,44 +641,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
692
641
  const _1 = a_;
693
642
  {
694
643
  const _c = _1;
695
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
696
- return
644
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
697
645
  }
698
646
  }
699
647
  })), dictionaries_)
700
648
  return
701
649
  }
702
- }
703
- }
704
- {
705
- if(term_a.ECall) {
706
- const at_ = term_a.at_;
707
- if(term_a.target_.StaticCall) {
650
+ if(_1.ECall && _1.target_.StaticCall) {
708
651
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Internal error: Static calls not expected in the Resolver phase"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
709
- return
710
- }
711
- }
712
652
  }
713
- {
714
- if(term_a.ERecord) {
715
- const at_ = term_a.at_;
716
- const fields_ = term_a.fields_;
653
+ if(_1.ERecord) {
654
+ const at_ = _1.at_;
655
+ const fields_ = _1.fields_;
717
656
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
718
657
  {
719
658
  const _1 = f_;
720
659
  {
721
660
  const _c = _1;
722
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
723
- return
661
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
724
662
  }
725
663
  }
726
664
  })))
727
665
  return
728
666
  }
729
- }
730
- {
731
- if(term_a.EWildcard) {
732
- const e_ = term_a;
667
+ if(_1.EWildcard) {
668
+ const e_ = _1;
733
669
  if((e_.index_ === 0)) {
734
670
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Unbound wildcard"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
735
671
  };
@@ -738,17 +674,14 @@ const _1 = e_;
738
674
  {
739
675
  const _c = _1;
740
676
  return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
741
- return
742
677
  }
743
678
  }
744
679
  return
745
680
  }
746
- }
747
- {
748
- if(term_a.EFunctions) {
749
- const at_ = term_a.at_;
750
- const functions_ = term_a.functions_;
751
- const body_ = term_a.body_;
681
+ if(_1.EFunctions) {
682
+ const at_ = _1.at_;
683
+ const functions_ = _1.functions_;
684
+ const body_ = _1.body_;
752
685
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
753
686
  return _w1.signature_.name_
754
687
  })), ((name_) => {
@@ -760,83 +693,66 @@ return _w1.signature_
760
693
  return ff_core_Pair.Pair(s_.name_, s_.at_)
761
694
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
762
695
  const self2_ = (((_c) => {
763
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, functionMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, locationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
696
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, functionMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, locationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
764
697
  }))(self_);
765
698
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
766
699
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
767
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
700
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
768
701
  return
769
702
  }
770
- }
771
- {
772
- if(term_a.ELet) {
773
- const e_ = term_a;
703
+ if(_1.ELet) {
704
+ const e_ = _1;
774
705
  const self2_ = (((_c) => {
775
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
706
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
776
707
  }))(self_);
777
708
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
778
709
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
779
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None()))
710
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None(), false))
780
711
  }
781
712
  };
782
713
  {
783
714
  const _1 = e_;
784
715
  {
785
716
  const _c = _1;
786
- return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_))
787
- return
788
- }
789
- }
790
- return
717
+ return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_, false))
791
718
  }
792
719
  }
793
- {
794
- if(term_a.ESequential) {
795
- const at_ = term_a.at_;
796
- const before_ = term_a.before_;
797
- const after_ = term_a.after_;
798
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
799
720
  return
800
721
  }
722
+ if(_1.ESequential) {
723
+ const at_ = _1.at_;
724
+ const before_ = _1.before_;
725
+ const after_ = _1.after_;
726
+ return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_, false))
801
727
  }
802
- {
803
- if(term_a.EAssign) {
804
- const at_ = term_a.at_;
805
- const operator_ = term_a.operator_;
806
- const variable_ = term_a.variable_;
807
- const value_ = term_a.value_;
728
+ if(_1.EAssign) {
729
+ const at_ = _1.at_;
730
+ const operator_ = _1.operator_;
731
+ const variable_ = _1.variable_;
732
+ const value_ = _1.value_;
808
733
  return ff_compiler_Syntax.EAssign(at_, operator_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variables_, variable_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
809
734
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variable: " + variable_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
810
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
811
- return
812
- }
813
- }
814
- {
815
- if(term_a.EAssignField) {
816
- const at_ = term_a.at_;
817
- const operator_ = term_a.operator_;
818
- const record_ = term_a.record_;
819
- const field_ = term_a.field_;
820
- const value_ = term_a.value_;
821
- return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
735
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
822
736
  return
823
737
  }
738
+ if(_1.EAssignField) {
739
+ const at_ = _1.at_;
740
+ const operator_ = _1.operator_;
741
+ const record_ = _1.record_;
742
+ const field_ = _1.field_;
743
+ const value_ = _1.value_;
744
+ return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, false), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
824
745
  }
825
746
  }
826
747
  }
827
748
 
828
749
  export function Resolver_resolveType(self_, type_, topLevel_) {
829
- {
830
750
  const self_a = self_;
831
751
  const type_a = type_;
832
752
  const topLevel_a = topLevel_;
833
- {
834
753
  if(type_a.TVariable) {
835
754
  return type_
836
- return
837
- }
838
755
  }
839
- {
840
756
  if(type_a.TConstructor) {
841
757
  const constructor_ = type_a;
842
758
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -871,7 +787,6 @@ const _1 = constructor_;
871
787
  {
872
788
  const _c = _1;
873
789
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...arguments_, returnType_])
874
- return
875
790
  }
876
791
  }
877
792
  } else {
@@ -880,15 +795,12 @@ const _1 = constructor_;
880
795
  {
881
796
  const _c = _1;
882
797
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...generics_])
883
- return
884
798
  }
885
799
  }
886
800
  }
887
801
  return
888
802
  }
889
803
  }
890
- }
891
- }
892
804
 
893
805
  export function Resolver_makeEffectArgument(self_, at_, topLevel_) {
894
806
  if(topLevel_) {
@@ -944,7 +856,7 @@ return ff_compiler_Syntax.DFunction(definition_.at_, signature_, body_)
944
856
 
945
857
  export function Resolver_resolveSignature(self_, signature_, topLevel_, isInstanceMethod_) {
946
858
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, signature_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, signature_.at_))) {
947
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_))
859
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_, topLevel_))
948
860
  };
949
861
  const newSignature_ = (topLevel_
950
862
  ? (((_c) => {
@@ -971,7 +883,7 @@ const _1 = p_;
971
883
  {
972
884
  const _c = _1;
973
885
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self2_, p_.valueType_, topLevel_), ff_core_Option.Option_map(p_.default_, ((_w1) => {
974
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
886
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
975
887
  })))
976
888
  return
977
889
  }
@@ -998,53 +910,31 @@ return ff_core_Pair.Pair(name_, name_)
998
910
  const _1 = self_;
999
911
  {
1000
912
  const _c = _1;
1001
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1002
- return
913
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1003
914
  }
1004
915
  }
1005
916
  }
1006
917
 
1007
918
  export function Resolver_resolveCase(self_, case_, topLevel_) {
1008
919
  function findVariables_(pattern_) {
1009
- {
1010
920
  const pattern_a = pattern_;
1011
- {
1012
921
  if(pattern_a.PString) {
1013
922
  return ff_core_Map.empty_()
1014
- return
1015
923
  }
1016
- }
1017
- {
1018
924
  if(pattern_a.PInt) {
1019
925
  return ff_core_Map.empty_()
1020
- return
1021
926
  }
1022
- }
1023
- {
1024
927
  if(pattern_a.PChar) {
1025
928
  return ff_core_Map.empty_()
1026
- return
1027
929
  }
1028
- }
1029
- {
1030
- if(pattern_a.PVariable) {
930
+ if(pattern_a.PVariable && pattern_a.name_.Some) {
1031
931
  const at_ = pattern_a.at_;
1032
- if(pattern_a.name_.Some) {
1033
932
  const name_ = pattern_a.name_.value_;
1034
- return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_core_Pair.Pair(at_, name_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1035
- return
1036
- }
1037
- }
933
+ return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_compiler_Resolver.CaseVariable(at_, name_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1038
934
  }
1039
- {
1040
- if(pattern_a.PVariable) {
1041
- if(pattern_a.name_.None) {
935
+ if(pattern_a.PVariable && pattern_a.name_.None) {
1042
936
  return ff_core_Map.empty_()
1043
- return
1044
937
  }
1045
- }
1046
- }
1047
- {
1048
938
  if(pattern_a.PVariant) {
1049
939
  const patterns_ = pattern_a.patterns_;
1050
940
  return ff_core_List.List_foldLeft(ff_core_List.List_map(patterns_, ((pattern_) => {
@@ -1054,27 +944,21 @@ return ff_core_Map.Map_addAll(_w1, _w2, ff_core_Ordering.ff_core_Ordering_Order$
1054
944
  }))
1055
945
  return
1056
946
  }
1057
- }
1058
- {
1059
947
  if(pattern_a.PVariantAs) {
1060
948
  const at_ = pattern_a.at_;
949
+ const variant_ = pattern_a.name_;
1061
950
  const variableAt_ = pattern_a.variableAt_;
1062
951
  const variable_ = pattern_a.variable_;
1063
952
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
1064
- return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
953
+ return ff_core_Pair.Pair(x_, ff_compiler_Resolver.CaseVariable(variableAt_, x_, ff_core_Option.Some(variant_)))
1065
954
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1066
955
  return
1067
956
  }
1068
- }
1069
- {
1070
957
  if(pattern_a.PAlias) {
1071
958
  const at_ = pattern_a.at_;
1072
959
  const pattern_ = pattern_a.pattern_;
1073
960
  const variable_ = pattern_a.variable_;
1074
- return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_core_Pair.Pair(at_, variable_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1075
- return
1076
- }
1077
- }
961
+ return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_compiler_Resolver.CaseVariable(at_, variable_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1078
962
  }
1079
963
  }
1080
964
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -1086,58 +970,48 @@ let guards_ = [];
1086
970
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
1087
971
  const self2_ = (((_c) => {
1088
972
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1089
- return p_.second_
973
+ return p_.name_
1090
974
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1091
- return p_.first_
975
+ return p_.at_
976
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.asVariables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
977
+ return p_.asBound_
1092
978
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1093
979
  }))(self_);
1094
980
  const guard_ = (((_c) => {
1095
- return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
981
+ return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_, false), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
1096
982
  }))(g_);
1097
983
  guards_ = [guard_, ...guards_];
1098
984
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1099
985
  }));
1100
986
  const self3_ = (((_c) => {
1101
987
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1102
- return p_.second_
988
+ return p_.name_
1103
989
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1104
- return p_.first_
990
+ return p_.at_
991
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.asVariables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
992
+ return p_.asBound_
1105
993
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1106
994
  }))(self_);
1107
995
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
1108
996
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1109
- })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_))
997
+ })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_, false))
1110
998
  }
1111
999
 
1112
1000
  export function Resolver_resolvePattern(self_, pattern_) {
1113
- {
1114
1001
  const self_a = self_;
1115
1002
  const pattern_a = pattern_;
1116
- {
1117
1003
  if(pattern_a.PString) {
1118
1004
  return pattern_
1119
- return
1120
- }
1121
1005
  }
1122
- {
1123
1006
  if(pattern_a.PInt) {
1124
1007
  return pattern_
1125
- return
1126
- }
1127
1008
  }
1128
- {
1129
1009
  if(pattern_a.PChar) {
1130
1010
  return pattern_
1131
- return
1132
- }
1133
1011
  }
1134
- {
1135
1012
  if(pattern_a.PVariable) {
1136
1013
  return pattern_
1137
- return
1138
- }
1139
1014
  }
1140
- {
1141
1015
  if(pattern_a.PVariant) {
1142
1016
  const at_ = pattern_a.at_;
1143
1017
  const name_ = pattern_a.name_;
@@ -1149,10 +1023,7 @@ const newPatterns_ = ff_core_List.List_map(patterns_, ((_w1) => {
1149
1023
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1150
1024
  }));
1151
1025
  return ff_compiler_Syntax.PVariant(at_, newName_, newPatterns_)
1152
- return
1153
- }
1154
1026
  }
1155
- {
1156
1027
  if(pattern_a.PVariantAs) {
1157
1028
  const at_ = pattern_a.at_;
1158
1029
  const name_ = pattern_a.name_;
@@ -1162,33 +1033,22 @@ const newName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_,
1162
1033
  return name_
1163
1034
  }));
1164
1035
  return ff_compiler_Syntax.PVariantAs(at_, newName_, variableAt_, variable_)
1165
- return
1166
- }
1167
1036
  }
1168
- {
1169
1037
  if(pattern_a.PAlias) {
1170
1038
  const at_ = pattern_a.at_;
1171
1039
  const pattern_ = pattern_a.pattern_;
1172
1040
  const variable_ = pattern_a.variable_;
1173
1041
  const newPattern_ = ff_compiler_Resolver.Resolver_resolvePattern(self_, pattern_);
1174
1042
  return ff_compiler_Syntax.PAlias(at_, newPattern_, variable_)
1175
- return
1176
- }
1177
- }
1178
1043
  }
1179
1044
  }
1180
1045
 
1181
1046
  export function Resolver_containsAsyncType(self_, type_) {
1182
- {
1183
1047
  const self_a = self_;
1184
1048
  const type_a = type_;
1185
- {
1186
1049
  if(type_a.TVariable) {
1187
1050
  return false
1188
- return
1189
- }
1190
1051
  }
1191
- {
1192
1052
  if(type_a.TConstructor) {
1193
1053
  const constructor_ = type_a;
1194
1054
  const name_ = (ff_core_String.String_contains(constructor_.name_, "$")
@@ -1207,8 +1067,6 @@ return ff_compiler_Resolver.Resolver_containsAsyncType(self_, _w1)
1207
1067
  return
1208
1068
  }
1209
1069
  }
1210
- }
1211
- }
1212
1070
 
1213
1071
  export async function Resolver_freshUnificationVariable$(self_, at_, $task) {
1214
1072
  const result_ = ff_compiler_Syntax.TVariable(at_, self_.state_.nextUnificationVariableIndex_);
@@ -1250,7 +1108,6 @@ return module2_
1250
1108
  export async function Resolver_checkInstanceType$(self_, type_, $task) {
1251
1109
  {
1252
1110
  const _1 = type_;
1253
- {
1254
1111
  if(_1.TConstructor) {
1255
1112
  const name_ = _1.name_;
1256
1113
  const typeArguments_ = _1.generics_;
@@ -1262,7 +1119,6 @@ ff_compiler_Resolver.Resolver_checkInstanceType(self_, _w1)
1262
1119
  }))
1263
1120
  return
1264
1121
  }
1265
- }
1266
1122
  {
1267
1123
 
1268
1124
  return
@@ -1277,18 +1133,13 @@ ff_core_List.List_each(imports_, ((import_) => {
1277
1133
  const _1 = ff_core_List.List_find(modules_, ((_w1) => {
1278
1134
  return (ff_core_String.String_dropLast(_w1.file_, 3) === import_.file_)
1279
1135
  }));
1280
- {
1281
1136
  if(_1.Some) {
1282
1137
  const module_ = _1.value_;
1283
1138
  resolver_ = ff_compiler_Resolver.Resolver_processDefinitions(resolver_, module_, ff_core_Option.Some(import_.alias_))
1284
1139
  return
1285
1140
  }
1286
- }
1287
- {
1288
1141
  if(_1.None) {
1289
1142
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(import_.at_, ("No such module: " + import_.file_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1290
- return
1291
- }
1292
1143
  }
1293
1144
  }
1294
1145
  }));
@@ -1300,28 +1151,18 @@ function entry_(name_, unqualified_) {
1300
1151
  const full_ = ((((ff_compiler_Syntax.PackagePair_groupName(module_.packagePair_, ":") + "/") + ff_core_String.String_dropLast(module_.file_, 3)) + ".") + name_);
1301
1152
  {
1302
1153
  const _1 = importAlias_;
1303
- {
1304
1154
  if(_1.None) {
1305
1155
  return [ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
1306
- return
1307
- }
1308
1156
  }
1309
- {
1310
1157
  if(_1.Some) {
1311
1158
  const alias_ = _1.value_;
1312
- const _guard1 = unqualified_;
1313
- if(_guard1) {
1159
+ if(unqualified_) {
1314
1160
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
1315
- return
1316
- }
1317
1161
  }
1318
1162
  }
1319
- {
1320
1163
  if(_1.Some) {
1321
1164
  const alias_ = _1.value_;
1322
1165
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(full_, full_)]
1323
- return
1324
- }
1325
1166
  }
1326
1167
  }
1327
1168
  }
@@ -1403,21 +1244,20 @@ return entry_(_w1.name_, true)
1403
1244
  const _1 = self_;
1404
1245
  {
1405
1246
  const _c = _1;
1406
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
1407
- return
1247
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
1408
1248
  }
1409
1249
  }
1410
1250
  }
1411
1251
 
1412
1252
  export async function Resolver_resolveTypeDefinition$(self_, definition_, $task) {
1413
1253
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_)) {
1414
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1254
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
1415
1255
  };
1416
1256
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1417
1257
  return ff_core_Pair.Pair(g_, g_)
1418
1258
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1419
1259
  const self2_ = (((_c) => {
1420
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1260
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1421
1261
  }))(self_);
1422
1262
  if((!ff_core_Option.Option_any(ff_core_List.List_first(definition_.generics_), ((_w1) => {
1423
1263
  return (_w1 === "Q$")
@@ -1446,14 +1286,14 @@ const _1 = f_;
1446
1286
  {
1447
1287
  const _c = _1;
1448
1288
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1449
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1289
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1450
1290
  })))
1451
1291
  return
1452
1292
  }
1453
1293
  }
1454
1294
  })), ff_core_List.List_map(definition_.variants_, ((v_) => {
1455
1295
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, v_.at_)) {
1456
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None()))
1296
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None(), true))
1457
1297
  };
1458
1298
  {
1459
1299
  const _1 = v_;
@@ -1469,7 +1309,7 @@ const _1 = f_;
1469
1309
  {
1470
1310
  const _c = _1;
1471
1311
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1472
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1312
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1473
1313
  })))
1474
1314
  return
1475
1315
  }
@@ -1486,13 +1326,13 @@ return
1486
1326
 
1487
1327
  export async function Resolver_resolveTraitDefinition$(self_, definition_, $task) {
1488
1328
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
1489
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1329
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
1490
1330
  };
1491
1331
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1492
1332
  return ff_core_Pair.Pair(g_, g_)
1493
1333
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1494
1334
  const self2_ = (((_c) => {
1495
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1335
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1496
1336
  }))(self_);
1497
1337
  {
1498
1338
  const _1 = definition_;
@@ -1512,16 +1352,12 @@ return (_w1.name_ === name_)
1512
1352
  const function1_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(lambda_));
1513
1353
  const function2_ = ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, function1_, true, false);
1514
1354
  return ff_core_Pair.Pair(name_, (((_1) => {
1515
- {
1516
1355
  if(_1.FireflyTarget) {
1517
1356
  const lambda_ = _1.lambda_;
1518
1357
  return lambda_
1519
- return
1520
- }
1521
1358
  }
1522
1359
  {
1523
1360
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(signature_.at_, "Internal error: Expected method default to be a lambda"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1524
- return
1525
1361
  }
1526
1362
  }))(function2_.body_))
1527
1363
  return
@@ -1537,13 +1373,13 @@ const traitDefinedAt_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.tra
1537
1373
  return definition_.at_
1538
1374
  }));
1539
1375
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, traitDefinedAt_))) {
1540
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None()))
1376
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None(), true))
1541
1377
  };
1542
1378
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1543
1379
  return ff_core_Pair.Pair(g_, g_)
1544
1380
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1545
1381
  const self2_ = (((_c) => {
1546
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1382
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1547
1383
  }))(self_);
1548
1384
  const traitName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self2_.traits_, definition_.traitName_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1549
1385
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(definition_.at_, ("No such trait: " + definition_.traitName_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
@@ -1569,10 +1405,10 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
1569
1405
  return ff_core_Pair.Pair(g_, g_)
1570
1406
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1571
1407
  const selfWithNoQ_ = (((_c) => {
1572
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, definition_.name_, definition_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, definition_.name_, definition_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1408
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, definition_.name_, definition_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, definition_.name_, definition_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(definition_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1573
1409
  }))(self_);
1574
1410
  const selfWithQ_ = (((_c) => {
1575
- return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.variants_, ff_core_Map.Map_add(selfWithNoQ_.types_, "Q$", "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, ff_core_Set.Set_add(selfWithNoQ_.typeParameters_, "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1411
+ return ff_compiler_Resolver.Resolver(_c.variables_, _c.variableLocations_, _c.asVariables_, _c.variants_, ff_core_Map.Map_add(selfWithNoQ_.types_, "Q$", "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, ff_core_Set.Set_add(selfWithNoQ_.typeParameters_, "Q$", ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1576
1412
  }))(selfWithNoQ_);
1577
1413
  {
1578
1414
  const _1 = definition_;
@@ -1590,65 +1426,53 @@ return
1590
1426
 
1591
1427
  export async function Resolver_resolveLetDefinition$(self_, definition_, topLevel_, $task) {
1592
1428
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
1593
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1429
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), topLevel_))
1594
1430
  };
1595
1431
  {
1596
1432
  const _1 = definition_;
1597
1433
  {
1598
1434
  const _c = _1;
1599
- return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true))
1600
- return
1435
+ return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true, false))
1601
1436
  }
1602
1437
  }
1603
1438
  }
1604
1439
 
1605
- export async function Resolver_resolveTerm$(self_, term_, topLevel_, $task) {
1440
+ export async function Resolver_resolveTerm$(self_, term_, topLevel_, inField_ = false, $task) {
1606
1441
  {
1607
- const self_a = self_;
1608
- const term_a = term_;
1609
- const topLevel_a = topLevel_;
1610
- {
1611
- if(term_a.EString) {
1442
+ const _1 = term_;
1443
+ if(_1.EString) {
1612
1444
  return term_
1613
- return
1614
- }
1615
1445
  }
1616
- {
1617
- if(term_a.EChar) {
1446
+ if(_1.EChar) {
1618
1447
  return term_
1619
- return
1620
- }
1621
1448
  }
1622
- {
1623
- if(term_a.EInt) {
1449
+ if(_1.EInt) {
1624
1450
  return term_
1625
- return
1626
- }
1627
1451
  }
1628
- {
1629
- if(term_a.EFloat) {
1452
+ if(_1.EFloat) {
1630
1453
  return term_
1631
- return
1632
- }
1633
1454
  }
1634
- {
1635
- if(term_a.EVariable) {
1636
- const e_ = term_a;
1455
+ if(_1.EVariable) {
1456
+ const e_ = _1;
1637
1457
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1638
1458
  const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocations_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1639
1459
  return e_.at_
1640
1460
  }));
1641
1461
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, at_))) {
1642
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None()))
1462
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None(), true))
1643
1463
  }
1644
1464
  };
1465
+ if(((!inField_) && ff_core_Option.Option_any(ff_core_Map.Map_get(self_.asVariables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
1466
+ return (!ff_core_Option.Option_isEmpty(_w1))
1467
+ })))) {
1468
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Only field access is allowed on as-bound variables"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1469
+ };
1645
1470
  return ff_core_Option.Option_else(ff_core_Option.Option_map(ff_core_Map.Map_get(self_.variables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
1646
1471
  {
1647
1472
  const _1 = e_;
1648
1473
  {
1649
1474
  const _c = _1;
1650
1475
  return ff_compiler_Syntax.EVariable(_c.at_, _w1)
1651
- return
1652
1476
  }
1653
1477
  }
1654
1478
  })), (() => {
@@ -1656,29 +1480,24 @@ return term_
1656
1480
  }))
1657
1481
  return
1658
1482
  }
1659
- }
1660
- {
1661
- if(term_a.EList) {
1662
- const at_ = term_a.at_;
1663
- const t_ = term_a.elementType_;
1664
- const items_ = term_a.items_;
1483
+ if(_1.EList) {
1484
+ const at_ = _1.at_;
1485
+ const t_ = _1.elementType_;
1486
+ const items_ = _1.items_;
1665
1487
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
1666
1488
  {
1667
1489
  const item_ = _1.first_;
1668
1490
  const spread_ = _1.second_;
1669
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
1670
- return
1491
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
1671
1492
  }
1672
1493
  })))
1673
1494
  return
1674
1495
  }
1675
- }
1676
- {
1677
- if(term_a.EVariant) {
1678
- const at_ = term_a.at_;
1679
- const name_ = term_a.name_;
1680
- const typeArguments_ = term_a.typeArguments_;
1681
- const arguments_ = term_a.arguments_;
1496
+ if(_1.EVariant) {
1497
+ const at_ = _1.at_;
1498
+ const name_ = _1.name_;
1499
+ const typeArguments_ = _1.typeArguments_;
1500
+ const arguments_ = _1.arguments_;
1682
1501
  return ff_compiler_Syntax.EVariant(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1683
1502
  return name_
1684
1503
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1689,20 +1508,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
1689
1508
  const _1 = a_;
1690
1509
  {
1691
1510
  const _c = _1;
1692
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1693
- return
1511
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1694
1512
  }
1695
1513
  }
1696
1514
  }))
1697
1515
  })))
1698
1516
  return
1699
1517
  }
1700
- }
1701
- {
1702
- if(term_a.EVariantIs) {
1703
- const at_ = term_a.at_;
1704
- const name_ = term_a.name_;
1705
- const typeArguments_ = term_a.typeArguments_;
1518
+ if(_1.EVariantIs) {
1519
+ const at_ = _1.at_;
1520
+ const name_ = _1.name_;
1521
+ const typeArguments_ = _1.typeArguments_;
1706
1522
  return ff_compiler_Syntax.EVariantIs(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1707
1523
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variant: " + name_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1708
1524
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1710,75 +1526,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1710
1526
  })))
1711
1527
  return
1712
1528
  }
1713
- }
1714
- {
1715
- if(term_a.ECopy) {
1716
- const at_ = term_a.at_;
1717
- const name_ = term_a.name_;
1718
- const record_ = term_a.record_;
1719
- const arguments_ = term_a.arguments_;
1529
+ if(_1.ECopy) {
1530
+ const at_ = _1.at_;
1531
+ const name_ = _1.name_;
1532
+ const record_ = _1.record_;
1533
+ const arguments_ = _1.arguments_;
1720
1534
  return ff_compiler_Syntax.ECopy(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1721
1535
  return name_
1722
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), ff_core_List.List_map(arguments_, ((f_) => {
1536
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, true), ff_core_List.List_map(arguments_, ((f_) => {
1723
1537
  {
1724
1538
  const _1 = f_;
1725
1539
  {
1726
1540
  const _c = _1;
1727
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1728
- return
1541
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1729
1542
  }
1730
1543
  }
1731
1544
  })))
1732
1545
  return
1733
1546
  }
1734
- }
1735
- {
1736
- if(term_a.EField) {
1737
- const e_ = term_a;
1547
+ if(_1.EField) {
1548
+ const e_ = _1;
1738
1549
  {
1739
1550
  const _1 = e_;
1740
1551
  {
1741
1552
  const _c = _1;
1742
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
1743
- return
1553
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
1744
1554
  }
1745
1555
  }
1746
1556
  return
1747
1557
  }
1748
- }
1749
- {
1750
- if(term_a.ELambda) {
1751
- const at_ = term_a.at_;
1752
- const lambdaAt_ = term_a.lambda_.at_;
1753
- const cases_ = term_a.lambda_.cases_;
1558
+ if(_1.ELambda) {
1559
+ const at_ = _1.at_;
1560
+ const lambdaAt_ = _1.lambda_.at_;
1561
+ const cases_ = _1.lambda_.cases_;
1754
1562
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
1755
1563
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
1756
1564
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
1757
1565
  }))))
1758
1566
  return
1759
1567
  }
1760
- }
1761
- {
1762
- if(term_a.EPipe) {
1763
- const at_ = term_a.at_;
1764
- const value_ = term_a.value_;
1765
- const effect_ = term_a.effect_;
1766
- const function_ = term_a.function_;
1767
- return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_))
1768
- return
1769
- }
1770
- }
1771
- {
1772
- if(term_a.ECall) {
1773
- const at_ = term_a.at_;
1774
- if(term_a.target_.DynamicCall) {
1775
- const target_ = term_a.target_;
1776
- const effect_ = term_a.effect_;
1777
- const typeArguments_ = term_a.typeArguments_;
1778
- const arguments_ = term_a.arguments_;
1779
- const dictionaries_ = term_a.dictionaries_;
1568
+ if(_1.EPipe) {
1569
+ const at_ = _1.at_;
1570
+ const value_ = _1.value_;
1571
+ const effect_ = _1.effect_;
1572
+ const function_ = _1.function_;
1573
+ return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_, false))
1574
+ }
1575
+ if(_1.ECall && _1.target_.DynamicCall) {
1576
+ const at_ = _1.at_;
1577
+ const target_ = _1.target_;
1578
+ const effect_ = _1.effect_;
1579
+ const typeArguments_ = _1.typeArguments_;
1580
+ const arguments_ = _1.arguments_;
1581
+ const dictionaries_ = _1.dictionaries_;
1780
1582
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
1781
- return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_), _c.tailCall_)
1583
+ return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_, false), _c.tailCall_)
1782
1584
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
1783
1585
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1784
1586
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -1786,44 +1588,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1786
1588
  const _1 = a_;
1787
1589
  {
1788
1590
  const _c = _1;
1789
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1790
- return
1591
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1791
1592
  }
1792
1593
  }
1793
1594
  })), dictionaries_)
1794
1595
  return
1795
1596
  }
1796
- }
1797
- }
1798
- {
1799
- if(term_a.ECall) {
1800
- const at_ = term_a.at_;
1801
- if(term_a.target_.StaticCall) {
1597
+ if(_1.ECall && _1.target_.StaticCall) {
1802
1598
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Internal error: Static calls not expected in the Resolver phase"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1803
- return
1804
- }
1805
- }
1806
1599
  }
1807
- {
1808
- if(term_a.ERecord) {
1809
- const at_ = term_a.at_;
1810
- const fields_ = term_a.fields_;
1600
+ if(_1.ERecord) {
1601
+ const at_ = _1.at_;
1602
+ const fields_ = _1.fields_;
1811
1603
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
1812
1604
  {
1813
1605
  const _1 = f_;
1814
1606
  {
1815
1607
  const _c = _1;
1816
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1817
- return
1608
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1818
1609
  }
1819
1610
  }
1820
1611
  })))
1821
1612
  return
1822
1613
  }
1823
- }
1824
- {
1825
- if(term_a.EWildcard) {
1826
- const e_ = term_a;
1614
+ if(_1.EWildcard) {
1615
+ const e_ = _1;
1827
1616
  if((e_.index_ === 0)) {
1828
1617
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Unbound wildcard"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1829
1618
  };
@@ -1832,17 +1621,14 @@ const _1 = e_;
1832
1621
  {
1833
1622
  const _c = _1;
1834
1623
  return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
1835
- return
1836
1624
  }
1837
1625
  }
1838
1626
  return
1839
1627
  }
1840
- }
1841
- {
1842
- if(term_a.EFunctions) {
1843
- const at_ = term_a.at_;
1844
- const functions_ = term_a.functions_;
1845
- const body_ = term_a.body_;
1628
+ if(_1.EFunctions) {
1629
+ const at_ = _1.at_;
1630
+ const functions_ = _1.functions_;
1631
+ const body_ = _1.body_;
1846
1632
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
1847
1633
  return _w1.signature_.name_
1848
1634
  })), ((name_) => {
@@ -1854,83 +1640,66 @@ return _w1.signature_
1854
1640
  return ff_core_Pair.Pair(s_.name_, s_.at_)
1855
1641
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1856
1642
  const self2_ = (((_c) => {
1857
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, functionMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, locationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1643
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, functionMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, locationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1858
1644
  }))(self_);
1859
1645
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
1860
1646
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
1861
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
1647
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
1862
1648
  return
1863
1649
  }
1864
- }
1865
- {
1866
- if(term_a.ELet) {
1867
- const e_ = term_a;
1650
+ if(_1.ELet) {
1651
+ const e_ = _1;
1868
1652
  const self2_ = (((_c) => {
1869
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1653
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1870
1654
  }))(self_);
1871
1655
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1872
1656
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
1873
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None()))
1657
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None(), false))
1874
1658
  }
1875
1659
  };
1876
1660
  {
1877
1661
  const _1 = e_;
1878
1662
  {
1879
1663
  const _c = _1;
1880
- return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_))
1881
- return
1882
- }
1883
- }
1884
- return
1664
+ return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_, false))
1885
1665
  }
1886
1666
  }
1887
- {
1888
- if(term_a.ESequential) {
1889
- const at_ = term_a.at_;
1890
- const before_ = term_a.before_;
1891
- const after_ = term_a.after_;
1892
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
1893
1667
  return
1894
1668
  }
1669
+ if(_1.ESequential) {
1670
+ const at_ = _1.at_;
1671
+ const before_ = _1.before_;
1672
+ const after_ = _1.after_;
1673
+ return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_, false))
1895
1674
  }
1896
- {
1897
- if(term_a.EAssign) {
1898
- const at_ = term_a.at_;
1899
- const operator_ = term_a.operator_;
1900
- const variable_ = term_a.variable_;
1901
- const value_ = term_a.value_;
1675
+ if(_1.EAssign) {
1676
+ const at_ = _1.at_;
1677
+ const operator_ = _1.operator_;
1678
+ const variable_ = _1.variable_;
1679
+ const value_ = _1.value_;
1902
1680
  return ff_compiler_Syntax.EAssign(at_, operator_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variables_, variable_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1903
1681
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variable: " + variable_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1904
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1905
- return
1906
- }
1907
- }
1908
- {
1909
- if(term_a.EAssignField) {
1910
- const at_ = term_a.at_;
1911
- const operator_ = term_a.operator_;
1912
- const record_ = term_a.record_;
1913
- const field_ = term_a.field_;
1914
- const value_ = term_a.value_;
1915
- return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1682
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
1916
1683
  return
1917
1684
  }
1685
+ if(_1.EAssignField) {
1686
+ const at_ = _1.at_;
1687
+ const operator_ = _1.operator_;
1688
+ const record_ = _1.record_;
1689
+ const field_ = _1.field_;
1690
+ const value_ = _1.value_;
1691
+ return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, false), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
1918
1692
  }
1919
1693
  }
1920
1694
  }
1921
1695
 
1922
1696
  export async function Resolver_resolveType$(self_, type_, topLevel_, $task) {
1923
- {
1924
1697
  const self_a = self_;
1925
1698
  const type_a = type_;
1926
1699
  const topLevel_a = topLevel_;
1927
- {
1928
1700
  if(type_a.TVariable) {
1929
1701
  return type_
1930
- return
1931
- }
1932
1702
  }
1933
- {
1934
1703
  if(type_a.TConstructor) {
1935
1704
  const constructor_ = type_a;
1936
1705
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -1965,7 +1734,6 @@ const _1 = constructor_;
1965
1734
  {
1966
1735
  const _c = _1;
1967
1736
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...arguments_, returnType_])
1968
- return
1969
1737
  }
1970
1738
  }
1971
1739
  } else {
@@ -1974,15 +1742,12 @@ const _1 = constructor_;
1974
1742
  {
1975
1743
  const _c = _1;
1976
1744
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...generics_])
1977
- return
1978
1745
  }
1979
1746
  }
1980
1747
  }
1981
1748
  return
1982
1749
  }
1983
1750
  }
1984
- }
1985
- }
1986
1751
 
1987
1752
  export async function Resolver_makeEffectArgument$(self_, at_, topLevel_, $task) {
1988
1753
  if(topLevel_) {
@@ -2038,7 +1803,7 @@ return ff_compiler_Syntax.DFunction(definition_.at_, signature_, body_)
2038
1803
 
2039
1804
  export async function Resolver_resolveSignature$(self_, signature_, topLevel_, isInstanceMethod_, $task) {
2040
1805
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, signature_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, signature_.at_))) {
2041
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_))
1806
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_, topLevel_))
2042
1807
  };
2043
1808
  const newSignature_ = (topLevel_
2044
1809
  ? (((_c) => {
@@ -2065,7 +1830,7 @@ const _1 = p_;
2065
1830
  {
2066
1831
  const _c = _1;
2067
1832
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self2_, p_.valueType_, topLevel_), ff_core_Option.Option_map(p_.default_, ((_w1) => {
2068
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
1833
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
2069
1834
  })))
2070
1835
  return
2071
1836
  }
@@ -2092,53 +1857,31 @@ return ff_core_Pair.Pair(name_, name_)
2092
1857
  const _1 = self_;
2093
1858
  {
2094
1859
  const _c = _1;
2095
- return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
2096
- return
1860
+ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.asVariables_, _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
2097
1861
  }
2098
1862
  }
2099
1863
  }
2100
1864
 
2101
1865
  export async function Resolver_resolveCase$(self_, case_, topLevel_, $task) {
2102
1866
  function findVariables_(pattern_) {
2103
- {
2104
1867
  const pattern_a = pattern_;
2105
- {
2106
1868
  if(pattern_a.PString) {
2107
1869
  return ff_core_Map.empty_()
2108
- return
2109
1870
  }
2110
- }
2111
- {
2112
1871
  if(pattern_a.PInt) {
2113
1872
  return ff_core_Map.empty_()
2114
- return
2115
1873
  }
2116
- }
2117
- {
2118
1874
  if(pattern_a.PChar) {
2119
1875
  return ff_core_Map.empty_()
2120
- return
2121
1876
  }
2122
- }
2123
- {
2124
- if(pattern_a.PVariable) {
1877
+ if(pattern_a.PVariable && pattern_a.name_.Some) {
2125
1878
  const at_ = pattern_a.at_;
2126
- if(pattern_a.name_.Some) {
2127
1879
  const name_ = pattern_a.name_.value_;
2128
- return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_core_Pair.Pair(at_, name_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2129
- return
2130
- }
2131
- }
1880
+ return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_compiler_Resolver.CaseVariable(at_, name_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2132
1881
  }
2133
- {
2134
- if(pattern_a.PVariable) {
2135
- if(pattern_a.name_.None) {
1882
+ if(pattern_a.PVariable && pattern_a.name_.None) {
2136
1883
  return ff_core_Map.empty_()
2137
- return
2138
- }
2139
- }
2140
1884
  }
2141
- {
2142
1885
  if(pattern_a.PVariant) {
2143
1886
  const patterns_ = pattern_a.patterns_;
2144
1887
  return ff_core_List.List_foldLeft(ff_core_List.List_map(patterns_, ((pattern_) => {
@@ -2148,27 +1891,21 @@ return ff_core_Map.Map_addAll(_w1, _w2, ff_core_Ordering.ff_core_Ordering_Order$
2148
1891
  }))
2149
1892
  return
2150
1893
  }
2151
- }
2152
- {
2153
1894
  if(pattern_a.PVariantAs) {
2154
1895
  const at_ = pattern_a.at_;
1896
+ const variant_ = pattern_a.name_;
2155
1897
  const variableAt_ = pattern_a.variableAt_;
2156
1898
  const variable_ = pattern_a.variable_;
2157
1899
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
2158
- return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
1900
+ return ff_core_Pair.Pair(x_, ff_compiler_Resolver.CaseVariable(variableAt_, x_, ff_core_Option.Some(variant_)))
2159
1901
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2160
1902
  return
2161
1903
  }
2162
- }
2163
- {
2164
1904
  if(pattern_a.PAlias) {
2165
1905
  const at_ = pattern_a.at_;
2166
1906
  const pattern_ = pattern_a.pattern_;
2167
1907
  const variable_ = pattern_a.variable_;
2168
- return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_core_Pair.Pair(at_, variable_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2169
- return
2170
- }
2171
- }
1908
+ return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_compiler_Resolver.CaseVariable(at_, variable_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2172
1909
  }
2173
1910
  }
2174
1911
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -2180,58 +1917,48 @@ let guards_ = [];
2180
1917
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
2181
1918
  const self2_ = (((_c) => {
2182
1919
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
2183
- return p_.second_
1920
+ return p_.name_
2184
1921
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
2185
- return p_.first_
1922
+ return p_.at_
1923
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.asVariables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1924
+ return p_.asBound_
2186
1925
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
2187
1926
  }))(self_);
2188
1927
  const guard_ = (((_c) => {
2189
- return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
1928
+ return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_, false), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
2190
1929
  }))(g_);
2191
1930
  guards_ = [guard_, ...guards_];
2192
1931
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2193
1932
  }));
2194
1933
  const self3_ = (((_c) => {
2195
1934
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
2196
- return p_.second_
1935
+ return p_.name_
2197
1936
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
2198
- return p_.first_
1937
+ return p_.at_
1938
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.asVariables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1939
+ return p_.asBound_
2199
1940
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
2200
1941
  }))(self_);
2201
1942
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
2202
1943
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
2203
- })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_))
1944
+ })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_, false))
2204
1945
  }
2205
1946
 
2206
1947
  export async function Resolver_resolvePattern$(self_, pattern_, $task) {
2207
- {
2208
1948
  const self_a = self_;
2209
1949
  const pattern_a = pattern_;
2210
- {
2211
1950
  if(pattern_a.PString) {
2212
1951
  return pattern_
2213
- return
2214
- }
2215
1952
  }
2216
- {
2217
1953
  if(pattern_a.PInt) {
2218
1954
  return pattern_
2219
- return
2220
- }
2221
1955
  }
2222
- {
2223
1956
  if(pattern_a.PChar) {
2224
1957
  return pattern_
2225
- return
2226
- }
2227
1958
  }
2228
- {
2229
1959
  if(pattern_a.PVariable) {
2230
1960
  return pattern_
2231
- return
2232
- }
2233
1961
  }
2234
- {
2235
1962
  if(pattern_a.PVariant) {
2236
1963
  const at_ = pattern_a.at_;
2237
1964
  const name_ = pattern_a.name_;
@@ -2243,10 +1970,7 @@ const newPatterns_ = ff_core_List.List_map(patterns_, ((_w1) => {
2243
1970
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
2244
1971
  }));
2245
1972
  return ff_compiler_Syntax.PVariant(at_, newName_, newPatterns_)
2246
- return
2247
- }
2248
1973
  }
2249
- {
2250
1974
  if(pattern_a.PVariantAs) {
2251
1975
  const at_ = pattern_a.at_;
2252
1976
  const name_ = pattern_a.name_;
@@ -2256,33 +1980,22 @@ const newName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_,
2256
1980
  return name_
2257
1981
  }));
2258
1982
  return ff_compiler_Syntax.PVariantAs(at_, newName_, variableAt_, variable_)
2259
- return
2260
- }
2261
1983
  }
2262
- {
2263
1984
  if(pattern_a.PAlias) {
2264
1985
  const at_ = pattern_a.at_;
2265
1986
  const pattern_ = pattern_a.pattern_;
2266
1987
  const variable_ = pattern_a.variable_;
2267
1988
  const newPattern_ = ff_compiler_Resolver.Resolver_resolvePattern(self_, pattern_);
2268
1989
  return ff_compiler_Syntax.PAlias(at_, newPattern_, variable_)
2269
- return
2270
- }
2271
- }
2272
1990
  }
2273
1991
  }
2274
1992
 
2275
1993
  export async function Resolver_containsAsyncType$(self_, type_, $task) {
2276
- {
2277
1994
  const self_a = self_;
2278
1995
  const type_a = type_;
2279
- {
2280
1996
  if(type_a.TVariable) {
2281
1997
  return false
2282
- return
2283
- }
2284
1998
  }
2285
- {
2286
1999
  if(type_a.TConstructor) {
2287
2000
  const constructor_ = type_a;
2288
2001
  const name_ = (ff_core_String.String_contains(constructor_.name_, "$")
@@ -2301,9 +2014,170 @@ return ff_compiler_Resolver.Resolver_containsAsyncType(self_, _w1)
2301
2014
  return
2302
2015
  }
2303
2016
  }
2017
+
2018
+ export const ff_core_Any_HasAnyTag$ff_compiler_Resolver_CaseVariable = {
2019
+ anyTag_() {
2020
+ return ff_core_Any.internalAnyTag_((("ff:compiler/Resolver.CaseVariable" + "[") + "]"))
2021
+ },
2022
+ async anyTag_$($task) {
2023
+ return ff_core_Any.internalAnyTag_((("ff:compiler/Resolver.CaseVariable" + "[") + "]"))
2024
+ }
2025
+ };
2026
+
2027
+ export const ff_core_Show_Show$ff_compiler_Resolver_CaseVariable = {
2028
+ show_(value_) {
2029
+ const value_a = value_;
2030
+ {
2031
+ const z_ = value_a;
2032
+ return ((((((("CaseVariable" + "(") + ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Location.show_(z_.at_)) + ", ") + ff_core_Show.ff_core_Show_Show$ff_core_String_String.show_(z_.name_)) + ", ") + ff_core_Option.ff_core_Show_Show$ff_core_Option_Option(ff_core_Show.ff_core_Show_Show$ff_core_String_String).show_(z_.asBound_)) + ")")
2304
2033
  }
2034
+ },
2035
+ async show_$(value_, $task) {
2036
+ const value_a = value_;
2037
+ {
2038
+ const z_ = value_a;
2039
+ return ((((((("CaseVariable" + "(") + ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Location.show_(z_.at_)) + ", ") + ff_core_Show.ff_core_Show_Show$ff_core_String_String.show_(z_.name_)) + ", ") + ff_core_Option.ff_core_Show_Show$ff_core_Option_Option(ff_core_Show.ff_core_Show_Show$ff_core_String_String).show_(z_.asBound_)) + ")")
2305
2040
  }
2041
+ }
2042
+ };
2306
2043
 
2044
+ export const ff_core_Equal_Equal$ff_compiler_Resolver_CaseVariable = {
2045
+ equals_(x_, y_) {
2046
+ const x_a = x_;
2047
+ const y_a = y_;
2048
+ if((x_ === y_)) {
2049
+ return true
2050
+ }
2051
+ {
2052
+ return (ff_compiler_Syntax.ff_core_Equal_Equal$ff_compiler_Syntax_Location.equals_(x_.at_, y_.at_) && ((x_.name_ === y_.name_) && ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String).equals_(x_.asBound_, y_.asBound_)))
2053
+ }
2054
+ },
2055
+ async equals_$(x_, y_, $task) {
2056
+ const x_a = x_;
2057
+ const y_a = y_;
2058
+ if((x_ === y_)) {
2059
+ return true
2060
+ }
2061
+ {
2062
+ return (ff_compiler_Syntax.ff_core_Equal_Equal$ff_compiler_Syntax_Location.equals_(x_.at_, y_.at_) && ((x_.name_ === y_.name_) && ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String).equals_(x_.asBound_, y_.asBound_)))
2063
+ }
2064
+ }
2065
+ };
2066
+
2067
+ export const ff_core_Ordering_Order$ff_compiler_Resolver_CaseVariable = {
2068
+ compare_(x_, y_) {
2069
+ const x_a = x_;
2070
+ const y_a = y_;
2071
+ if((x_ === y_)) {
2072
+ return ff_core_Ordering.OrderingSame()
2073
+ }
2074
+ {
2075
+ const atOrdering_ = ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_Location.compare_(x_.at_, y_.at_);
2076
+ if((atOrdering_ !== ff_core_Ordering.OrderingSame())) {
2077
+ return atOrdering_
2078
+ } else {
2079
+ const nameOrdering_ = ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String.compare_(x_.name_, y_.name_);
2080
+ if((nameOrdering_ !== ff_core_Ordering.OrderingSame())) {
2081
+ return nameOrdering_
2082
+ } else {
2083
+ const asBoundOrdering_ = ff_core_Option.ff_core_Ordering_Order$ff_core_Option_Option(ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String).compare_(x_.asBound_, y_.asBound_);
2084
+ if((asBoundOrdering_ !== ff_core_Ordering.OrderingSame())) {
2085
+ return asBoundOrdering_
2086
+ } else {
2087
+ return ff_core_Ordering.OrderingSame()
2088
+ }
2089
+ }
2090
+ }
2091
+ return
2092
+ }
2093
+ },
2094
+ async compare_$(x_, y_, $task) {
2095
+ const x_a = x_;
2096
+ const y_a = y_;
2097
+ if((x_ === y_)) {
2098
+ return ff_core_Ordering.OrderingSame()
2099
+ }
2100
+ {
2101
+ const atOrdering_ = ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_Location.compare_(x_.at_, y_.at_);
2102
+ if((atOrdering_ !== ff_core_Ordering.OrderingSame())) {
2103
+ return atOrdering_
2104
+ } else {
2105
+ const nameOrdering_ = ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String.compare_(x_.name_, y_.name_);
2106
+ if((nameOrdering_ !== ff_core_Ordering.OrderingSame())) {
2107
+ return nameOrdering_
2108
+ } else {
2109
+ const asBoundOrdering_ = ff_core_Option.ff_core_Ordering_Order$ff_core_Option_Option(ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String).compare_(x_.asBound_, y_.asBound_);
2110
+ if((asBoundOrdering_ !== ff_core_Ordering.OrderingSame())) {
2111
+ return asBoundOrdering_
2112
+ } else {
2113
+ return ff_core_Ordering.OrderingSame()
2114
+ }
2115
+ }
2116
+ }
2117
+ return
2118
+ }
2119
+ }
2120
+ };
2307
2121
 
2122
+ export const ff_core_Serializable_Serializable$ff_compiler_Resolver_CaseVariable = {
2123
+ serializeUsing_(serialization_, value_) {
2124
+ const serialization_a = serialization_;
2125
+ const value_a = value_;
2126
+ {
2127
+ const v_ = value_a;
2128
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2129
+ ff_core_Serializable.Serialization_autoResize(serialization_, 1);
2130
+ ff_core_Buffer.Buffer_setUint8(serialization_.buffer_, serialization_.offset_, 0);
2131
+ serialization_.offset_ += 1;
2132
+ ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.serializeUsing_(serialization_, v_.at_);
2133
+ ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.serializeUsing_(serialization_, v_.name_);
2134
+ ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).serializeUsing_(serialization_, v_.asBound_)
2135
+ return
2136
+ }
2137
+ },
2138
+ deserializeUsing_(serialization_) {
2139
+ const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
2140
+ serialization_.offset_ += 1;
2141
+ {
2142
+ const _1 = variantIndex_;
2143
+ if(_1 === 0) {
2144
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2145
+ return ff_compiler_Resolver.CaseVariable(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.deserializeUsing_(serialization_), 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_))
2146
+ }
2147
+ {
2148
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Serializable.DeserializationChecksumException(), ff_core_Serializable.ff_core_Any_HasAnyTag$ff_core_Serializable_DeserializationChecksumException)})
2149
+ }
2150
+ }
2151
+ },
2152
+ async serializeUsing_$(serialization_, value_, $task) {
2153
+ const serialization_a = serialization_;
2154
+ const value_a = value_;
2155
+ {
2156
+ const v_ = value_a;
2157
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2158
+ ff_core_Serializable.Serialization_autoResize(serialization_, 1);
2159
+ ff_core_Buffer.Buffer_setUint8(serialization_.buffer_, serialization_.offset_, 0);
2160
+ serialization_.offset_ += 1;
2161
+ ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.serializeUsing_(serialization_, v_.at_);
2162
+ ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.serializeUsing_(serialization_, v_.name_);
2163
+ ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).serializeUsing_(serialization_, v_.asBound_)
2164
+ return
2165
+ }
2166
+ },
2167
+ async deserializeUsing_$(serialization_, $task) {
2168
+ const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
2169
+ serialization_.offset_ += 1;
2170
+ {
2171
+ const _1 = variantIndex_;
2172
+ if(_1 === 0) {
2173
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2174
+ return ff_compiler_Resolver.CaseVariable(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.deserializeUsing_(serialization_), 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_))
2175
+ }
2176
+ {
2177
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Serializable.DeserializationChecksumException(), ff_core_Serializable.ff_core_Any_HasAnyTag$ff_core_Serializable_DeserializationChecksumException)})
2178
+ }
2179
+ }
2180
+ }
2181
+ };
2308
2182
 
2309
2183