|  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:e...@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 <simo...@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
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to