text:
Catching JS branch up with Python again

The JS branch will only aim to catch up to v1.2. It's rather behind, so this'll take a while.
Because this is actually taking a while, I've decided to limit the scope of this PR to not include compiling.

[x] Parsing

[x] let
[x] type (enums)
[x] alias
[x] if let

[x] In Nearley grammar

[x] Destructuring/pattern matching

[x] In Nearley grammar

[x] class
[x] imp (both old and new)
[x] The new for
[x] New C-style function calling
[x] |>

[x] In Nearley grammar

[x] List literals
[x] Record literals
[x] Record types
[x] Record access
[x] Generic types
[x] Type variables
[x] pub
[x] ! (await)
Function parentheses edge case 😔 (may not fix in this PR)

[x] Type checking

[x] A type system (again)
[x] Expressions

[x] Comparisons
[x] Function calls
[x] Function expressions
[x] If expressions
[x] Import N file
[x] List literal
[x] Binary operations
[x] Record literal
[x] Record access operator
[x] Return
[x] Tuple literal
[x] Unary operation
[x] Character literal
[x] Float literal
[x] Identifiers
[x] Number literal
[x] String literal
[x] Unit literal

[x] Statements

[x] Blocks
[x] Alias declaration
[x] Assert type
[x] Assert value
[x] Class declaration
[x] Enum declaration
[x] For loop
[x] Old for loop
[x] If statement
[x] Import library statement
[x] Let statement
[x] Var statement

[x] Generalise conditions
[x] Errors
[x] Recover return types etc. if possible
[x] Module and class types
[x] Defer function body checking
[x] Resolve aliases when needed

Compiling (separate PR)

The web IDE will come separately.

The grammar is complete, at least on the surface level! I will introduce a test suite for grammar in a separate PR.

TODO for type system:

Operations shouldn't resolve Unknown?
Number type should be usable as both int and float

For both the above, perhaps it can be an Unknown with a list of possible types to resolve to

Comparing types equally, like for if branches. Maybe to resolve them to a common type, like str -> str and [a] a -> a becomes str -> str

THEORISE and work on enums a bit
Theorise on type system some more
Theorise more
Theorise MORE
theorise??

Sean loves to theorise

type systems are hard

As I said in the last commit, there's just a few more things to do:

Generalise conditions
Errors
Recover return types etc. if possible
Module and class types
Defer function body checking
Resolve aliases when needed

Oh, and you know, actually test the whole thing since I haven't actually tested the type system yet

Oh actually the module resolving part might be a bit complicated so it's not "just a few more things"

Classes! :tada:

[ ]  Defer function body checking (might not do in this PR)

Shouldn't be too bad, I think. Just adding Bases to a Scope's list, then type checking all of them on calling .end(). We could do it in this PR.

List of all errors

Aliases
Error: Type assertion failed.

  --> aliases.n:9:1
  9 | assert type { a: 1; b: 1; c: "test" } : test
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Currying
Error: Error `operation-unperformable`: Unfortunately, I don't have much information about this error.

  --> currying.n:13:14
 13 | assert value 2 |> sum(1) = 3
                   ^^^^^^^^^^^^^^^

Error: Error `return-mismatch`: Unfortunately, I don't have much information about this error.

  --> currying.n:4:2
  4 |   return a + b
       ^^^^^^^^^^^^

Destructuring
Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> destructuring.n:11:9
 11 | if let [a, b] = [1, 2] {
              ^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> destructuring.n:11:12
 11 | if let [a, b] = [1, 2] {
                 ^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> destructuring.n:15:13
 15 | if let <yes a> = yes("test") {
                  ^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> destructuring.n:7:13
  7 | let { x; z: y } = { x: 1; z: 1 }
                  ^

Error: I can't find a variable named `z` in this scope.

  --> destructuring.n:9:14
  9 | assert value z = 1
                   ^

Enums
$ ts-node --pretty src/n-lang.ts ../tests/assertions/enums.n
Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> enums.n:4:26
  4 |   type state = mainMenu | ongoing | ended
                               ^^^^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> enums.n:25:18
 25 |   if let <ongoing health> = gameState {
                       ^^^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> enums.n:15:5
 15 |           | mainMenu
          ^^^^^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> enums.n:17:6
 17 |           | <ended str>
           ^^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> enums.n:44:13
 44 | if let <yes char> = "yes" |> charAt(0) {
                  ^^^^

Error: The first argument you give to a TODO.

  --> enums.n:21:26
 21 |   let gameState = ongoing(100)
                               ^^^

Error: The first argument you give to a TODO.

  --> enums.n:23:35
 23 |   assert value gameState = ongoing(100)
                                        ^^^

Error: The first argument you give to a TODO.

  --> enums.n:44:37
 44 | if let <yes char> = "yes" |> charAt(0) {
                                          ^

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at TypeCheckContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Return.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:37:15)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Return.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:29:41)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at TypeCheckContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Return.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:37:15)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Return.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:29:41)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at TypeCheckContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Return.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:37:15)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Return.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:29:41)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

For loops
Warning: Warning `old-for`: Unfortunately, I don't have much information about this error.

  --> for-loops.n:7:1
  7 | for i 1 {
      ^^^^^^^^^ ...
  8 |   assert value i = 0
  9 | }
  ... ^

Error: The first argument you give to a TODO.

  --> for-loops.n:3:17
  3 | for (i in range(0, 10, 1)) {
                      ^

Error: The second argument you give to a TODO.

  --> for-loops.n:3:20
  3 | for (i in range(0, 10, 1)) {
                         ^^

Error: The third argument you give to a TODO.

  --> for-loops.n:3:24
  3 | for (i in range(0, 10, 1)) {
                             ^

Error: Error `for-legacy-not-iterable`: Unfortunately, I don't have much information about this error.

  --> for-loops.n:7:1
  7 | for i 1 {
      ^^^^^^^^^ ...
  8 |   assert value i = 0
  9 | }
  ... ^

Generic
Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> generic.n:10:58
 10 | let map: [a, b] (a -> b) -> list[a] -> list[b] = [[x, y] transform:(x -> y) list:list[x]] -> list[y] {
                                                               ^^^^^^^^^

Error: An internal error occurred.

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:76:13)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:232:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:52)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:207:15)
    at Generator.next (<anonymous>)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:232:26)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:227:28)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'issue' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:242:29)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:227:28)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at ScopeBaseContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Declaration.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\ast\declaration\Declaration.ts:56:15)
    at Scope.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:176:19)
    at LetStmt.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\LetStmt.ts:29:19)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:52)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: I can't find a variable named `map` in this scope.

  --> generic.n:17:13
 17 | assert type map : [a, b] (a -> b) -> list[a] -> list[b]
                  ^^^

Error: I can't find a variable named `map` in this scope.

  --> generic.n:19:13
 19 | assert type map(intInBase10) : list[int] -> list[str]
                  ^^^

Error: I can't find a type named `t` in this scope.

  --> generic.n:21:21
 21 | alias triplet[t] = (t, t, t)
                          ^

Error: I can't find a type named `t` in this scope.

  --> generic.n:21:24
 21 | alias triplet[t] = (t, t, t)
                             ^

Error: I can't find a type named `t` in this scope.

  --> generic.n:21:27
 21 | alias triplet[t] = (t, t, t)
                                ^

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:52)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:227:28)
    at callFunction (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:311:18)
    at Object.tryFunctions (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:361:20)
    at Operation.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Operation.ts:53:27)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Return.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:34:47)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at TypeCheckContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Return.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:37:15)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Return.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Return.ts:29:41)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>```

### If statements

```js
Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> if-statements.n:11:8
 11 | if let i = "This will always run" {
             ^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> if-statements.n:17:13
 17 | if let <yes test> = notNone {
                  ^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> if-statements.n:21:13
 21 | if let <yes test> = none {
                  ^^^^

Warning: Warning `unused-variable`: Unfortunately, I don't have much information about this error.

  --> if-statements.n:21:13
 21 | if let <yes test> = none {
                  ^^^^

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at ScopeBaseContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Declaration.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\ast\declaration\Declaration.ts:56:15)
    at Scope.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:176:19)
    at LetStmt.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\LetStmt.ts:29:19)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: I can't find a variable named `notNone` in this scope.

  --> if-statements.n:17:21
 17 | if let <yes test> = notNone {
                          ^^^^^^^

Importing N files
Error: Error `cannot-import`: Unfortunately, I don't have much information about this error.

  --> importing-n-files.n:3:22
 3 | let importedThings = imp "./import.n"
                          ^^^^^^^^^^^^^^^^

Tuples, lists, records
Error: Type assertion failed.

  --> tuples-lists-records.n:3:1
  3 | assert type 1, \{a} : int, char
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: An internal error occurred.

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:18)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:272:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:271:20)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:295:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:52)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

In the interest of time, although this PR is far from perfect, I will probably undraft this PR so that we can move JS along to a satisfactory point before worrying about the annoying details.

Full test output

$ npm test

> n-lang@1.0.0 test C:\Users\seant\Documents\test\N-lang\js
> ts-mocha test/**/*.ts --colors

  √ the syntax tests directory should exist
  √ the type checking directory should exist
  displayType
    √ should return null for null
    √ should return the prototype name for objects
    √ should return the typeof value of a primitive type
    √ should include the length of an array

  fromEntries
    √ should create an object with given entries
    √ should create an empty object with no entries
    √ should support iterables
    √ should support iterables with a mapping function

  schema
    √ should assert null
    √ should assert any
    √ should assert an instance of Date
    √ should assert an array of Dates
    √ should assert a tuple
    √ should assert a type union
    √ should assert a type guard
    √ should assert a nullable empty tuple

  intersection
    √ should get the items that two sets have

  isSubset
    √ should determine if a set is a subset of another
    √ should not be commutative
    √ should treat a set as the subset of itself
    √ should treat an empty set as a subset of other sets

  difference
    √ should get unique items from each set
    √ should deal with Map keys properly

  type guards
    √ isString should check for strings
    √ isNumber should check for numbers
    √ isEnum should check if a value is an enum
    √ isToken should check for moo.Tokens

  type assertions
    √ shouldBe should assert an instance of a class
    √ shouldSatisfy should assert a type guard

  uniqueId
    √ should return an ID of the form \w+-\w+-\d+
    √ should return unique IDs

  grammar
    1) function-calls.n
    √ multiline-comments.n
    √ suffix.n

  type checking
    √ aliases.n
    √ async.n
    √ classes.n
    √ currying.n
    √ destructuring.n
    √ enums.n
    √ for-loops.n
    2) generic.n
    √ if-statements.n
    √ importing-n-files.n
    √ internal-libraries.n
    3) native-functions.n
    √ tuples-lists-records.n
    √ variables.n

  47 passing (320ms)
  3 failing

  1) grammar
       function-calls.n:
     ParseTokenError: Unexpected lbracket token
      at parseNearleyError (src\grammar\parse.ts:130:20)
      at Object.parse (src\grammar\parse.ts:163:21)
      at C:\Users\seant\Documents\test\N-lang\js\test\integration\grammar.test.ts:25:28
      at Array.map (<anonymous>)
      at Context.<anonymous> (test\integration\grammar.test.ts:24:12)
      at Generator.next (<anonymous>)
      at fulfilled (test\integration\grammar.test.ts:24:58)

  2) type checking
       generic.n:
     Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:3:1
  3 | assert type print : [t] t -> t
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:8:1
  8 | assert type filterMap : [a, b] (a -> maybe[b]) -> list[a] -> list[b]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:10:5
 10 | let map: [a, b] (a -> b) -> list[a] -> list[b] = [[x, y] transform:(x -> y) list:list[x]] -> list[y] {
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at ScopeBaseContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at Declaration.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\ast\declaration\Declaration.ts:56:15)
    at Scope.checkDeclaration (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:176:19)
    at LetStmt.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\LetStmt.ts:29:19)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: I can't find a variable named `map` in this scope.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:17:13
 17 | assert type map : [a, b] (a -> b) -> list[a] -> list[b]
                  ^^^

Error: I can't find a variable named `map` in this scope.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:19:13
 19 | assert type map(intInBase10) : list[int] -> list[str]
                  ^^^
  TypeError: Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:3:1
    3 | assert type print : [t] t -> t
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:8:1
    8 | assert type filterMap : [a, b] (a -> maybe[b]) -> list[a] -> list[b]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:10:5
   10 | let map: [a, b] (a -> b) -> list[a] -> list[b] = [[x, y] transform:(x -> y) list:list[x]] -> list[y] {
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at ScopeBaseContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at Declaration.checkDeclaration (src\ast\declaration\Declaration.ts:56:15)
      at Scope.checkDeclaration (src\type-checker\Scope.ts:176:19)
      at LetStmt.checkStatement (src\ast\statements\LetStmt.ts:29:19)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: I can't find a variable named `map` in this scope.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:17:13
   17 | assert type map : [a, b] (a -> b) -> list[a] -> list[b]
                    ^^^

  Error: I can't find a variable named `map` in this scope.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\generic.n:19:13
   19 | assert type map(intInBase10) : list[int] -> list[str]
                    ^^^
      at Context.<anonymous> (test\integration\type-checking.test.ts:34:17)
      at Generator.next (<anonymous>)
      at fulfilled (test\integration\type-checking.test.ts:24:58)

  3) type checking
       native-functions.n:
     Error: Type assertion failed.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:43:1
  43 | assert type split : char -> str -> list[str]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Here is the type of the value you asserted:

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:65:1
  65 | assert type print : [t] t -> t
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:68:1
  68 | assert type itemAt : [t] int -> list[t] -> maybe[t]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:72:1
  72 | assert type append : [t] t -> list[t] -> list[t]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:37:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:74:14
  74 | assert value append(4, list) = [1, 2, 3, 4]
                    ^^^^^^^^^^^^^^^

TypeError: Cannot read property 'type' of undefined
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:35:18)
    at Object.callFunction (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:321:18)
    at FuncCall.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\FuncCall.ts:89:24)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at Comparisons.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\ast\expressions\Comparisons.ts:119:45)
    at Scope.typeCheck (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:189:27)
    at AssertValue.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertValue.ts:24:47)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:78:1
  78 | assert type filterMap : [a, b] (a -> maybe[b]) -> list[a] -> list[b]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:83:1
  83 | assert type default : [t] t -> maybe[t] -> t
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:87:1
  87 | assert type then : [a, b] (a -> cmd[b]) -> cmd[a] -> cmd[b]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:93:1
  93 | assert type mapFrom : [k, v] list[(k, v)] -> map[k, v]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:97:1
  97 | assert type getValue : [k, v] k -> map[k, v] -> maybe[v]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:230:28)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

Error: An error arose from within the deep internal innerworkings of N.

  --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:103:1
 103 | assert type entries : [k, v] map[k, v] -> list[(k, v)]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Error: TODO: comparing annotation type variables
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:74:13)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:154:24
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:152:17)
    at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
    at Array.forEach (<anonymous>)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:281:20)
    at compareAssignable (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:235:26)
    at Object.attemptAssign (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:305:18)
    at CheckStatementContext.isTypeError (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\ScopeBaseContext.ts:36:19)
    at AssertType.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\AssertType.ts:28:13)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at Block.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\ast\statements\Block.ts:31:60)
    at Scope.checkStatement (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\Scope.ts:163:19)
    at TypeChecker.<anonymous> (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:298:13)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\seant\Documents\test\N-lang\js\src\type-checker\TypeChecker.ts:5:58)

This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>
  TypeError: Error: Type assertion failed.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:43:1
    43 | assert type split : char -> str -> list[str]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Here is the type of the value you asserted:

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:65:1
    65 | assert type print : [t] t -> t
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:68:1
    68 | assert type itemAt : [t] int -> list[t] -> maybe[t]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:72:1
    72 | assert type append : [t] t -> list[t] -> list[t]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  TypeError: Cannot read property 'type' of undefined
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:37:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:74:14
    74 | assert value append(4, list) = [1, 2, 3, 4]
                      ^^^^^^^^^^^^^^^

  TypeError: Cannot read property 'type' of undefined
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:35:18)
      at Object.callFunction (src\type-checker\types\comparisons\compare-assignable.ts:321:18)
      at FuncCall.typeCheck (src\ast\expressions\FuncCall.ts:89:24)
      at Scope.typeCheck (src\type-checker\Scope.ts:189:27)
      at Comparisons.typeCheck (src\ast\expressions\Comparisons.ts:119:45)
      at Scope.typeCheck (src\type-checker\Scope.ts:189:27)
      at AssertValue.checkStatement (src\ast\statements\AssertValue.ts:24:47)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:78:1
    78 | assert type filterMap : [a, b] (a -> maybe[b]) -> list[a] -> list[b]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:83:1
    83 | assert type default : [t] t -> maybe[t] -> t
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:87:1
    87 | assert type then : [a, b] (a -> cmd[b]) -> cmd[a] -> cmd[b]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:93:1
    93 | assert type mapFrom : [k, v] list[(k, v)] -> map[k, v]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:97:1
    97 | assert type getValue : [k, v] k -> map[k, v] -> maybe[v]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:230:28)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>

  Error: An error arose from within the deep internal innerworkings of N.

    --> C:\Users\seant\Documents\test\N-lang\tests\assertions\native-functions.n:103:1
   103 | assert type entries : [k, v] map[k, v] -> list[(k, v)]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Error: TODO: comparing annotation type variables
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:74:13)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:154:24
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:152:17)
      at C:\Users\seant\Documents\test\N-lang\js\src\type-checker\types\comparisons\compare-assignable.ts:282:22
      at Array.forEach (<anonymous>)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:281:20)
      at compareAssignable (src\type-checker\types\comparisons\compare-assignable.ts:235:26)
      at Object.attemptAssign (src\type-checker\types\comparisons\compare-assignable.ts:305:18)
      at CheckStatementContext.isTypeError (src\type-checker\ScopeBaseContext.ts:36:19)
      at AssertType.checkStatement (src\ast\statements\AssertType.ts:28:13)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at Block.checkStatement (src\ast\statements\Block.ts:31:60)
      at Scope.checkStatement (src\type-checker\Scope.ts:163:19)
      at TypeChecker.<anonymous> (src\type-checker\TypeChecker.ts:298:13)
      at Generator.next (<anonymous>)
      at fulfilled (src\type-checker\TypeChecker.ts:5:58)

  This is a bug with N. Please report this error on GitHub: <https://github.com/nbuilding/N-lang/issues/new>
      at Context.<anonymous> (test\integration\type-checking.test.ts:34:17)
      at Generator.next (<anonymous>)
      at fulfilled (test\integration\type-checking.test.ts:24:58)

npm ERR! Test failed.  See above for more details.

The three failing tests are:

Function call syntax ambiguity
Comparing type variables
Comparing type variables

I'll probably have to t h e o r i s e some more about the type system to resolve the last 2, and I'm still not sure how to tackle the first one, but those can be separate issues/PRs

authors: Ashvin-Ranjan SheepTester

repo: nbuilding/N-lang


text:
Skipping on chapter 3 doesn't erase text

Found while translating. It doesn't happen when playing regularly, only when skipping

Fixed in #40 😉

source: gharchive/issue

authors: antfu riuri

repo: ncase/crowds

license_type: permissive

license_source: github-api


text:
Opcode to Mnemonic/AddressMode mappings

Introduction
This PR begins laying out the tables for converting between instructions and their corresponding opcode.
Linked Issues
#3
Dependencies
Test

[ ] Tested Locally
[ ] Documented

Review

[ ] Ready for review
[ ] Ready to merge

Deployment

This was built on a terrible premise. Because the Octals don't necessarily map 1-1 for instructions it would be hard to convert reversibly. This should be applied at the Instruction type level as both the mnemonic and the address mode can be asserted.

source: gharchive/pull-request

repo: ncatelli/spasm


text:
Fixes for hybrid pipelines

Several corrections were made to improve the AutoML applicability for hybrid pipelines with custom models.
CRM case will be moved to external repository.

@Dreamlone @valer1435 при запуске оптимизации в oil_pipeline_opt.py у меня часто выпадает ошибка 'Pipeline' object has no attribute 'last_idx_int'.

Вроде это завязано на ваши недавние изменения - есть идеи, что может быть не так с данными или моделями?

@Dreamlone @valer1435 при запуске оптимизации в oil_pipeline_opt.py у меня часто выпадает ошибка 'Pipeline' object has no attribute 'last_idx_int'.

Вроде это завязано на ваши недавние изменения - есть идеи, что может быть не так с данными или моделями?

Интересно. Я встречал эту ошибку и даже фиксил. Посмотр, что там

Добавил fit после fit_from_cache - вроде решило проблему.

Тэг убрал, все скрипты crm удалил. Комментарии @J3FALL относятся только к ним, т.ч. аппрувлю.

repo: nccr-itmo/FEDOT


text:
Code Datasets

[ ] Datasets to use?
[ ] How to collect the datasets?
[ ] How to store and organize the datasets?
[ ] What filtering/preprocessing/processing needs to be done to the datasets?

Datasets considered : https://docs.google.com/spreadsheets/d/1eOVxhLwksOJ51PbiMxzogc-sWu6NylEVPdmEPcbxu28/edit#gid=0

Here's a bunch of "code" datasets I've been collecting the links to:

https://sumith1896.github.io/spoc/ (psuedocode and test cases)
https://github.com/TellinaTool/nl2bash (bash and natural language)
http://groups.inf.ed.ac.uk/cup/javaGithub/ (java code)
https://conala-corpus.github.io/ (python and natural language)
https://github.com/github/CodeSearchNet (code and docstrings in six languages)
https://github.com/tech-srl/slm-code-generation/ (1.3M java examples)
https://github.com/tech-srl/code2vec (14M java examples)
https://github.com/tech-srl/code2seq (16M java examples)
http://leclair.tech/data/funcom/ (2.1M java examples)
https://www.sri.inf.ethz.ch/py150 (150k python examples)
https://www.microsoft.com/en-us/download/details.aspx?id=56844 (C# programs as graphs)
https://github.com/facebookresearch/Neural-Code-Search-Evaluation-Dataset (neural code search dataset)
https://bitbucket.org/iiscseal/nbl/src/master/ (C code)
https://github.com/Microsoft/msrc-dpu-learning-to-represent-edits (see paper)

http://www.cs.cmu.edu/˜pengchey/githubedits.zip

https://github.com/rajasagashe/juice (1.5M Python notebooks with interleaved natural language and code cells)
https://github.com/sola-st/IdBench (pairs of identifiers with measured relatedness and similarity)
https://sites.google.com/view/core2019/ (paired code in Java and code reviews)

from: https://arxiv.org/abs/1912.09652

https://github.com/SoftWiser-group/CoDiSum (Java diffs and commit messages)
https://github.com/LittleYUYU/CoaCor (SQL and natural language pairs)
https://github.com/sriniiyer/codenn (SQL and natural language pairs)
https://github.com/LittleYUYU/StackOverflow-Question-Code-Dataset (stackoverflow question and code pairs)
https://github.com/xing-hu/EMSE-DeepCom (Java asts)
https://github.com/zhangj111/astnn (asts of Java and C)
https://groups.inf.ed.ac.uk/cup/comment-locator/ (C code with binary "should there be a comment here?" label)
https://github.com/microsoft/methods2test (Java methods and test cases)
https://github.com/EdinburghNLP/code-docstring-corpus (python with docstrings)
https://github.com/IBM/Project_CodeNet (50 programming languages)
https://github.com/hendrycks/apps (python)

A lot of these are just methods, which seems to be popular in machine learning for code Unfortunately have their docstrings removed, which is not what you'd want for a Copilot clone.
However, if enough of these datasets are appended together you might get something similar to The Pile which might be sufficient. The other option is just scraping GitHub, but checking the licence of each repo to avoid any issues that Copilot is raising at the moment.

These are great lists of datasets, I think a lot of them could be useful for evaluation.
For the main training I'd probably suggest just scraping github and Stack Overflow though. I believe some of my collaborators at CMU use GitTorrent to do scraping, and it might not be too hard to get a huge corpus of repos once we decide what our inclusion criteria are: https://github.com/cjb/GitTorrent
Some examples of inclusion criteria might include:

Popularity/stars
Language
License

What's a good time for us to meet? I'm EST time and I generally won't be able to work on this until the evening

These are great lists of datasets, I think a lot of them could be useful for evaluation.
For the main training I'd probably suggest just scraping github and Stack Overflow though. I believe some of my collaborators at CMU use GitTorrent to do scraping, and it might not be too hard to get a huge corpus of repos once we decide what our inclusion criteria are: https://github.com/cjb/GitTorrent
Some examples of inclusion criteria might include:

Popularity/stars
Language
License

Additional criteria could be time since last commit, number of contributors, and usage of automated tests (this last one is probably not possible to easily detect)

I'm also in Eastern time and prefer to meet during the day if possible, but can also make a brief meeting during evenings work.

Since the meeting today will be the most important i can be a bit more lenient and do it during the day if needed

I'll make the when2meet poll. What is the preferred time zone?

I'll make the when2meet poll. What is the preferred time zone?

Est since both @neubig and I are in that

https://www.when2meet.com/?12238619-choe4 Please fill this out.

I'll make the when2meet poll. What is the preferred time zone?

Est since both @neubig and I are in that

I'm also in EST. I also generally work on this in the evenings and nights during weekdays. Friday morning is an exception. I'll fill out the when2meet!

Looks like we can do the meeting at 10:30/now. I'll create a voice channel on discord

These datasets look awesome, could you please add them to this spreadsheet, we are consolidating them there: https://docs.google.com/spreadsheets/d/1eOVxhLwksOJ51PbiMxzogc-sWu6NylEVPdmEPcbxu28/edit?usp=sharing

Note: GHTorrent Project: A good way to efficiently retrieve the info of many github repos https://ghtorrent.org/

Another thing to add is checking for duplicate code, from https://dl.acm.org/doi/10.1145/3133908: "This paper analyzes a corpus of 4.5 million non-fork projects hosted on GitHub representing over 428 million files written in Java, C++, Python, and JavaScript. We found that this corpus has a mere 85 million unique files. In other words, 70% of the code on GitHub consists of clones of previously created files."
Relevant paper on the "adverse effects of code duplication in machine learning models on code": https://arxiv.org/abs/1812.06469
The tool that comes with the above paper: https://github.com/Microsoft/near-duplicate-code-detector

Note, we would want to also want the ability to do a reverse search of the code datasets for software that is derived from this so that if we return a large amount of code that is under a specific license such as the GPL then we should disallow that output since the output might be infringing on copyright. This would also help us make sure we aren't overfitting.

authors: bentrevett jlvvlj ncoop57 neubig reshinthadithyan taisazero zitterbewegung


text:
Feature request: virtual remote to shorten path

Currently, most remotes reference to the root of the remote storage. However, sometimes I only want to access one subfolder. I feel it's handy if rclone has a mechanism to shorten the path.
My suggestion is adding a new type of remote, which can act as alias to the other remotes. The config might look like:
[foo]
type = alias
remote = bar:the/path/to/my/folder

Then access foo:baz/hello is actually to access bar:the/path/to/my/folder/baz/hello transparently.
Actually, crypt remote already has this kind of functionality. In some sense, alias remote acts like crypt remote without encryption ;)

This is a similar, but slightly different idea to #1014
My plan there was for each remote to grow a "root" parameter rather than make an alias type of remote.

One small advantage of alias remote is avoiding to duplicate authentication tokens of the same underlying remote.

Creating aliases would be useful for rclone's internals too sometimes (eg --backup-dir takes two remotes, where it should only really be one).

Please find the alias remote here (thanks @B4dM4n )
https://beta.rclone.org/v1.39-124-gb183bd7f/ (uploaded in 15-30 mins)
The docs are here.

authors: kcwu ncw

repo: ncw/rclone

license: MIT


text:
Year is Out of Range Bug

I'm trying to import all my photos from icloud. When it gets to a certain point it fails with the error:
/home/luke/Pictures/2016/09/24/IMG_3101-original.JPG already exists.:  55%|▌| 18392/33335 [09:22<08:43, 28.56it/s]Traceback (most recent call last):
  File "./download_photos.py", line 304, in <module>
    download()
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "./download_photos.py", line 152, in download
    created_date = photo.created.astimezone(get_localzone())
  File "/usr/local/lib/python2.7/dist-packages/pyicloud/services/photos.py", line 451, in created
    return self.asset_date
  File "/usr/local/lib/python2.7/dist-packages/pyicloud/services/photos.py", line 457, in asset_date
    tz=pytz.utc)
ValueError: year is out of range

I opened an issue in pyicloud because it looked like it could be rooted there?

I had this issue. I created a smart album in Photos on Mac to display all
photos older than 1990 and deleted the ones that came up as they had
corrupted dates. The years were set to 0000. It was some filter app that I
had used years back.
Hope this helps :)
On Tue, 29 May 2018 at 08:48, lapint notifications@github.com wrote:

I opened an issue in pyicloud
https://github.com/picklepete/pyicloud/issues/180 because it looked
like it could be rooted there?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ndbroadbent/icloud_photos_downloader/issues/74#issuecomment-392684224,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAy-nCkjf2pA_DFyj4_OZBJlZrLCiT6lks5t3P0ygaJpZM4UQr2q
.

@evenwebb Fantastic idea! Thanks for the advice, I'll try this afternoon! I'm almost certain that will fix the issue.

That worked, thanks so much.

Thanks for reporting this issue! I've fixed this with a workaround - https://github.com/picklepete/pyicloud/pull/184
I've also decided to store a copy of the pyicloud library in this repo (under ./vendor/pyicloud-0.9.1.zip), because some people were having problems installing my fork from github. The requirements.txt has also been updated to point to this vendored copy.
So I've just updated that with this bugfix, and you can start using the fix by running git pull, then pip install -r requirements.txt

authors: evenwebb lapint ndbroadbent


text:
Kernel recipe patches v2, part 1 - reduce duplication

Moves settings and a function _append that were duplicated across the kernel recipes into common .inc files.

thanks. much easier to review, so far ! note this is likely breaking the recipe linux-linaro-lt-freedreno, (since it includes the same .inc) which we used long time ago. but don't worry about that, i have been willing to nuke that recipe for some time, so I will go ahead and remove it. if we need to add it back later (or add any QCOM Android based kernel) we will implement differently. This recipe is not used anymore, afaik.
i will look at the series again tonight, and will likely merge it as-is.

authors: madisongh ndechesne

repo: ndechesne/meta-qcom

license: mit

license_source: bigquery


text:
alwaysRerun doesn't work if added after

You have to have alwaysRerun in when you run the rule,  adding it after doesn't work. Worth making it clear since this function does look tempting.

Done.

repo: ndmitchell/shake


text:
New line with single CRLF

Hi,
I 've been using Atom to create and edit markdown files up to now. It also has a preview plugin, which has an option 'Break on single new line'.
But as I prefer using Notepad++ as an editor, I did some tests to edit and preview markdown files in it. Your plugin is exactly what is needed to preview, only it would be nice, if you could add the same option.
Regards,
Anne-Mie Wauters

Hey @Wautean
I like the idea. I will have a look how easy I can add that option over easter.
Cheers

Yeah
It will be great also for me
I have many file (more than 500) in markdown and I need a line break when I press  otherwise I can read them properly
It work fine on stackedit (my markdown editor of choice for now) but not here

I see others markdown editor and it works, it can be very usefull for the neatness of the viewer
Thanks

authors: Wautean lordmax nea

repo: nea/MarkdownViewerPlusPlus


text:
[DOC] Validator contract migration and upgrade docs

When a new validator contracts becomes available there is not clear documentation on how to migrate an existing staked validator or existing contract to a new contract.
I would like to take the tasks of creating these docs:

Migrating a staked validator to a contract
Migrating an existing contract to a new one.

I will however need some guidance from the team on a few points:

Does near create_account always overwrite ~/.near/betanet/validator_key.json?
Should near-shell be upgraded first before migrating?
When upgrading a contract to you need to unstake and withdrawn before pushing the new one.

Does near create_account always overwrite ~/.near/betanet/validator_key.json?

Never

Should near-shell be upgraded first before migrating?

Not necessarily, but it also doesn't hurt to upgrade.

When upgrading a contract to you need to unstake and withdrawn before pushing the new one.

Are you talking about contracts generally or some specific contract?

@bowenwang1996 I've learned so much since then! 😄
I actually forgot about this, but have addressed the first one in a PR.
As for the question, I was asking when you update an existing contract you have already deployed do you have to unstake your delegators first. I do not think you need to unstake them and now I know you can't they would have to.

@htafolla can we close this issue then?

Sorry. Yes.

authors: amgando bowenwang1996 htafolla

repo: near/docs


text:
Add external link feature

fix #182

@amgando CI is not passed. Do you know whether it is okay or how can I make it pass?

@icerove this isn't a good way to update links because now we have to remember to add this img tag to each external URL.  it would be better to do one of the following:

(EASY but a little SLOPPY) either add a CSS class called something like link-external that injects the image to the :after pseudoclass (i think that's what it's called)
(HARDER but CLEAN) or add some pre-processing step to the website build process that checks link URLs and automatically adds some external link icon if they're not on the docs domain

it's also possible that this feature is already included in Docusaurus v2 so you may want to check that out.
in general, these meta data edits are low priority so if you don't have time for this but still want to contribute to the docs, there are over 50 (!!) issues that could use your help 😉

for the record, I closed this without merging because the solution is not acceptable

authors: amgando icerove


text:
more allowances in test

Add more allowances to access key in test to make it work with https://github.com/nearprotocol/nearcore/pull/3028

Are the test failures legit?

@bowenwang1996 we need to change default attached gas I think as well, as we won't be giving 2 NEAR allowances in wallet (that is too much).

@chadoh I think it is just flaky.

@vgrichina sure. What do you want to change it to? Also that can be done in a separate PR

I'll merge this to unblock the nearcore PR

authors: bowenwang1996 chadoh vgrichina

repo: near/near-api-js


text:
Make env::log a macro

Currently env:log usage looks like:
env::log(format!("Transferred {} tokens from {} to {}", amount, sender_id, receiver_id).as_bytes());

But should be
env::log!("Transferred {} tokens from {} to {}", amount, sender_id, receiver_id)

BTW, the standard format! is bloated: https://ferrous-systems.com/blog/21st-century-embedded-tooling/

authors: frol willemneal

repo: near/near-sdk-rs


text:
Support * in allowed domains or callback

Hi!
First of all, thanks for the great library!
Feature request:
Domains option doesn't mean url domain, it means the whole issuer address. This is a problem for Keycloak: each realm has different issuer address: http://localhost:8080/realms/REALM_NAME.
This option doesn't support asterisk * or wildcard, so I cannot trust any certificate from my keycloak instance, I need to specify the exact one. Would be nice if you add a checkIssuer():bool function or a wildcard support

@eugenio-oddone please remember to link issues to PRs so they are closed when PRs are merged

authors: CyanoFresh simoneb

repo: nearform/get-jwks


text:
As a developer I want clear code style guidance and linting that whereever possible matches other NearForm accelerators

As discussed in today's (23rd July 2020) standup - there's some uncertainty about coding style, and a lot of differences in linting between this and other NearForm accelerators.
A good approach might be to take the most mature accelerator (Titus?), and match its linting and any other code style wherever possible.

Done in https://github.com/nearform/polaris/pull/75

repo: nearform/polaris


text:
Balances should be in NEAR

Currently balances are shown in attoNEAR (10^-18 of NEAR). We should divide by 10^-18

@vgrichina Which BigInt/Decimal library do you use in Wallet for NEAR tokens?

Resolved in #79

authors: frol ilblackdragon

repo: nearprotocol/near-explorer


text:
fn/closures 2

Close Issue #30

Thank you!

authors: HongThaiPham Jammyaa

repo: nebula-labs/rust-by-example-vn


text:
consider overflow-anchor: none?

Since version 56, Chrome enables Scroll Anchoring feature by default, and most of other browsers have not support it yet.
Turned this feature on already affect some of popular libraries, for example ui-grid scrolling issue
Should we consider setting overflow-anchor: none to disable this feature?

I'd consider this sort of thing a "useful default", though. Certainly frameworks will need to opt-out in certain circumstances (e.g. twbs/bootstrap#1384), but completely nullifying such intentional browser behaviour by default seems excessive.

but completely nullifying such intentional browser behaviour by default seems excessive.

but isn't what normalize is about? Normalizing styles across browsers...

I personally view normalize as a tool to help build layouts cross browser (by smoothing gotchas like one browser using padding for list items and another using margin).
Taking on the role of browser behavior police seems a self destructive mission. Browser makers constantly try to make the user experience better. If normalize starts nullifying every change, then it amounts to IE6-ifiying the web, just with 2016 features.
Browsers are gonna evolve, and not in sync with each other, and I think normalize should give that process time, to see if a new consensus happens among browsers, before bringing down the feature nullification hammer.

@gouch, yes, and we have specs to guide us on expected behavior that other browsers yet honor. We do not set the web back.

Playing devil's advocate...
I think the issue here is that Normalize becomes opinionated and not reliable enough in relation to its "mission statement" which tells authors what they should expect from it.

Normalizes styles for a wide range of elements.
Corrects bugs and common browser inconsistencies.

Many devs onboard Normalize on the promise that it takes care of inconsistencies between browsers but this is no longer the case when Normalize decides that a brand new browser feature (vendor specific) is deemed "cool" enough to not be normalized.
To me, the responsibility of Normalize is to level things (good or bad) and the responsibility of devs is to understand this. In other words, authors should not rely on Normalize to implement opinionated styles (as in allowing discrepancies) they should rather understand what Normalize is meant to be and stye things accordingly.
In this case, Normalize could use overflow-anchor: none and authors would overwrite that with a simple overflow-anchor: auto. And note that in the case of angular-ui-grid there would be nothing to overwrite as it is the style they would need.
This is not about "setting the web back", it is about respecting user's expectations. It is about doing what Normalize is supposed to do: normalize styles and corrects common browser inconsistencies. After all, we are not talking about "unsetting" a style that Chrome supports according to specs—overflow-anchor is just a draft.
This being said, I don't think Normalize should take care of every style/experiment a vendor decides to ship. Normalize should rather clearly defines what it is supposed to take care of.

From the beginning, whenever browsers have disagreed, normalize has followed the spec, even when it hurt a little; from fixed to relative margins on headings in old IE to abbr[title] being an underline instead of border-bottom. The exception to this rule was the old opinionated styles which never really fit in and only ever caused problems. Now, if you feel the tag line for the project is mistaken, a suggestive PR would be reviewed. :)

Now, if you feel the tag line for the project is mistaken, a suggestive PR would be reviewed. :)

I'm just trying to start a discussion here. If you recall, I've tried that in the past but it didn't go anywhere ;)
I personally do not care what the project on-boards or not as long as it follows a specific set of rules so devs know exactly what to expect from Normalize (which would also make them more confident regarding new releases).

@thierryk Normalize's "mission statement" also states:

Preserves useful defaults, unlike many CSS resets.

In the majority of cases, Scroll Anchoring seems to be a useful default, and in the fraction of cases where it is not, custom CSS should handle that. Additionally, Normalize is moving to drop "opinionated" styles in 6.0.0 and focus patching fixing critical browser bugs. In my opinion, this is well on the "opinionated" side of things.

@bardiharborow, you said:

Preserves useful defaults, unlike many CSS resets.

Not really since the styling of margin on body is a reset. So you see that it is not that clear, and that's exactly what I'm trying to discuss here—the fact that users do not really know what to expect from Normalize.
I just think Normalize is trying to address too many issues...
In my opinion, Normalize should relate to UA styles sheets, in which case the margin of body would not be reset and styles like overflow-anchor would be ignored, because it is vendor specific.
That's my POV but I think it could be anything else as long as it follows a specific set of rules that would help make clear decisions. When something new come up, we should be able to address it without having to resort to some kind of "voting"...

@thierryk, thanks. I’m closing this and preserving Chrome’s implementation.

authors: MarkoCen bardiharborow gouch jonathantneal thierryk


text:
Pseudo class on utility reports as an error

Using this rule I get a failure message:
.u-linkMuted:hover {
  /* declarations */
}

6:3	Invalid utility selector ".u-linkMuted:hover" [postcss-bem-linter]

As far as I know pseudo classes on utilities are allowed, seen here in suitcss-utils-link for example

I'm curious if the problem you're having is with the latest release or with master?
I think I tried in the unreleased master code to solve that here: https://github.com/necolas/postcss-bem-linter/blob/master/lib/is-valid-selector.js#L77

Hmm, I am using master. Not sure how old it is. Will update

OK. If it's still there after updating then it's a bug :)

Still seeing it. Perhaps allow : in the second character class here? - https://github.com/necolas/postcss-bem-linter/blob/master/lib/preset-patterns.js#L11

Oh I see ... dumb mistake. The handling of pseudos is applying to component selectors but not utility selectors. I will fix quick.

Thanks for the fix on this.
Any chance we can get this merged with a new tag? Would be good to not install master as a dependency.

Other than that bug, has master been working as expected for you?

Yeah, using it on a couple projects at the moment. Main reason to use master right now is for the namespace support. All seems good.

Well, I just merged the PR into master. We'll see about a release cc/ @necolas

authors: davidtheclark simonsmith

repo: necolas/postcss-bem-linter