Concrete syntax for pattern synonym type signatures

Simon Peyton Jones simonpj at microsoft.com
Mon Nov 10 08:37:47 UTC 2014


|  I should note that I can say this in 7.8.3:
|  
|  foo :: Show a => Eq a => a -> String
|  foo x = show x ++ show (x == x)


Yes, that's right. SO using two arrows for pattern synonyms would be an abuse of notation.  But (a) the 'pattern' keyword signals that something different is coming up, (b) used in an expression, the type does have the same meaning (i.e. both contexts are required), (c) the alternatives seem worse!

Simon

|  -----Original Message-----
|  From: Richard Eisenberg [mailto:eir at cis.upenn.edu]
|  Sent: 10 November 2014 03:03
|  To: Simon Peyton Jones
|  Cc: Dr. ERDI Gergo; GHC Devs
|  Subject: Re: Concrete syntax for pattern synonym type signatures
|  
|  
|  On Nov 9, 2014, at 2:11 PM, Simon Peyton Jones <simonpj at microsoft.com>
|  wrote:
|  >
|  > * One other possibility would be two => thus
|  > 	pattern P :: (Eq b) => (Num a, Eq a) => ...blha...
|  >
|  
|  I should note that I can say this in 7.8.3:
|  
|  foo :: Show a => Eq a => a -> String
|  foo x = show x ++ show (x == x)
|  
|  Note that I've separated the two constraints with a =>, not a comma.
|  This syntax does what you might expect. (I actually believe that this
|  is an improvement over the conventional syntax, but that's a story for
|  another day.) For better or worse, this trick does not work for GADT
|  constructors (which is a weird incongruence with function type
|  signatures), so adding the extra arrow does not really steal syntax
|  from GADT pattern synonyms.
|  
|  Richard


More information about the ghc-devs mailing list