The Eq constraint is needed to support pattern matching, the raison d’être of pattern synonyms. I'm pretty sure the reason you need ScopedTypeVariables for your second example is that GHC only allows pattern signatures with that extension enabled. Once upon a time there was a separate PatternSignatures extension, I believe, but not any more.

On Sep 30, 2015 2:04 PM, "Sven Panne" <svenpanne@gmail.com> wrote:
The type of a pattern synonym like

   pattern FOO = 1234

seems to be '(Eq a, Num a) => a', which makes partially makes sense, although it's not immediately clear to me where the 'Eq a' part comes from. But probably that would be clear if I read the desugaring rules closely enough. ;-) My real question is about:

   pattern FOO = 1234 :: Int

This doesn't compile out of the box, GHC seems to require ScopedTypeVariables, too:

    Illegal type signature: `Int'
      Perhaps you intended to use ScopedTypeVariables
    In a pattern type-signature

Why is this the case? From a user perspective, the error is totally bogus, there are no visible type variables at all. Can GHC be fixed to avoid enabling ScopedTypeVariables?

Cheers,
   S.


_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users