
Matthew What you say sounds reasonable to me. I certainly don't have a strong opinion that the current design is the "right" one. Simon | -----Original Message----- | From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Matthew | Pickering | Sent: 01 October 2015 12:23 | To: GHC developers | Subject: Pattern Synonym Signature Confusion | | I think that the current state of pattern synonym signatures is quite | confusing, especially regarding the constraints. For those unfamiliar, | a signature looks like the following, | | pattern ExNumPat :: (Show b) => (Num a, Eq a) => b -> T a | | The first constraint being the "provided constraints" and the second | the "required constraints". | | My main concern is when only a single constraint is specified then | these are treated as the provided constraints. The manual gives the | reason that this is the "more common" choice. It seems that this | motivation is driven by the original ticket which had a lengthy | discussion about GADTs. In my experience, the opposite is true, it is | more common to have required constraints. | | This is true especially in a few common cases such as "pattern Foo = | 27", where users define pattern synonyms which have (overloaded) | literals on the RHS. The most general signature for such a pattern is | "pattern :: () => (Eq a, Num a) => a". | | For this reason, I think it would be better if either | | 1. Only specifying one constraint corresponded to the required constraints | 2. We required users to specify both sets of constraints, even if the | provided constraints are empty. | | In terms of breakage, I don't think that pattern synonym signatures | are widely used yet. In both schemes it is possible to write backwards | compatible code by writing both sets of constraints. | | I think a lot of the confusion also arises from the unusual form of | the signature, it is unusual to specify two sets of constraints and I | suspect users tends to assume that a single set of constraints is | either provided or required depending on what they want it to mean. | Forcing the specification of both, forces the user to make the | distinction earlier rather than trying to decipher error messages. | | Thoughts? | | Matt | _______________________________________________ | ghc-devs mailing list | ghc-devs@haskell.org | https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.haske | ll.org%2fcgi-bin%2fmailman%2flistinfo%2fghc- | devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c403e493d2a54438d264 | 408d2ca52b5b9%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=sjc2n0Gm1A%2ffe | OKEpntmEYqTfbYaLvk2sb%2b2vUqIqLU%3d