[GHC] #10928: Refine pattern synonym sigantures

GHC ghc-devs at haskell.org
Sat Oct 3 13:07:31 UTC 2015


#10928: Refine pattern synonym sigantures
-------------------------------------+-------------------------------------
           Reporter:  mpickering     |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.0.1
          Component:  Compiler       |           Version:  7.10.2
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |
-------------------------------------+-------------------------------------
 > 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.
 >

 This is copied from a message sent to ghc-devs. This ticket is to track
 the progress.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10928>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list