I'm not following all the details here, and I do not feel strongly about 
syntax; but I do hope that you'll update the wiki page to reflect the 
discussion.

Thanks

Simon

-----Original Message-----
From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of Ryan Scott
Sent: 18 July 2016 15:00
To: Richard Eisenberg <e...@cis.upenn.edu>
Cc: Andres Loeh <m...@andres-loeh.de>; GHC developers <ghc-devs@haskell.org>
Subject: Re: Request for feedback: deriving strategies syntax

Andres,

> The objects probably shouldn't be type synonyms, but they could be 
> special datatypes or type families, perhaps.

I considered that - we already have some special datatypes, type families, and 
type classes currently. However, neither datatypes nor type families are 
allowed to appear as the outermost type in an instance declaration (unless we 
bake in a very prominent exception to this rule), and if we imbued type classes 
with this magic, one might think that "deriving (GND Eq)" means we're deriving 
an instance for the magical GND class, not Eq. So those approaches don't sound 
satisfying to me on a cursory examination.

Richard,

> The one idea I can suggest in this space (somewhat tongue-in-cheek, 
> but feel free to take it seriously) is `bespoke`

It might be a tongue-in-cheek suggestion, but I _really_ like it. It captures 
the intended semantics better than any other previous suggestion, I think. And 
we're already going to be appropriating a new keyword with "anyclass", so why 
not take "bespoke" as well? :)

Please stop me if I've slipped into madness here.

> I thought about verbosity here, and it's not clear which one is more verbose. 
> For example, I frequently define a new newtype and then wish to use GND to 
> derive a whole host of instances. In this case (is it common?), `deriving (X, 
> Y) deriving newtype (A,B,C,D,E,F)` is shorter than putting newtype on each 
> class name.

That's a good point. Another thing to consider is that I suspect in 90% of the 
time, users are only going to be reaching for -XDerivingStrategies in the 
scenario when they enable both -XGeneralizedNewtypeDeriving and 
-XDeriveAnyClass. That will happen when they want to derive instances for 
newtypes, and as you said, you typically derive several instances at a time 
when defining newtypes.
Therefore, it seems less noisy to factor out the deriving strategy names so 
that readers can tell at a glance which batch of instances are newtype-derived 
and which are anyclass-derived, instead of having to read a keyword before 
every single type.

Plus, on a superficial level, I like keeping the deriving strategy name outside 
of the parentheses. I think it makes clear that these keywords aren't modifying 
the type we're deriving, only the means by which we're deriving it. Of course, 
you may feel differently than I do, so please speak up if you disagree!


Ryan S.
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.haskell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7cea562a7e9e494f07cede08d3af13cbc7%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=rKTWOkEZsKUdDOTnk7WL2BNx1lf36uelef4JDg0pX44%3d
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to