Polymorphism errors look strange in LSP

Suppose this:

let nyaa = List.fold 5

It will produce this error:

Invalid type(s)
Cannot unify int with ( ^gen#8050 * ^gen#8048 ) -> ^gen#8050.

But ligo compile contract, on the other hand, will produce:

Invalid type(s)
Cannot unify "int" with "( ^a * ^b ) -> ^a".
Hint: "^b", "^a" represent placeholder type(s).

Acceptance criteria

  • We have better error messages for polymorphism in the language server.
  • Tests added.