firefly-compiler 0.4.21 → 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.
@@ -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_) {
@@ -292,7 +297,7 @@ return entry_(_w1.name_, true)
292
297
  const _1 = self_;
293
298
  {
294
299
  const _c = _1;
295
- 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_)
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_)
296
301
  }
297
302
  }
298
303
  }
@@ -305,7 +310,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
305
310
  return ff_core_Pair.Pair(g_, g_)
306
311
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
307
312
  const self2_ = (((_c) => {
308
- 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_)
309
314
  }))(self_);
310
315
  if((!ff_core_Option.Option_any(ff_core_List.List_first(definition_.generics_), ((_w1) => {
311
316
  return (_w1 === "Q$")
@@ -334,7 +339,7 @@ const _1 = f_;
334
339
  {
335
340
  const _c = _1;
336
341
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
337
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
342
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
338
343
  })))
339
344
  return
340
345
  }
@@ -357,7 +362,7 @@ const _1 = f_;
357
362
  {
358
363
  const _c = _1;
359
364
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
360
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
365
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
361
366
  })))
362
367
  return
363
368
  }
@@ -380,7 +385,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
380
385
  return ff_core_Pair.Pair(g_, g_)
381
386
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
382
387
  const self2_ = (((_c) => {
383
- 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_)
384
389
  }))(self_);
385
390
  {
386
391
  const _1 = definition_;
@@ -427,7 +432,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
427
432
  return ff_core_Pair.Pair(g_, g_)
428
433
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
429
434
  const self2_ = (((_c) => {
430
- 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_)
431
436
  }))(self_);
432
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), (() => {
433
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)})
@@ -453,10 +458,10 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
453
458
  return ff_core_Pair.Pair(g_, g_)
454
459
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
455
460
  const selfWithNoQ_ = (((_c) => {
456
- 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_)
457
462
  }))(self_);
458
463
  const selfWithQ_ = (((_c) => {
459
- 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_)
460
465
  }))(selfWithNoQ_);
461
466
  {
462
467
  const _1 = definition_;
@@ -480,29 +485,28 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
480
485
  const _1 = definition_;
481
486
  {
482
487
  const _c = _1;
483
- 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))
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))
484
489
  }
485
490
  }
486
491
  }
487
492
 
488
- export function Resolver_resolveTerm(self_, term_, topLevel_) {
489
- const self_a = self_;
490
- const term_a = term_;
491
- const topLevel_a = topLevel_;
492
- if(term_a.EString) {
493
+ export function Resolver_resolveTerm(self_, term_, topLevel_, inField_ = false) {
494
+ {
495
+ const _1 = term_;
496
+ if(_1.EString) {
493
497
  return term_
494
498
  }
495
- if(term_a.EChar) {
499
+ if(_1.EChar) {
496
500
  return term_
497
501
  }
498
- if(term_a.EInt) {
502
+ if(_1.EInt) {
499
503
  return term_
500
504
  }
501
- if(term_a.EFloat) {
505
+ if(_1.EFloat) {
502
506
  return term_
503
507
  }
504
- if(term_a.EVariable) {
505
- const e_ = term_a;
508
+ if(_1.EVariable) {
509
+ const e_ = _1;
506
510
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
507
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), (() => {
508
512
  return e_.at_
@@ -511,6 +515,11 @@ if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspH
511
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))
512
516
  }
513
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
+ };
514
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) => {
515
524
  {
516
525
  const _1 = e_;
@@ -524,24 +533,24 @@ return term_
524
533
  }))
525
534
  return
526
535
  }
527
- if(term_a.EList) {
528
- const at_ = term_a.at_;
529
- const t_ = term_a.elementType_;
530
- const items_ = term_a.items_;
536
+ if(_1.EList) {
537
+ const at_ = _1.at_;
538
+ const t_ = _1.elementType_;
539
+ const items_ = _1.items_;
531
540
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
532
541
  {
533
542
  const item_ = _1.first_;
534
543
  const spread_ = _1.second_;
535
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
544
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
536
545
  }
537
546
  })))
538
547
  return
539
548
  }
540
- if(term_a.EVariant) {
541
- const at_ = term_a.at_;
542
- const name_ = term_a.name_;
543
- const typeArguments_ = term_a.typeArguments_;
544
- 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_;
545
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), (() => {
546
555
  return name_
547
556
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -552,17 +561,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
552
561
  const _1 = a_;
553
562
  {
554
563
  const _c = _1;
555
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
564
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
556
565
  }
557
566
  }
558
567
  }))
559
568
  })))
560
569
  return
561
570
  }
562
- if(term_a.EVariantIs) {
563
- const at_ = term_a.at_;
564
- const name_ = term_a.name_;
565
- const typeArguments_ = term_a.typeArguments_;
571
+ if(_1.EVariantIs) {
572
+ const at_ = _1.at_;
573
+ const name_ = _1.name_;
574
+ const typeArguments_ = _1.typeArguments_;
566
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), (() => {
567
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)})
568
577
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -570,61 +579,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
570
579
  })))
571
580
  return
572
581
  }
573
- if(term_a.ECopy) {
574
- const at_ = term_a.at_;
575
- const name_ = term_a.name_;
576
- const record_ = term_a.record_;
577
- 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_;
578
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), (() => {
579
588
  return name_
580
- })), 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_) => {
581
590
  {
582
591
  const _1 = f_;
583
592
  {
584
593
  const _c = _1;
585
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
594
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
586
595
  }
587
596
  }
588
597
  })))
589
598
  return
590
599
  }
591
- if(term_a.EField) {
592
- const e_ = term_a;
600
+ if(_1.EField) {
601
+ const e_ = _1;
593
602
  {
594
603
  const _1 = e_;
595
604
  {
596
605
  const _c = _1;
597
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
606
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
598
607
  }
599
608
  }
600
609
  return
601
610
  }
602
- if(term_a.ELambda) {
603
- const at_ = term_a.at_;
604
- const lambdaAt_ = term_a.lambda_.at_;
605
- 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_;
606
615
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
607
616
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
608
617
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
609
618
  }))))
610
619
  return
611
620
  }
612
- if(term_a.EPipe) {
613
- const at_ = term_a.at_;
614
- const value_ = term_a.value_;
615
- const effect_ = term_a.effect_;
616
- const function_ = term_a.function_;
617
- 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_))
618
- }
619
- if(term_a.ECall && term_a.target_.DynamicCall) {
620
- const at_ = term_a.at_;
621
- const target_ = term_a.target_;
622
- const effect_ = term_a.effect_;
623
- const typeArguments_ = term_a.typeArguments_;
624
- const arguments_ = term_a.arguments_;
625
- 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_;
626
635
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
627
- 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_)
628
637
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
629
638
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
630
639
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -632,31 +641,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
632
641
  const _1 = a_;
633
642
  {
634
643
  const _c = _1;
635
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
644
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
636
645
  }
637
646
  }
638
647
  })), dictionaries_)
639
648
  return
640
649
  }
641
- if(term_a.ECall && term_a.target_.StaticCall) {
650
+ if(_1.ECall && _1.target_.StaticCall) {
642
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)})
643
652
  }
644
- if(term_a.ERecord) {
645
- const at_ = term_a.at_;
646
- const fields_ = term_a.fields_;
653
+ if(_1.ERecord) {
654
+ const at_ = _1.at_;
655
+ const fields_ = _1.fields_;
647
656
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
648
657
  {
649
658
  const _1 = f_;
650
659
  {
651
660
  const _c = _1;
652
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
661
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
653
662
  }
654
663
  }
655
664
  })))
656
665
  return
657
666
  }
658
- if(term_a.EWildcard) {
659
- const e_ = term_a;
667
+ if(_1.EWildcard) {
668
+ const e_ = _1;
660
669
  if((e_.index_ === 0)) {
661
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)})
662
671
  };
@@ -669,10 +678,10 @@ return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
669
678
  }
670
679
  return
671
680
  }
672
- if(term_a.EFunctions) {
673
- const at_ = term_a.at_;
674
- const functions_ = term_a.functions_;
675
- const body_ = term_a.body_;
681
+ if(_1.EFunctions) {
682
+ const at_ = _1.at_;
683
+ const functions_ = _1.functions_;
684
+ const body_ = _1.body_;
676
685
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
677
686
  return _w1.signature_.name_
678
687
  })), ((name_) => {
@@ -684,17 +693,17 @@ return _w1.signature_
684
693
  return ff_core_Pair.Pair(s_.name_, s_.at_)
685
694
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
686
695
  const self2_ = (((_c) => {
687
- 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_)
688
697
  }))(self_);
689
698
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
690
699
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
691
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
700
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
692
701
  return
693
702
  }
694
- if(term_a.ELet) {
695
- const e_ = term_a;
703
+ if(_1.ELet) {
704
+ const e_ = _1;
696
705
  const self2_ = (((_c) => {
697
- 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_)
698
707
  }))(self_);
699
708
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
700
709
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
@@ -705,34 +714,35 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
705
714
  const _1 = e_;
706
715
  {
707
716
  const _c = _1;
708
- 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_))
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))
709
718
  }
710
719
  }
711
720
  return
712
721
  }
713
- if(term_a.ESequential) {
714
- const at_ = term_a.at_;
715
- const before_ = term_a.before_;
716
- const after_ = term_a.after_;
717
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
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))
718
727
  }
719
- if(term_a.EAssign) {
720
- const at_ = term_a.at_;
721
- const operator_ = term_a.operator_;
722
- const variable_ = term_a.variable_;
723
- 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_;
724
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), (() => {
725
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)})
726
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
735
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
727
736
  return
728
737
  }
729
- if(term_a.EAssignField) {
730
- const at_ = term_a.at_;
731
- const operator_ = term_a.operator_;
732
- const record_ = term_a.record_;
733
- const field_ = term_a.field_;
734
- const value_ = term_a.value_;
735
- return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
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))
745
+ }
736
746
  }
737
747
  }
738
748
 
@@ -873,7 +883,7 @@ const _1 = p_;
873
883
  {
874
884
  const _c = _1;
875
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) => {
876
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
886
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
877
887
  })))
878
888
  return
879
889
  }
@@ -900,7 +910,7 @@ return ff_core_Pair.Pair(name_, name_)
900
910
  const _1 = self_;
901
911
  {
902
912
  const _c = _1;
903
- 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_)
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_)
904
914
  }
905
915
  }
906
916
  }
@@ -920,7 +930,7 @@ return ff_core_Map.empty_()
920
930
  if(pattern_a.PVariable && pattern_a.name_.Some) {
921
931
  const at_ = pattern_a.at_;
922
932
  const name_ = pattern_a.name_.value_;
923
- 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)
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)
924
934
  }
925
935
  if(pattern_a.PVariable && pattern_a.name_.None) {
926
936
  return ff_core_Map.empty_()
@@ -936,10 +946,11 @@ return
936
946
  }
937
947
  if(pattern_a.PVariantAs) {
938
948
  const at_ = pattern_a.at_;
949
+ const variant_ = pattern_a.name_;
939
950
  const variableAt_ = pattern_a.variableAt_;
940
951
  const variable_ = pattern_a.variable_;
941
952
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
942
- 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_)))
943
954
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
944
955
  return
945
956
  }
@@ -947,7 +958,7 @@ if(pattern_a.PAlias) {
947
958
  const at_ = pattern_a.at_;
948
959
  const pattern_ = pattern_a.pattern_;
949
960
  const variable_ = pattern_a.variable_;
950
- 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)
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)
951
962
  }
952
963
  }
953
964
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -959,27 +970,31 @@ let guards_ = [];
959
970
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
960
971
  const self2_ = (((_c) => {
961
972
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
962
- return p_.second_
973
+ return p_.name_
963
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_) => {
964
- 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_
965
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_)
966
979
  }))(self_);
967
980
  const guard_ = (((_c) => {
968
- 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_))
969
982
  }))(g_);
970
983
  guards_ = [guard_, ...guards_];
971
984
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
972
985
  }));
973
986
  const self3_ = (((_c) => {
974
987
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
975
- return p_.second_
988
+ return p_.name_
976
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_) => {
977
- 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_
978
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_)
979
994
  }))(self_);
980
995
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
981
996
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
982
- })), 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))
983
998
  }
984
999
 
985
1000
  export function Resolver_resolvePattern(self_, pattern_) {
@@ -1229,7 +1244,7 @@ return entry_(_w1.name_, true)
1229
1244
  const _1 = self_;
1230
1245
  {
1231
1246
  const _c = _1;
1232
- 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_)
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_)
1233
1248
  }
1234
1249
  }
1235
1250
  }
@@ -1242,7 +1257,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
1242
1257
  return ff_core_Pair.Pair(g_, g_)
1243
1258
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1244
1259
  const self2_ = (((_c) => {
1245
- 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_)
1246
1261
  }))(self_);
1247
1262
  if((!ff_core_Option.Option_any(ff_core_List.List_first(definition_.generics_), ((_w1) => {
1248
1263
  return (_w1 === "Q$")
@@ -1271,7 +1286,7 @@ const _1 = f_;
1271
1286
  {
1272
1287
  const _c = _1;
1273
1288
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1274
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1289
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1275
1290
  })))
1276
1291
  return
1277
1292
  }
@@ -1294,7 +1309,7 @@ const _1 = f_;
1294
1309
  {
1295
1310
  const _c = _1;
1296
1311
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1297
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1312
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1298
1313
  })))
1299
1314
  return
1300
1315
  }
@@ -1317,7 +1332,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
1317
1332
  return ff_core_Pair.Pair(g_, g_)
1318
1333
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1319
1334
  const self2_ = (((_c) => {
1320
- 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_)
1321
1336
  }))(self_);
1322
1337
  {
1323
1338
  const _1 = definition_;
@@ -1364,7 +1379,7 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
1364
1379
  return ff_core_Pair.Pair(g_, g_)
1365
1380
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1366
1381
  const self2_ = (((_c) => {
1367
- 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_)
1368
1383
  }))(self_);
1369
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), (() => {
1370
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)})
@@ -1390,10 +1405,10 @@ const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.gene
1390
1405
  return ff_core_Pair.Pair(g_, g_)
1391
1406
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1392
1407
  const selfWithNoQ_ = (((_c) => {
1393
- 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_)
1394
1409
  }))(self_);
1395
1410
  const selfWithQ_ = (((_c) => {
1396
- 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_)
1397
1412
  }))(selfWithNoQ_);
1398
1413
  {
1399
1414
  const _1 = definition_;
@@ -1417,29 +1432,28 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
1417
1432
  const _1 = definition_;
1418
1433
  {
1419
1434
  const _c = _1;
1420
- 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))
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))
1421
1436
  }
1422
1437
  }
1423
1438
  }
1424
1439
 
1425
- export async function Resolver_resolveTerm$(self_, term_, topLevel_, $task) {
1426
- const self_a = self_;
1427
- const term_a = term_;
1428
- const topLevel_a = topLevel_;
1429
- if(term_a.EString) {
1440
+ export async function Resolver_resolveTerm$(self_, term_, topLevel_, inField_ = false, $task) {
1441
+ {
1442
+ const _1 = term_;
1443
+ if(_1.EString) {
1430
1444
  return term_
1431
1445
  }
1432
- if(term_a.EChar) {
1446
+ if(_1.EChar) {
1433
1447
  return term_
1434
1448
  }
1435
- if(term_a.EInt) {
1449
+ if(_1.EInt) {
1436
1450
  return term_
1437
1451
  }
1438
- if(term_a.EFloat) {
1452
+ if(_1.EFloat) {
1439
1453
  return term_
1440
1454
  }
1441
- if(term_a.EVariable) {
1442
- const e_ = term_a;
1455
+ if(_1.EVariable) {
1456
+ const e_ = _1;
1443
1457
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1444
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), (() => {
1445
1459
  return e_.at_
@@ -1448,6 +1462,11 @@ if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspH
1448
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))
1449
1463
  }
1450
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
+ };
1451
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) => {
1452
1471
  {
1453
1472
  const _1 = e_;
@@ -1461,24 +1480,24 @@ return term_
1461
1480
  }))
1462
1481
  return
1463
1482
  }
1464
- if(term_a.EList) {
1465
- const at_ = term_a.at_;
1466
- const t_ = term_a.elementType_;
1467
- const items_ = term_a.items_;
1483
+ if(_1.EList) {
1484
+ const at_ = _1.at_;
1485
+ const t_ = _1.elementType_;
1486
+ const items_ = _1.items_;
1468
1487
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
1469
1488
  {
1470
1489
  const item_ = _1.first_;
1471
1490
  const spread_ = _1.second_;
1472
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
1491
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
1473
1492
  }
1474
1493
  })))
1475
1494
  return
1476
1495
  }
1477
- if(term_a.EVariant) {
1478
- const at_ = term_a.at_;
1479
- const name_ = term_a.name_;
1480
- const typeArguments_ = term_a.typeArguments_;
1481
- 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_;
1482
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), (() => {
1483
1502
  return name_
1484
1503
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1489,17 +1508,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
1489
1508
  const _1 = a_;
1490
1509
  {
1491
1510
  const _c = _1;
1492
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1511
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1493
1512
  }
1494
1513
  }
1495
1514
  }))
1496
1515
  })))
1497
1516
  return
1498
1517
  }
1499
- if(term_a.EVariantIs) {
1500
- const at_ = term_a.at_;
1501
- const name_ = term_a.name_;
1502
- const typeArguments_ = term_a.typeArguments_;
1518
+ if(_1.EVariantIs) {
1519
+ const at_ = _1.at_;
1520
+ const name_ = _1.name_;
1521
+ const typeArguments_ = _1.typeArguments_;
1503
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), (() => {
1504
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)})
1505
1524
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1507,61 +1526,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1507
1526
  })))
1508
1527
  return
1509
1528
  }
1510
- if(term_a.ECopy) {
1511
- const at_ = term_a.at_;
1512
- const name_ = term_a.name_;
1513
- const record_ = term_a.record_;
1514
- 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_;
1515
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), (() => {
1516
1535
  return name_
1517
- })), 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_) => {
1518
1537
  {
1519
1538
  const _1 = f_;
1520
1539
  {
1521
1540
  const _c = _1;
1522
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1541
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1523
1542
  }
1524
1543
  }
1525
1544
  })))
1526
1545
  return
1527
1546
  }
1528
- if(term_a.EField) {
1529
- const e_ = term_a;
1547
+ if(_1.EField) {
1548
+ const e_ = _1;
1530
1549
  {
1531
1550
  const _1 = e_;
1532
1551
  {
1533
1552
  const _c = _1;
1534
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
1553
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
1535
1554
  }
1536
1555
  }
1537
1556
  return
1538
1557
  }
1539
- if(term_a.ELambda) {
1540
- const at_ = term_a.at_;
1541
- const lambdaAt_ = term_a.lambda_.at_;
1542
- 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_;
1543
1562
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
1544
1563
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
1545
1564
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
1546
1565
  }))))
1547
1566
  return
1548
1567
  }
1549
- if(term_a.EPipe) {
1550
- const at_ = term_a.at_;
1551
- const value_ = term_a.value_;
1552
- const effect_ = term_a.effect_;
1553
- const function_ = term_a.function_;
1554
- 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_))
1555
- }
1556
- if(term_a.ECall && term_a.target_.DynamicCall) {
1557
- const at_ = term_a.at_;
1558
- const target_ = term_a.target_;
1559
- const effect_ = term_a.effect_;
1560
- const typeArguments_ = term_a.typeArguments_;
1561
- const arguments_ = term_a.arguments_;
1562
- 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_;
1563
1582
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
1564
- 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_)
1565
1584
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
1566
1585
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1567
1586
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -1569,31 +1588,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1569
1588
  const _1 = a_;
1570
1589
  {
1571
1590
  const _c = _1;
1572
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1591
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1573
1592
  }
1574
1593
  }
1575
1594
  })), dictionaries_)
1576
1595
  return
1577
1596
  }
1578
- if(term_a.ECall && term_a.target_.StaticCall) {
1597
+ if(_1.ECall && _1.target_.StaticCall) {
1579
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)})
1580
1599
  }
1581
- if(term_a.ERecord) {
1582
- const at_ = term_a.at_;
1583
- const fields_ = term_a.fields_;
1600
+ if(_1.ERecord) {
1601
+ const at_ = _1.at_;
1602
+ const fields_ = _1.fields_;
1584
1603
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
1585
1604
  {
1586
1605
  const _1 = f_;
1587
1606
  {
1588
1607
  const _c = _1;
1589
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1608
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1590
1609
  }
1591
1610
  }
1592
1611
  })))
1593
1612
  return
1594
1613
  }
1595
- if(term_a.EWildcard) {
1596
- const e_ = term_a;
1614
+ if(_1.EWildcard) {
1615
+ const e_ = _1;
1597
1616
  if((e_.index_ === 0)) {
1598
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)})
1599
1618
  };
@@ -1606,10 +1625,10 @@ return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
1606
1625
  }
1607
1626
  return
1608
1627
  }
1609
- if(term_a.EFunctions) {
1610
- const at_ = term_a.at_;
1611
- const functions_ = term_a.functions_;
1612
- const body_ = term_a.body_;
1628
+ if(_1.EFunctions) {
1629
+ const at_ = _1.at_;
1630
+ const functions_ = _1.functions_;
1631
+ const body_ = _1.body_;
1613
1632
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
1614
1633
  return _w1.signature_.name_
1615
1634
  })), ((name_) => {
@@ -1621,17 +1640,17 @@ return _w1.signature_
1621
1640
  return ff_core_Pair.Pair(s_.name_, s_.at_)
1622
1641
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
1623
1642
  const self2_ = (((_c) => {
1624
- 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_)
1625
1644
  }))(self_);
1626
1645
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
1627
1646
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
1628
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
1647
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
1629
1648
  return
1630
1649
  }
1631
- if(term_a.ELet) {
1632
- const e_ = term_a;
1650
+ if(_1.ELet) {
1651
+ const e_ = _1;
1633
1652
  const self2_ = (((_c) => {
1634
- 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_)
1635
1654
  }))(self_);
1636
1655
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1637
1656
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
@@ -1642,34 +1661,35 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
1642
1661
  const _1 = e_;
1643
1662
  {
1644
1663
  const _c = _1;
1645
- 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_))
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))
1646
1665
  }
1647
1666
  }
1648
1667
  return
1649
1668
  }
1650
- if(term_a.ESequential) {
1651
- const at_ = term_a.at_;
1652
- const before_ = term_a.before_;
1653
- const after_ = term_a.after_;
1654
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
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))
1655
1674
  }
1656
- if(term_a.EAssign) {
1657
- const at_ = term_a.at_;
1658
- const operator_ = term_a.operator_;
1659
- const variable_ = term_a.variable_;
1660
- 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_;
1661
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), (() => {
1662
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)})
1663
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1682
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
1664
1683
  return
1665
1684
  }
1666
- if(term_a.EAssignField) {
1667
- const at_ = term_a.at_;
1668
- const operator_ = term_a.operator_;
1669
- const record_ = term_a.record_;
1670
- const field_ = term_a.field_;
1671
- const value_ = term_a.value_;
1672
- return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
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))
1692
+ }
1673
1693
  }
1674
1694
  }
1675
1695
 
@@ -1810,7 +1830,7 @@ const _1 = p_;
1810
1830
  {
1811
1831
  const _c = _1;
1812
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) => {
1813
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
1833
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
1814
1834
  })))
1815
1835
  return
1816
1836
  }
@@ -1837,7 +1857,7 @@ return ff_core_Pair.Pair(name_, name_)
1837
1857
  const _1 = self_;
1838
1858
  {
1839
1859
  const _c = _1;
1840
- 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_)
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_)
1841
1861
  }
1842
1862
  }
1843
1863
  }
@@ -1857,7 +1877,7 @@ return ff_core_Map.empty_()
1857
1877
  if(pattern_a.PVariable && pattern_a.name_.Some) {
1858
1878
  const at_ = pattern_a.at_;
1859
1879
  const name_ = pattern_a.name_.value_;
1860
- 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)
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)
1861
1881
  }
1862
1882
  if(pattern_a.PVariable && pattern_a.name_.None) {
1863
1883
  return ff_core_Map.empty_()
@@ -1873,10 +1893,11 @@ return
1873
1893
  }
1874
1894
  if(pattern_a.PVariantAs) {
1875
1895
  const at_ = pattern_a.at_;
1896
+ const variant_ = pattern_a.name_;
1876
1897
  const variableAt_ = pattern_a.variableAt_;
1877
1898
  const variable_ = pattern_a.variable_;
1878
1899
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
1879
- 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_)))
1880
1901
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1881
1902
  return
1882
1903
  }
@@ -1884,7 +1905,7 @@ if(pattern_a.PAlias) {
1884
1905
  const at_ = pattern_a.at_;
1885
1906
  const pattern_ = pattern_a.pattern_;
1886
1907
  const variable_ = pattern_a.variable_;
1887
- 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)
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)
1888
1909
  }
1889
1910
  }
1890
1911
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -1896,27 +1917,31 @@ let guards_ = [];
1896
1917
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
1897
1918
  const self2_ = (((_c) => {
1898
1919
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1899
- return p_.second_
1920
+ return p_.name_
1900
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_) => {
1901
- 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_
1902
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_)
1903
1926
  }))(self_);
1904
1927
  const guard_ = (((_c) => {
1905
- 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_))
1906
1929
  }))(g_);
1907
1930
  guards_ = [guard_, ...guards_];
1908
1931
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1909
1932
  }));
1910
1933
  const self3_ = (((_c) => {
1911
1934
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1912
- return p_.second_
1935
+ return p_.name_
1913
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_) => {
1914
- 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_
1915
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_)
1916
1941
  }))(self_);
1917
1942
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
1918
1943
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1919
- })), 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))
1920
1945
  }
1921
1946
 
1922
1947
  export async function Resolver_resolvePattern$(self_, pattern_, $task) {
@@ -1990,6 +2015,169 @@ return
1990
2015
  }
1991
2016
  }
1992
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_)) + ")")
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_)) + ")")
2040
+ }
2041
+ }
2042
+ };
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
+ };
1993
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
+ };
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
+ };
1994
2182
 
1995
2183