@magnusopera/fscript 0.77.0 → 0.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/FScript.Language/Ast.js +2 -2
  2. package/dist/FScript.Language/BuiltinFunctions.js +68 -67
  3. package/dist/FScript.Language/BuiltinSignatures.js +7 -7
  4. package/dist/FScript.Language/BuiltinTypes.js +3 -3
  5. package/dist/FScript.Language/Error.js +2 -2
  6. package/dist/FScript.Language/Eval.js +305 -213
  7. package/dist/FScript.Language/IncludeResolver.js +97 -79
  8. package/dist/FScript.Language/Interactive.js +149 -0
  9. package/dist/FScript.Language/Lexer.js +77 -77
  10. package/dist/FScript.Language/Parser.js +274 -272
  11. package/dist/FScript.Language/Pretty.js +4 -4
  12. package/dist/FScript.Language/Span.js +2 -2
  13. package/dist/FScript.Language/Token.js +59 -2
  14. package/dist/FScript.Language/TypeInfer.js +452 -348
  15. package/dist/FScript.Language/Types.js +22 -10
  16. package/dist/FScript.Language/Value.js +3 -2
  17. package/dist/Library.js +91 -79
  18. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Array.js +36 -35
  19. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Async.js +52 -23
  20. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/AsyncBuilder.js +23 -2
  21. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/BigInt.js +33 -32
  22. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/BitConverter.js +2 -2
  23. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/CHANGELOG.md +80 -1
  24. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Date.js +8 -15
  25. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/DateOffset.js +8 -17
  26. package/dist/fable_modules/fable-library-js.5.13.0/Directory.js +11 -0
  27. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Double.js +8 -2
  28. package/dist/fable_modules/fable-library-js.5.13.0/Environment.js +3 -0
  29. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Event.js +10 -1
  30. package/dist/fable_modules/fable-library-js.5.13.0/File.js +27 -0
  31. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/List.js +35 -21
  32. package/dist/fable_modules/fable-library-js.5.13.0/Long.js +38 -0
  33. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MailboxProcessor.js +11 -5
  34. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Map.js +8 -4
  35. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MutableMap.js +2 -2
  36. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MutableSet.js +1 -1
  37. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Observable.js +5 -3
  38. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Option.js +1 -18
  39. package/dist/fable_modules/fable-library-js.5.13.0/Path.js +31 -0
  40. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Reflection.js +13 -3
  41. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/RegExp.js +53 -24
  42. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Seq.js +109 -22
  43. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Set.js +16 -3
  44. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/String.js +28 -1
  45. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.js +15 -9
  46. package/dist/fable_modules/fable-library-js.5.13.0/Task.js +27 -0
  47. package/dist/fable_modules/fable-library-js.5.13.0/TaskBuilder.js +72 -0
  48. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Types.js +12 -12
  49. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Util.js +15 -3
  50. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/package.json +1 -1
  51. package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/quotation.js +25 -8
  52. package/dist/fable_modules/project_cracked.json +1 -1
  53. package/package.json +1 -1
  54. package/dist/fable_modules/fable-library-js.5.2.0/Long.js +0 -47
  55. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Boolean.js +0 -0
  56. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Char.js +0 -0
  57. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Choice.js +0 -0
  58. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/CollectionUtil.js +0 -0
  59. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/ConditionalWeakTable.js +0 -0
  60. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/DateOnly.js +0 -0
  61. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Decimal.js +0 -0
  62. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Encoding.js +0 -0
  63. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Collections.js +0 -0
  64. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Core.CompilerServices.js +0 -0
  65. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Core.js +0 -0
  66. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Global.js +0 -0
  67. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Guid.js +0 -0
  68. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Int32.js +0 -0
  69. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MapUtil.js +0 -0
  70. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Native.js +0 -0
  71. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Numeric.js +0 -0
  72. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/README.md +0 -0
  73. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Random.js +0 -0
  74. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Range.js +0 -0
  75. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Result.js +0 -0
  76. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Seq2.js +0 -0
  77. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.Collections.Generic.js +0 -0
  78. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.Text.js +0 -0
  79. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/TimeOnly.js +0 -0
  80. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/TimeSpan.js +0 -0
  81. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Timer.js +0 -0
  82. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Unicode.13.0.0.js +0 -0
  83. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Uri.js +0 -0
  84. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/big.d.ts +0 -0
  85. /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/lib/big.js +0 -0
@@ -1,19 +1,18 @@
1
1
 
2
- import { printf, toText, isNullOrWhiteSpace, concat, endsWith, substring, split, join, trimEnd, startsWith, replace, isNullOrEmpty, compare } from "../fable_modules/fable-library-js.5.2.0/String.js";
3
- import { exists, choose, collect, append, map, ofArray, fold as fold_1, singleton, empty, tail as tail_2, cons, head as head_1, isEmpty, reverse } from "../fable_modules/fable-library-js.5.2.0/List.js";
4
- import { fold } from "../fable_modules/fable-library-js.5.2.0/Array.js";
2
+ import { printf, toText, isNullOrWhiteSpace, concat, endsWith, substring, split, join, trimEnd, startsWith, replace, isNullOrEmpty, compare } from "../fable_modules/fable-library-js.5.13.0/String.js";
3
+ import { exists, choose, collect, append, map, ofArray, fold as fold_1, singleton, empty, tail as tail_2, cons, head as head_1, isEmpty, reverse } from "../fable_modules/fable-library-js.5.13.0/List.js";
4
+ import { fold } from "../fable_modules/fable-library-js.5.13.0/Array.js";
5
5
  import { ParseException, ParseError } from "./Error.js";
6
- import { isLetterOrDigit, isLetter } from "../fable_modules/fable-library-js.5.2.0/Char.js";
7
- import { toList as toList_1, fold as fold_2, forAll } from "../fable_modules/fable-library-js.5.2.0/Seq.js";
8
- import { union, toList, ofList, FSharpSet__Contains, empty as empty_1, add } from "../fable_modules/fable-library-js.5.2.0/Set.js";
9
- import { curry4, defaultOf, disposeSafe, getEnumerator, Exception, curry2, comparePrimitives } from "../fable_modules/fable-library-js.5.2.0/Util.js";
10
- import { empty as empty_2, add as add_1, FSharpMap__ContainsKey, FSharpMap__get_Item } from "../fable_modules/fable-library-js.5.2.0/Map.js";
6
+ import { isLetterOrDigit, isLetter } from "../fable_modules/fable-library-js.5.13.0/Char.js";
7
+ import { toList as toList_1, fold as fold_2, forAll } from "../fable_modules/fable-library-js.5.13.0/Seq.js";
8
+ import { union, toList, ofList, FSharpSet__Contains, empty as empty_1, add } from "../fable_modules/fable-library-js.5.13.0/Set.js";
9
+ import { curry4, defaultOf, disposeSafe, getEnumerator, Exception, curry2, comparePrimitives } from "../fable_modules/fable-library-js.5.13.0/Util.js";
10
+ import { empty as empty_2, add as add_1, FSharpMap__ContainsKey, FSharpMap__get_Item } from "../fable_modules/fable-library-js.5.13.0/Map.js";
11
11
  import { TypeDef, Stmt, InterpolatedPart, MapEntry, Param, Expr, Pattern, TypeRef } from "./Ast.js";
12
- import { map as map_1 } from "../fable_modules/fable-library-js.5.2.0/Option.js";
13
12
  import { parseProgramWithSourceName } from "./Parser.js";
14
- import { FSharpRef } from "../fable_modules/fable-library-js.5.2.0/Types.js";
13
+ import { FSharpRef } from "../fable_modules/fable-library-js.5.13.0/Types.js";
15
14
  import { Span, Position } from "./Span.js";
16
- import { addToSet, tryGetValue } from "../fable_modules/fable-library-js.5.2.0/MapUtil.js";
15
+ import { addToSet, tryGetValue } from "../fable_modules/fable-library-js.5.13.0/MapUtil.js";
17
16
 
18
17
  const pathComparison = 4;
19
18
 
@@ -151,7 +150,9 @@ function ensureWithinRoot(rootDirectoryWithSeparator, path, span) {
151
150
  const fullPath = normalizePath(path);
152
151
  const fullRoot = trimTrailingDirectorySeparators(rootDirectoryWithSeparator);
153
152
  const rootWithSeparator = endsWith(fullRoot, "/", 4) ? fullRoot : (fullRoot + "/");
154
- if (!((compare(fullPath, fullRoot, pathComparison) === 0) ? true : startsWith(fullPath, rootWithSeparator, pathComparison))) {
153
+ const isRootItself = compare(fullPath, fullRoot, pathComparison) === 0;
154
+ const isUnderRoot = startsWith(fullPath, rootWithSeparator, pathComparison);
155
+ if (!(isRootItself ? true : isUnderRoot)) {
155
156
  throw new ParseException(new ParseError(concat("Imported file \'", fullPath, "\' is outside of sandbox root"), span));
156
157
  }
157
158
  return fullPath;
@@ -304,10 +305,9 @@ function rewriteNameWithAliases(aliases, name) {
304
305
  }
305
306
 
306
307
  function rewriteNameWithSelfPrefix(selfPrefix, selfNames, boundNames, name) {
307
- let prefix;
308
308
  let matchResult, prefix_1;
309
309
  if (selfPrefix != null) {
310
- if ((prefix = selfPrefix, FSharpSet__Contains(selfNames, name) && !FSharpSet__Contains(boundNames, name))) {
310
+ if (FSharpSet__Contains(selfNames, name) && !FSharpSet__Contains(boundNames, name)) {
311
311
  matchResult = 0;
312
312
  prefix_1 = selfPrefix;
313
313
  }
@@ -327,7 +327,6 @@ function rewriteNameWithSelfPrefix(selfPrefix, selfNames, boundNames, name) {
327
327
  }
328
328
 
329
329
  function rewriteTypeName(aliases, selfPrefix, selfTypeNames, name) {
330
- let prefix;
331
330
  const aliasRewritten = rewriteNameWithAliases(aliases, name);
332
331
  if (aliasRewritten !== name) {
333
332
  return aliasRewritten;
@@ -335,7 +334,7 @@ function rewriteTypeName(aliases, selfPrefix, selfTypeNames, name) {
335
334
  else {
336
335
  let matchResult, prefix_1;
337
336
  if (selfPrefix != null) {
338
- if ((prefix = selfPrefix, FSharpSet__Contains(selfTypeNames, name))) {
337
+ if (FSharpSet__Contains(selfTypeNames, name)) {
339
338
  matchResult = 0;
340
339
  prefix_1 = selfPrefix;
341
340
  }
@@ -367,36 +366,37 @@ function rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, qualifier) {
367
366
  function rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref) {
368
367
  switch (tref.tag) {
369
368
  case 1:
370
- return new TypeRef(1, [map((tref_1) => rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref_1), tref.fields[0])]);
369
+ return new TypeRef(/* TRTuple */ 1, [map((tref_1) => rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref_1), tref.fields[0])]);
371
370
  case 2:
372
- return new TypeRef(2, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[1])]);
371
+ return new TypeRef(/* TRFun */ 2, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[1])]);
373
372
  case 3:
374
- return new TypeRef(3, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), tref.fields[1]]);
373
+ return new TypeRef(/* TRPostfix */ 3, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), tref.fields[1]]);
375
374
  case 4:
376
- return new TypeRef(4, [map((tupledArg) => [tupledArg[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg[1])], tref.fields[0])]);
375
+ return new TypeRef(/* TRRecord */ 4, [map((tupledArg) => [tupledArg[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg[1])], tref.fields[0])]);
377
376
  case 5:
378
- return new TypeRef(5, [map((tupledArg_1) => [tupledArg_1[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], tref.fields[0])]);
377
+ return new TypeRef(/* TRStructuralRecord */ 5, [map((tupledArg_1) => [tupledArg_1[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], tref.fields[0])]);
379
378
  default:
380
- return new TypeRef(0, [rewriteTypeName(aliases, selfPrefix, selfTypeNames, tref.fields[0])]);
379
+ return new TypeRef(/* TRName */ 0, [rewriteTypeName(aliases, selfPrefix, selfTypeNames, tref.fields[0])]);
381
380
  }
382
381
  }
383
382
 
384
383
  function rewritePattern(aliases, selfPrefix, selfTypeNames, pat) {
384
+ let option_1, option_3;
385
385
  switch (pat.tag) {
386
386
  case 4:
387
- return new Pattern(4, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[1]), pat.fields[2]]);
387
+ return new Pattern(/* PCons */ 4, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[1]), pat.fields[2]]);
388
388
  case 5:
389
- return new Pattern(5, [map((pat_1) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_1), pat.fields[0]), pat.fields[1]]);
389
+ return new Pattern(/* PTuple */ 5, [map((pat_1) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_1), pat.fields[0]), pat.fields[1]]);
390
390
  case 6:
391
- return new Pattern(6, [map((tupledArg) => [tupledArg[0], rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg[1])], pat.fields[0]), pat.fields[1]]);
391
+ return new Pattern(/* PRecord */ 6, [map((tupledArg) => [tupledArg[0], rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg[1])], pat.fields[0]), pat.fields[1]]);
392
392
  case 7:
393
- return new Pattern(7, [map((tupledArg_1) => [rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], pat.fields[0]), map_1((pat_2) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_2), pat.fields[1]), pat.fields[2]]);
393
+ return new Pattern(/* PMap */ 7, [map((tupledArg_1) => [rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], pat.fields[0]), (option_1 = pat.fields[1], (option_1 != null) ? rewritePattern(aliases, selfPrefix, selfTypeNames, option_1) : undefined), pat.fields[2]]);
394
394
  case 8:
395
- return new Pattern(8, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
395
+ return new Pattern(/* PSome */ 8, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
396
396
  case 10:
397
- return new Pattern(10, [rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1], map_1((pat_3) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_3), pat.fields[2]), pat.fields[3]]);
397
+ return new Pattern(/* PUnionCase */ 10, [rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1], (option_3 = pat.fields[2], (option_3 != null) ? rewritePattern(aliases, selfPrefix, selfTypeNames, option_3) : undefined), pat.fields[3]]);
398
398
  case 11:
399
- return new Pattern(11, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
399
+ return new Pattern(/* PTypeRef */ 11, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
400
400
  default:
401
401
  return pat;
402
402
  }
@@ -459,90 +459,97 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
459
459
  }
460
460
  };
461
461
  const rewriteExpr = (boundNames_1, expr) => {
462
- let rest;
462
+ let option_1;
463
463
  switch (expr.tag) {
464
464
  case 2:
465
- return new Expr(2, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
465
+ return new Expr(/* EVar */ 2, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
466
466
  case 29:
467
- return new Expr(29, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
467
+ return new Expr(/* ENameOf */ 29, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
468
468
  case 28:
469
- return new Expr(28, [rewriteTypeName(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]), expr.fields[1]]);
469
+ return new Expr(/* ETypeOf */ 28, [rewriteTypeName(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]), expr.fields[1]]);
470
470
  case 3:
471
- return new Expr(3, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
471
+ return new Expr(/* EParen */ 3, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
472
472
  case 4: {
473
473
  const param = expr.fields[0];
474
- return new Expr(4, [new Param(param.Name, map_1((tref) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref), param.Annotation), param.Span), rewriteExpr(add(param.Name, boundNames_1), expr.fields[1]), expr.fields[2]]);
474
+ return new Expr(/* ELambda */ 4, [new Param(param.Name, (option_1 = param.Annotation, (option_1 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_1) : undefined), param.Span), rewriteExpr(add(param.Name, boundNames_1), expr.fields[1]), expr.fields[2]]);
475
475
  }
476
476
  case 5:
477
- return new Expr(5, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
477
+ return new Expr(/* EApply */ 5, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
478
478
  case 6:
479
- return new Expr(6, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
479
+ return new Expr(/* EIf */ 6, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
480
480
  case 7:
481
- return new Expr(7, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
481
+ return new Expr(/* ERaise */ 7, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
482
482
  case 8: {
483
483
  const name_6 = expr.fields[0];
484
- return new Expr(8, [name_6, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(add(name_6, boundNames_1), expr.fields[2]), expr.fields[3]]);
484
+ return new Expr(/* EFor */ 8, [name_6, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(add(name_6, boundNames_1), expr.fields[2]), expr.fields[3]]);
485
485
  }
486
486
  case 9: {
487
487
  const rewrittenCases = map((tupledArg_1) => {
488
+ let mapping_4, option_3;
488
489
  const rewrittenPattern = rewritePattern(aliases, selfPrefix, topLevelTypeNames, tupledArg_1[0]);
489
490
  const boundWithPattern = union(boundNames_1, collectPatternBindings(rewrittenPattern));
490
- return [rewrittenPattern, map_1(curry2(rewriteExpr)(boundWithPattern), tupledArg_1[1]), rewriteExpr(boundWithPattern, tupledArg_1[2]), tupledArg_1[3]];
491
+ return [rewrittenPattern, (mapping_4 = curry2(rewriteExpr)(boundWithPattern), (option_3 = tupledArg_1[1], (option_3 != null) ? mapping_4(option_3) : undefined)), rewriteExpr(boundWithPattern, tupledArg_1[2]), tupledArg_1[3]];
491
492
  }, expr.fields[1]);
492
- return new Expr(9, [rewriteExpr(boundNames_1, expr.fields[0]), rewrittenCases, expr.fields[2]]);
493
+ return new Expr(/* EMatch */ 9, [rewriteExpr(boundNames_1, expr.fields[0]), rewrittenCases, expr.fields[2]]);
493
494
  }
494
495
  case 10: {
495
496
  const valueExpr_1 = expr.fields[1];
496
497
  const span_10 = expr.fields[5];
497
498
  const name_7 = expr.fields[0];
498
499
  const bodyExpr = expr.fields[2];
499
- const rewrittenReturnAnnotation = map_1((tref_1) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_1), expr.fields[4]);
500
+ let rewrittenReturnAnnotation;
501
+ const option_5 = expr.fields[4];
502
+ rewrittenReturnAnnotation = ((option_5 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_5) : undefined);
500
503
  if (expr.fields[3]) {
501
504
  const boundWithName = add(name_7, boundNames_1);
502
- return new Expr(10, [name_7, rewriteExpr(boundWithName, valueExpr_1), rewriteExpr(boundWithName, bodyExpr), true, rewrittenReturnAnnotation, span_10]);
505
+ return new Expr(/* ELet */ 10, [name_7, rewriteExpr(boundWithName, valueExpr_1), rewriteExpr(boundWithName, bodyExpr), true, rewrittenReturnAnnotation, span_10]);
503
506
  }
504
507
  else {
505
- return new Expr(10, [name_7, rewriteExpr(boundNames_1, valueExpr_1), rewriteExpr(add(name_7, boundNames_1), bodyExpr), false, rewrittenReturnAnnotation, span_10]);
508
+ return new Expr(/* ELet */ 10, [name_7, rewriteExpr(boundNames_1, valueExpr_1), rewriteExpr(add(name_7, boundNames_1), bodyExpr), false, rewrittenReturnAnnotation, span_10]);
506
509
  }
507
510
  }
508
511
  case 11: {
509
512
  const rewrittenPattern_1 = rewritePattern(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]);
510
513
  const boundWithPattern_1 = union(boundNames_1, collectPatternBindings(rewrittenPattern_1));
511
- return new Expr(11, [rewrittenPattern_1, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundWithPattern_1, expr.fields[2]), expr.fields[3]]);
514
+ return new Expr(/* ELetPattern */ 11, [rewrittenPattern_1, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundWithPattern_1, expr.fields[2]), expr.fields[3]]);
512
515
  }
513
516
  case 12: {
514
517
  const bindings_1 = expr.fields[0];
515
518
  const recursiveBound = union(boundNames_1, ofList(map((tupledArg_2) => tupledArg_2[0], bindings_1), {
516
519
  Compare: (x_2, y_2) => (comparePrimitives(x_2, y_2) | 0),
517
520
  }));
518
- return new Expr(12, [map((tupledArg_3) => {
519
- const rewrittenArgs = map((p) => (new Param(p.Name, map_1((tref_2) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_2), p.Annotation), p.Span)), tupledArg_3[1]);
520
- return [tupledArg_3[0], rewrittenArgs, map_1((tref_3) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_3), tupledArg_3[2]), rewriteExpr(fold_1((s, p_1) => add(p_1.Name, s), recursiveBound, rewrittenArgs), tupledArg_3[3]), tupledArg_3[4]];
521
+ return new Expr(/* ELetRecGroup */ 12, [map((tupledArg_3) => {
522
+ let option_9;
523
+ const rewrittenArgs = map((p) => {
524
+ let option_7;
525
+ return new Param(p.Name, (option_7 = p.Annotation, (option_7 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_7) : undefined), p.Span);
526
+ }, tupledArg_3[1]);
527
+ return [tupledArg_3[0], rewrittenArgs, (option_9 = tupledArg_3[2], (option_9 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_9) : undefined), rewriteExpr(fold_1((s, p_1) => add(p_1.Name, s), recursiveBound, rewrittenArgs), tupledArg_3[3]), tupledArg_3[4]];
521
528
  }, bindings_1), rewriteExpr(recursiveBound, expr.fields[1]), expr.fields[2]]);
522
529
  }
523
530
  case 13:
524
- return new Expr(13, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
531
+ return new Expr(/* EList */ 13, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
525
532
  case 14:
526
- return new Expr(14, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
533
+ return new Expr(/* ERange */ 14, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
527
534
  case 15:
528
- return new Expr(15, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
535
+ return new Expr(/* ETuple */ 15, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
529
536
  case 16:
530
- return new Expr(16, [map((tupledArg_4) => [tupledArg_4[0], rewriteExpr(boundNames_1, tupledArg_4[1])], expr.fields[0]), expr.fields[1]]);
537
+ return new Expr(/* ERecord */ 16, [map((tupledArg_4) => [tupledArg_4[0], rewriteExpr(boundNames_1, tupledArg_4[1])], expr.fields[0]), expr.fields[1]]);
531
538
  case 17:
532
- return new Expr(17, [map((tupledArg_5) => [tupledArg_5[0], rewriteExpr(boundNames_1, tupledArg_5[1])], expr.fields[0]), expr.fields[1]]);
539
+ return new Expr(/* EStructuralRecord */ 17, [map((tupledArg_5) => [tupledArg_5[0], rewriteExpr(boundNames_1, tupledArg_5[1])], expr.fields[0]), expr.fields[1]]);
533
540
  case 18:
534
- return new Expr(18, [map((_arg_10) => {
541
+ return new Expr(/* EMap */ 18, [map((_arg_10) => {
535
542
  if (_arg_10.tag === 1) {
536
- return new MapEntry(1, [rewriteExpr(boundNames_1, _arg_10.fields[0])]);
543
+ return new MapEntry(/* MESpread */ 1, [rewriteExpr(boundNames_1, _arg_10.fields[0])]);
537
544
  }
538
545
  else {
539
- return new MapEntry(0, [rewriteExpr(boundNames_1, _arg_10.fields[0]), rewriteExpr(boundNames_1, _arg_10.fields[1])]);
546
+ return new MapEntry(/* MEKeyValue */ 0, [rewriteExpr(boundNames_1, _arg_10.fields[0]), rewriteExpr(boundNames_1, _arg_10.fields[1])]);
540
547
  }
541
548
  }, expr.fields[0]), expr.fields[1]]);
542
549
  case 19:
543
- return new Expr(19, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_6) => [tupledArg_6[0], rewriteExpr(boundNames_1, tupledArg_6[1])], expr.fields[1]), expr.fields[2]]);
550
+ return new Expr(/* ERecordUpdate */ 19, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_6) => [tupledArg_6[0], rewriteExpr(boundNames_1, tupledArg_6[1])], expr.fields[1]), expr.fields[2]]);
544
551
  case 20:
545
- return new Expr(20, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_7) => [tupledArg_7[0], rewriteExpr(boundNames_1, tupledArg_7[1])], expr.fields[1]), expr.fields[2]]);
552
+ return new Expr(/* EStructuralRecordUpdate */ 20, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_7) => [tupledArg_7[0], rewriteExpr(boundNames_1, tupledArg_7[1])], expr.fields[1]), expr.fields[2]]);
546
553
  case 21: {
547
554
  const target_2 = expr.fields[0];
548
555
  const span_21 = expr.fields[2];
@@ -551,7 +558,7 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
551
558
  let matchResult, rest_1, root_1;
552
559
  if (matchValue != null) {
553
560
  if (!isEmpty(matchValue)) {
554
- if ((rest = tail_2(matchValue), FSharpMap__ContainsKey(aliases, head_1(matchValue)))) {
561
+ if ((tail_2(matchValue), FSharpMap__ContainsKey(aliases, head_1(matchValue)))) {
555
562
  matchResult = 0;
556
563
  rest_1 = tail_2(matchValue);
557
564
  root_1 = head_1(matchValue);
@@ -569,28 +576,28 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
569
576
  }
570
577
  switch (matchResult) {
571
578
  case 0:
572
- return new Expr(2, [(FSharpMap__get_Item(aliases, root_1) + ".") + joinDotted(append(rest_1, singleton(fieldName))), span_21]);
579
+ return new Expr(/* EVar */ 2, [(FSharpMap__get_Item(aliases, root_1) + ".") + joinDotted(append(rest_1, singleton(fieldName))), span_21]);
573
580
  default:
574
- return new Expr(21, [rewriteExpr(boundNames_1, target_2), fieldName, span_21]);
581
+ return new Expr(/* EFieldGet */ 21, [rewriteExpr(boundNames_1, target_2), fieldName, span_21]);
575
582
  }
576
583
  }
577
584
  case 22:
578
- return new Expr(22, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
585
+ return new Expr(/* EIndexGet */ 22, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
579
586
  case 23:
580
- return new Expr(23, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
587
+ return new Expr(/* ECons */ 23, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
581
588
  case 24:
582
- return new Expr(24, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
589
+ return new Expr(/* EAppend */ 24, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
583
590
  case 25:
584
- return new Expr(25, [expr.fields[0], rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
591
+ return new Expr(/* EBinOp */ 25, [expr.fields[0], rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
585
592
  case 26:
586
- return new Expr(26, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
593
+ return new Expr(/* ESome */ 26, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
587
594
  case 30:
588
- return new Expr(30, [map((_arg_11) => {
595
+ return new Expr(/* EInterpolatedString */ 30, [map((_arg_11) => {
589
596
  if (_arg_11.tag === 1) {
590
- return new InterpolatedPart(1, [rewriteExpr(boundNames_1, _arg_11.fields[0])]);
597
+ return new InterpolatedPart(/* IPExpr */ 1, [rewriteExpr(boundNames_1, _arg_11.fields[0])]);
591
598
  }
592
599
  else {
593
- return new InterpolatedPart(0, [_arg_11.fields[0]]);
600
+ return new InterpolatedPart(/* IPText */ 0, [_arg_11.fields[0]]);
594
601
  }
595
602
  }, expr.fields[0]), expr.fields[1]]);
596
603
  default:
@@ -605,7 +612,10 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
605
612
  return `${selfPrefix}.${name_14}`;
606
613
  }
607
614
  };
608
- const rewriteParam = (param_1) => (new Param(param_1.Name, map_1((tref_4) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_4), param_1.Annotation), param_1.Span));
615
+ const rewriteParam = (param_1) => {
616
+ let option_11;
617
+ return new Param(param_1.Name, (option_11 = param_1.Annotation, (option_11 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_11) : undefined), param_1.Span);
618
+ };
609
619
  return map((_arg_12) => {
610
620
  let def_1;
611
621
  switch (_arg_12.tag) {
@@ -613,14 +623,16 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
613
623
  const isRec_1 = _arg_12.fields[4];
614
624
  const rewrittenName = qualifySelfName(_arg_12.fields[0]);
615
625
  const rewrittenArgs_1 = map(rewriteParam, _arg_12.fields[1]);
616
- const rewrittenReturnAnnotation_2 = map_1((tref_6) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_6), _arg_12.fields[2]);
626
+ let rewrittenReturnAnnotation_2;
627
+ const option_15 = _arg_12.fields[2];
628
+ rewrittenReturnAnnotation_2 = ((option_15 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_15) : undefined);
617
629
  const bound = fold_1((s_1, p_2) => add(p_2.Name, s_1), empty_1({
618
630
  Compare: (x_3, y_3) => (comparePrimitives(x_3, y_3) | 0),
619
631
  }), rewrittenArgs_1);
620
- return new Stmt(2, [rewrittenName, rewrittenArgs_1, rewrittenReturnAnnotation_2, rewriteExpr(isRec_1 ? add(rewrittenName, bound) : bound, _arg_12.fields[3]), isRec_1, _arg_12.fields[5], _arg_12.fields[6]]);
632
+ return new Stmt(/* SLet */ 2, [rewrittenName, rewrittenArgs_1, rewrittenReturnAnnotation_2, rewriteExpr(isRec_1 ? add(rewrittenName, bound) : bound, _arg_12.fields[3]), isRec_1, _arg_12.fields[5], _arg_12.fields[6]]);
621
633
  }
622
634
  case 3:
623
- return new Stmt(3, [rewritePattern(aliases, selfPrefix, topLevelTypeNames, _arg_12.fields[0]), rewriteExpr(empty_1({
635
+ return new Stmt(/* SLetPattern */ 3, [rewritePattern(aliases, selfPrefix, topLevelTypeNames, _arg_12.fields[0]), rewriteExpr(empty_1({
624
636
  Compare: (x_4, y_4) => (comparePrimitives(x_4, y_4) | 0),
625
637
  }), _arg_12.fields[1]), _arg_12.fields[2], _arg_12.fields[3]]);
626
638
  case 4: {
@@ -628,20 +640,24 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
628
640
  const names_1 = ofList(map((tupledArg_10) => qualifySelfName(tupledArg_10[0]), bindings_2), {
629
641
  Compare: (x_5, y_5) => (comparePrimitives(x_5, y_5) | 0),
630
642
  });
631
- return new Stmt(4, [map((tupledArg_11) => {
643
+ return new Stmt(/* SLetRecGroup */ 4, [map((tupledArg_11) => {
644
+ let option_17;
632
645
  const rewrittenName_1 = qualifySelfName(tupledArg_11[0]);
633
646
  const rewrittenArgs_2 = map(rewriteParam, tupledArg_11[1]);
634
- return [rewrittenName_1, rewrittenArgs_2, map_1((tref_7) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_7), tupledArg_11[2]), rewriteExpr(fold_1((s_2, p_3) => add(p_3.Name, s_2), names_1, rewrittenArgs_2), tupledArg_11[3]), tupledArg_11[4]];
647
+ return [rewrittenName_1, rewrittenArgs_2, (option_17 = tupledArg_11[2], (option_17 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_17) : undefined), rewriteExpr(fold_1((s_2, p_3) => add(p_3.Name, s_2), names_1, rewrittenArgs_2), tupledArg_11[3]), tupledArg_11[4]];
635
648
  }, bindings_2), _arg_12.fields[1], _arg_12.fields[2]]);
636
649
  }
637
650
  case 5:
638
- return new Stmt(5, [rewriteExpr(empty_1({
651
+ return new Stmt(/* SExpr */ 5, [rewriteExpr(empty_1({
639
652
  Compare: (x_6, y_6) => (comparePrimitives(x_6, y_6) | 0),
640
653
  }), _arg_12.fields[0])]);
641
654
  case 1:
642
655
  throw new Exception("Unexpected unresolved import directive");
643
656
  default:
644
- return new Stmt(0, [(def_1 = _arg_12.fields[0], new TypeDef(qualifySelfName(def_1.Name), def_1.IsRecursive, map((tupledArg_8) => [tupledArg_8[0], rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tupledArg_8[1])], def_1.Fields), map((tupledArg_9) => [tupledArg_9[0], map_1((tref_5) => rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tref_5), tupledArg_9[1])], def_1.Cases), def_1.Span))]);
657
+ return new Stmt(/* SType */ 0, [(def_1 = _arg_12.fields[0], new TypeDef(qualifySelfName(def_1.Name), def_1.IsRecursive, map((tupledArg_8) => [tupledArg_8[0], rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tupledArg_8[1])], def_1.Fields), map((tupledArg_9) => {
658
+ let option_13;
659
+ return [tupledArg_9[0], (option_13 = tupledArg_9[1], (option_13 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_13) : undefined)];
660
+ }, def_1.Cases), def_1.Span))]);
645
661
  }
646
662
  }, statements);
647
663
  }
@@ -683,11 +699,13 @@ function expandProgram(rootDirectoryWithSeparator, fileSpan, getOrCreatePrefix,
683
699
  }, empty_2({
684
700
  Compare: (x, y) => (comparePrimitives(x, y) | 0),
685
701
  }), imports);
686
- return append(collect((tupledArg_1) => {
702
+ const importedStatements = collect((tupledArg_1) => {
687
703
  const resolvedPath_1 = resolveImportPath(currentFile, tupledArg_1[1], rootDirectoryWithSeparator, tupledArg_1[2]);
688
704
  const childPrefix = FSharpMap__get_Item(aliasMappings, tupledArg_1[0]);
689
705
  return loadFileRef.contents(stack)(false)(resolvedPath_1)(childPrefix);
690
- }, toList_1(imports)), rewriteModuleScopedStatements(isMainFile ? undefined : currentPrefix, aliasMappings, toList_1(localCode)));
706
+ }, toList_1(imports));
707
+ const localStatements = toList_1(localCode);
708
+ return append(importedStatements, rewriteModuleScopedStatements(isMainFile ? undefined : currentPrefix, aliasMappings, localStatements));
691
709
  }
692
710
 
693
711
  export function parseIncludedSource(sourceName, source) {
@@ -0,0 +1,149 @@
1
+
2
+ import { Record } from "../fable_modules/fable-library-js.5.13.0/Types.js";
3
+ import { ExternalFunction, Value, ExternalFunction_$reflection } from "./Value.js";
4
+ import { int32_type, record_type, option_type, class_type, string_type, list_type } from "../fable_modules/fable-library-js.5.13.0/Reflection.js";
5
+ import { Stmt_$reflection } from "./Ast.js";
6
+ import { evalProgramFromState, evalProgramWithExternsState, ProgramState_$reflection } from "./Eval.js";
7
+ import { inferProgramWithExterns, TypedStmt_$reflection } from "./TypeInfer.js";
8
+ import { skip, reverse, append, exists, length, empty, choose, cons, fold, filter } from "../fable_modules/fable-library-js.5.13.0/List.js";
9
+ import { toList } from "../fable_modules/fable-library-js.5.13.0/Set.js";
10
+ import { Scheme, Types_ftvType } from "./Types.js";
11
+ import { values, empty as empty_1, add, fold as fold_1 } from "../fable_modules/fable-library-js.5.13.0/Map.js";
12
+ import { comparePrimitives } from "../fable_modules/fable-library-js.5.13.0/Util.js";
13
+ import { toList as toList_1 } from "../fable_modules/fable-library-js.5.13.0/Seq.js";
14
+
15
+ export class Session extends Record {
16
+ constructor(Externs, RetainedProgramRev, TypeDeclarations, InferenceBindings, EvaluationState) {
17
+ super();
18
+ this.Externs = Externs;
19
+ this.RetainedProgramRev = RetainedProgramRev;
20
+ this.TypeDeclarations = TypeDeclarations;
21
+ this.InferenceBindings = InferenceBindings;
22
+ this.EvaluationState = EvaluationState;
23
+ }
24
+ }
25
+
26
+ export function Session_$reflection() {
27
+ return record_type("FScript.Language.Interactive.Session", [], Session, () => [["Externs", list_type(ExternalFunction_$reflection())], ["RetainedProgramRev", list_type(Stmt_$reflection())], ["TypeDeclarations", list_type(Stmt_$reflection())], ["InferenceBindings", class_type("Microsoft.FSharp.Collections.FSharpMap`2", [string_type, ExternalFunction_$reflection()])], ["EvaluationState", option_type(ProgramState_$reflection())]]);
28
+ }
29
+
30
+ export class Submission extends Record {
31
+ constructor(Session, TypedProgram, State, RetainedCount) {
32
+ super();
33
+ this.Session = Session;
34
+ this.TypedProgram = TypedProgram;
35
+ this.State = State;
36
+ this.RetainedCount = (RetainedCount | 0);
37
+ }
38
+ }
39
+
40
+ export function Submission_$reflection() {
41
+ return record_type("FScript.Language.Interactive.Submission", [], Submission, () => [["Session", Session_$reflection()], ["TypedProgram", list_type(TypedStmt_$reflection())], ["State", ProgramState_$reflection()], ["RetainedCount", int32_type]]);
42
+ }
43
+
44
+ function retainedStatements(program) {
45
+ return filter((_arg) => {
46
+ if (_arg.tag === 5) {
47
+ return false;
48
+ }
49
+ else {
50
+ return true;
51
+ }
52
+ }, program);
53
+ }
54
+
55
+ function appendRetained(reversed, program) {
56
+ return fold((acc, statement) => {
57
+ if (statement.tag === 5) {
58
+ return acc;
59
+ }
60
+ else {
61
+ return cons(statement, acc);
62
+ }
63
+ }, reversed, program);
64
+ }
65
+
66
+ function typeDeclarations(program) {
67
+ return choose((_arg) => {
68
+ if (_arg.tag === 0) {
69
+ return _arg;
70
+ }
71
+ else {
72
+ return undefined;
73
+ }
74
+ }, program);
75
+ }
76
+
77
+ function inferenceBinding(name, bindingType) {
78
+ return new ExternalFunction(name, new Scheme(toList(Types_ftvType(bindingType)), bindingType), (_arg, _arg_1) => Value.VUnit, 0);
79
+ }
80
+
81
+ function updateInferenceBindings(bindings, typedProgram) {
82
+ return fold((current, statement) => {
83
+ switch (statement.tag) {
84
+ case 2:
85
+ return fold_1((state, name_1, bindingType_1) => add(name_1, inferenceBinding(name_1, bindingType_1), state), current, statement.fields[2]);
86
+ case 3:
87
+ return fold((state_1, tupledArg) => {
88
+ const name_2 = tupledArg[0];
89
+ return add(name_2, inferenceBinding(name_2, tupledArg[2]), state_1);
90
+ }, current, statement.fields[0]);
91
+ case 0:
92
+ case 4:
93
+ return current;
94
+ default: {
95
+ const name = statement.fields[0];
96
+ return add(name, inferenceBinding(name, statement.fields[2]), current);
97
+ }
98
+ }
99
+ }, bindings, typedProgram);
100
+ }
101
+
102
+ export function create(externs) {
103
+ return new Session(externs, empty(), empty(), empty_1({
104
+ Compare: (x, y) => (comparePrimitives(x, y) | 0),
105
+ }), undefined);
106
+ }
107
+
108
+ export function retainedCount(session) {
109
+ return length(session.RetainedProgramRev) | 0;
110
+ }
111
+
112
+ export function submit(session, program) {
113
+ const retainedRev = appendRetained(session.RetainedProgramRev, program);
114
+ const retainedCount_1 = length(retainedRev) | 0;
115
+ const containsTypeDeclaration = exists((_arg) => {
116
+ if (_arg.tag === 0) {
117
+ return true;
118
+ }
119
+ else {
120
+ return false;
121
+ }
122
+ }, program);
123
+ const matchValue = session.EvaluationState;
124
+ if (matchValue != null) {
125
+ if (containsTypeDeclaration) {
126
+ const typed_1 = inferProgramWithExterns(session.Externs, append(reverse(session.RetainedProgramRev), program));
127
+ const state_1 = evalProgramWithExternsState(session.Externs, typed_1);
128
+ const submittedTyped = skip(length(session.RetainedProgramRev), typed_1);
129
+ return new Submission(new Session(session.Externs, retainedRev, typeDeclarations(reverse(retainedRev)), updateInferenceBindings(empty_1({
130
+ Compare: (x_1, y_1) => (comparePrimitives(x_1, y_1) | 0),
131
+ }), typed_1), state_1), submittedTyped, state_1, retainedCount_1);
132
+ }
133
+ else {
134
+ const previousState = matchValue;
135
+ const typed_2 = inferProgramWithExterns(append(session.Externs, toList_1(values(session.InferenceBindings))), append(session.TypeDeclarations, program));
136
+ const submittedTyped_1 = skip(length(session.TypeDeclarations), typed_2);
137
+ const state_2 = evalProgramFromState(previousState, submittedTyped_1);
138
+ return new Submission(new Session(session.Externs, retainedRev, session.TypeDeclarations, updateInferenceBindings(session.InferenceBindings, submittedTyped_1), state_2), submittedTyped_1, state_2, retainedCount_1);
139
+ }
140
+ }
141
+ else {
142
+ const typed = inferProgramWithExterns(session.Externs, program);
143
+ const state = evalProgramWithExternsState(session.Externs, typed);
144
+ return new Submission(new Session(session.Externs, retainedRev, typeDeclarations(retainedStatements(program)), updateInferenceBindings(empty_1({
145
+ Compare: (x, y) => (comparePrimitives(x, y) | 0),
146
+ }), typed), state), typed, state, retainedCount_1);
147
+ }
148
+ }
149
+