Generic deriving in GHC
José Pedro Magalhães
jpm at cs.uu.nl
Fri Oct 29 05:32:31 EDT 2010
Hi Simon,
2010/10/28 Simon Peyton-Jones <simonpj at microsoft.com>
> OK good. I got it built. Then I compiled
>
> data D = D
>
> with –XGenerics –ddump-deriv –dppr-debug
>
> The “-dppr-debug” flag makes the uniques show up.
>
>
>
> Then you can see that the two from0 occurrences have different uniques,
> hence the error.
>
>
>
> The problem was that you’d assigned a unique to fromOName, namely
> from0ClassOpKey, but you hadn’t added from0 to the list of
> basicKnownKeyNames in PrelNames.
>
>
>
> Have a look here
> http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/WiredIn
>
>
>
> In fact you don’t need to give a Key to from0. Instead, just use a
> qualifed RdrName Generics.from0. You want an “Orig” RdrName (see
> http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/RdrNameType).
> You build one of those with varQual_RDR; there are lots of other examples in
> PrelNames.
>
>
>
> I’ve made a patch and have pushed it, so you can just pull.
>
Great, it works now, thanks.
>
>
> I have started a wiki page in the Commentary
> http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/GenericDeriving
>
>
>
> Can you fill in brief details, summarising where the main code lives?
> Details belong in the code itself; this overview is just to orient someone,
> and to help us to work together. Eg you can record open problems, or to-do
> lists.
>
Yes, I've started doing this.
Can you tell me what is the best way to create new (empty) datatypes? We
need those for the meta-information. Basically, a user-defined datatype
data A a = A0 | A1 a (A a)
>
gives rise to compiler-generated datatypes
data D_A
> data C_A0
> data C_A1
> data S_A0_0
> data S_A1_0
> data S_A1_1
>
that are used in the representation type for A
Rep (A a) = D1 D_A ((C1 C_A0 (S1 S_A0_0 U1)) :+: (C1 C_A1 (S1 S_A1_0 (Par0
> a) :*: S1 S_A1_1 (Rec0 (A a)))))
>
and given instances of the meta-information classes
instance Datatype D_A ...
> instance Constructor C_A0 ...
> instance Selector S_A0_0 ...
>
I don't think we can create new datatypes in TcDeriv; am I right? Where
should this be done?
(Also, I still have the assembler errors when there is more than one
datatype. This is also documented on the commentary page.)
Thanks,
Pedro
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/cvs-ghc/attachments/20101029/945781bc/attachment.html
More information about the Cvs-ghc
mailing list