amulet icon indicating copy to clipboard operation
amulet copied to clipboard

Confusing error location on `type syn <- foo [bar]`

Open s5bug opened this issue 3 years ago • 1 comments

In the code

type foo <- list [string]

I accidentally use [string] instead of list string. This leads to a confusing error:

types.ml[1:1 ..1:8]: error (E2001)
  │
1 │ type foo <- list [string]
  │ ^^^^^^^^
  Couldn't match actual type type
    with the type expected by the context, list type

The error location is wrong, pointing to type foo instead of [string].

The same error does not occur without a type constructor, in fact type foo <- [string, int] is accepted as valid by amc. Should I open an issue for that too?

s5bug avatar Sep 01 '21 17:09 s5bug

Oh, this'll be interesting. I have a feeling we don't preserve position information by the time we get to the TC.

The same error does not occur without a type constructor, in fact type foo <- [string, int] is accepted as valid by amc. Should I open an issue for that too?

That bit is intentional - it's a type-level list.

SquidDev avatar Sep 01 '21 18:09 SquidDev