Deriving clauses for EmptyDataDecls [was: request for reviews for my first patch -- ticket 7401]

Daniel Wagner wagnerdm at seas.upenn.edu
Wed Aug 14 14:36:24 CEST 2013


This is only tangentially related, but I would like to point out another 
consideration:

Retroactively changing the meaning of extensions is _very_ annoying for 
library writers. cabal makes it easy to demand particular extensions 
(and make the build fail very early with a meaningful error message when 
the extension isn't available), but doesn't really provide a good way 
for a library to say "I want EmptyDataDecls, but if it's GHC, I also 
demand that it be GHC 7.8 or later because that's when the meaning of 
EmptyDataDecls changed".

~d

On 2013-08-14 01:16, Austin Seipp wrote:
> On Mon, Aug 12, 2013 at 9:33 AM, Richard Eisenberg <eir at cis.upenn.edu> 
> wrote:
>> My proposal below doesn't really give different behavior for 
>> EmptyDataDecls in the two scenarios… the available constructs are the 
>> same under either H98 or H2010. It's just that the "distance" from the 
>> spec is different.
>> 
>> Personally, I'm loathe to stray from a well-defined note in a standard 
>> for this.
> 
> You're right, sorry about that. I suppose we can let someone else
> weigh in on this note.
> 
>> I see my proposal below as a feasible solution to #7401, but I would 
>> actually favor not implementing any change here, because the 
>> workaround -- using standalone deriving -- is so easy and doesn't seem 
>> to have any real drawbacks (e.g. performance).
> 
> Hmmm, I'm sort of ambivalent at this point.
> 
> Looking at the user manual[1], the relevant point for
> -XStandaloneDeriving is that "Unlike a deriving declaration attached
> to a data declaration, GHC does not restrict the form of the data
> type..."
> 
> At the same time, from a user POV, I'd think it's reasonably annoying 
> to reject:
> 
> data Foo deriving (Eq, Show, Ord)
> 
> in favor of:
> 
> data Foo
> deriving instance Eq
> deriving instance Show
> deriving instance Ord
> 
> with an extra extension - and if you happen to mention a type
> variable, then it gets even longer since the context isn't inferred.
> 
> Also, given that EmptyDataDecls in its current form is now standard in
> H2010, but StandaloneDeriving is not, this makes for longer code for
> people who do want to be standards compliant to write the trivial
> instance. And as a user of H2010, I'd see an empty data type as "a
> data type" - and not an extension. So I might expect deriving to work
> consistently with it, like with any other H2010 data type.
> 
> This, I suppose, is what I was alluding to when I talked about
> 'inconsistency' earlier. Although, then it is a question of the
> standard itself! And then maybe it should be under an extra flag.
> 
> I think there are legitimate points on all sides here. But, I think
> this is pretty squarely a 'user interface problem'. It's easy for us
> no matter what. So, I have CC'd glasgow-haskell-users - I think
> there's room for voices on this note, and I'd really appreciate users
> and developers weighing in.
> 
> [1] 
> http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/deriving.html
> 
>> Richard
>> 
>> On Aug 12, 2013, at 12:55 AM, Austin Seipp wrote:
>> 
>>> On Sun, Aug 11, 2013 at 10:00 PM, Richard Eisenberg 
>>> <eir at cis.upenn.edu> wrote:
>>>> But, instead of creating a new extension for this feature, what 
>>>> about just co-opting EmptyDataDecls? More concretely, I propose 
>>>> this:
>>>> 
>>>> Under H98: EmptyDataDecls allows both the declaration of empty data 
>>>> decls and deriving instances for them.
>>>> 
>>>> Under H2010: EmptyDataDecls allows deriving instances for empty data 
>>>> decls.
>>>> 
>>>> This proposal brings the annoyance that H2010 no longer implies 
>>>> EmptyDataDecls.
>>>> 
>>>> Thoughts?
>>>> 
>>>> Richard
>>>> 
>>> 
>>> IMHO, I'd find this inconsistency in extension behavior much more
>>> annoying than just going against the standard on this note. But 
>>> that's
>>> just my 0.02c.
>>> 
>>> --
>>> Regards,
>>> Austin - PGP: 4096R/0x91384671
>> 




More information about the Glasgow-haskell-users mailing list