Concrete syntax for pattern synonym type signatures

Richard Eisenberg eir at
Mon Nov 10 03:02:53 UTC 2014

On Nov 9, 2014, at 2:11 PM, Simon Peyton Jones <simonpj at> 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.


More information about the ghc-devs mailing list