According to the Haskell 2010 report 
(http://www.haskell.org/onlinereport/haskell2010/haskellch11.html#x18-18200011),
 a datatype with no constructors cannot derive any instances.

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

On Aug 11, 2013, at 10:28 PM, Austin Seipp wrote:

> Technically, EmptyDataDecls is part of Haskell 2010, so it is standard
> these days (and H2010 is our default in GHC.)
> 
> As far as I know, the 2010 standard doesn't address this point about
> deriving for empty data decls, but I agree with your reasoning here.
> It's more consistent to have it apply to all of the base classes which
> are derivable.
> 
> On Sun, Aug 11, 2013 at 9:14 PM, Richard Eisenberg <e...@cis.upenn.edu> wrote:
>> Maybe it's best if Show, Ord, etc., echo the new behavior for Eq, if 
>> EmmptyDataDecls is specified. The reason for the check in cond_stdOK is to 
>> make sure that we're conforming to the Haskell standard. But, if the user 
>> has specified EmptyDataDecls, then we're not bound to that requirement 
>> anymore. So, to me, it seems reasonable that the "null data_cons" check 
>> should be omitted for any class if EmptyDataDecls is specified.
>> 
>> What do others think? This would go beyond the scope of the particular 
>> reported bug, but it seems to make sense to me.
>> 
>> Thanks,
>> Richard
>> 
>> On Aug 9, 2013, at 3:16 PM, Ömer Sinan Ağacan wrote:
>> 
>>> Removing `null data_cons`(compiler/typecheck/TcDeriv.lhs 1105) check
>>> for eq instance declarations fixes this, code generation part would be
>>> same(changes in TcGenDeriv.hs were wrong and TcGenDeriv needs to be
>>> unchanged)but I'm not sure how to remove that check only for eq
>>> instance(Show, Ord, etc. sould still fail with same error message and
>>> they're checked by same function, `cond_stdOK` -- line 1053).
>>> 
>>> ---
>>> Ömer Sinan Ağacan
>>> http://osa1.net
>>> 
>>> _______________________________________________
>>> ghc-devs mailing list
>>> ghc-devs@haskell.org
>>> http://www.haskell.org/mailman/listinfo/ghc-devs
>>> 
>> 
>> 
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs@haskell.org
>> http://www.haskell.org/mailman/listinfo/ghc-devs
> 
> 
> 
> -- 
> Regards,
> Austin - PGP: 4096R/0x91384671
> 


_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to