haskell / error-messages

71 stars 18 forks source link

Unbound variable in a pattern synonym #531

Open monoidal opened 2 years ago

monoidal commented 2 years ago

This

{-# LANGUAGE PatternSynonyms #-}
pattern P x = ()

gives

M.hs:2:11: error: Not in scope: ‘x’
  |
2 | pattern P x = ()
  |           ^

I think this is too terse and the error should give more explanation. For a newcomer, it's very natural to expect it to work, because f x = () works.

For comparison,

pattern Q = x

gives

M.hs:2:13: error:
    Invalid right-hand side of bidirectional pattern synonym ‘Q’:
      ‘x’ is not bound by the LHS of the pattern synonym
    RHS pattern: x
  |
2 | pattern Q = x
  |             ^

This is better, though it could also suggest adding 'x' to the LHS, or changing it to a wildcard, or making the pattern synonym unidirectional.

goldfirere commented 2 years ago

I'm personally happy enough with the second message, but I agree the first could have a

NB: Variables in a pattern synonym are bound to the right of the '='