error-messages icon indicating copy to clipboard operation
error-messages copied to clipboard

Unbound variable in a pattern synonym

Open monoidal opened this issue 3 years ago • 1 comments

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.

monoidal avatar Oct 18 '22 01:10 monoidal

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 '='

goldfirere avatar Oct 19 '22 12:10 goldfirere