amuletml / amulet

An ML-like functional programming language
https://amulet.works/
BSD 3-Clause "New" or "Revised" License
324 stars 14 forks source link

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

Open s5bug opened 2 years ago

s5bug commented 2 years ago

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?

SquidDev commented 2 years ago

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.