Thanks José! Will this make it into ghc-7.4?
Bas 2011/11/4 José Pedro Magalhães <j...@cs.uu.nl>: > Hi, > Now, for the following datatype: > data X a = X { myX :: a } deriving Generic > You get the following -ddump-deriv output: > ==================== Derived instances ==================== > Derived instances: > instance GHC.Generics.Generic (Temp.X a_adY) where > GHC.Generics.from (Temp.X g1_aeG) > = GHC.Generics.M1 > (GHC.Generics.M1 (GHC.Generics.M1 (GHC.Generics.K1 g1_aeG))) > GHC.Generics.to > (GHC.Generics.M1 (GHC.Generics.M1 (GHC.Generics.M1 (GHC.Generics.K1 > g1_aeH)))) > = Temp.X g1_aeH > > instance GHC.Generics.Datatype Temp.D1X where > GHC.Generics.datatypeName _ = "X" > GHC.Generics.moduleName _ = "Temp" > > instance GHC.Generics.Constructor Temp.C1_0X where > GHC.Generics.conName _ = "X" > GHC.Generics.conIsRecord _ = GHC.Types.True > > instance GHC.Generics.Selector Temp.S1_0_0X where > GHC.Generics.selName _ = "myX" > > Generic representation: > > Generated datatypes for meta-information: > Temp.D1X > Temp.C1_0X > Temp.S1_0_0X > > Representation types: > Temp.Rep_X = GHC.Generics.D1 > Temp.D1X > (GHC.Generics.C1 > Temp.C1_0X > (GHC.Generics.S1 Temp.S1_0_0X (GHC.Generics.Par0 > a_adY))) > Still not perfect, in that the representation type should really appear as a > type instance inside the Generic instance, but at least all the important > information is printed. > > Cheers, > Pedro > > 2011/11/3 Bas van Dijk <v.dijk....@gmail.com> >> >> 2011/11/3 José Pedro Magalhães <j...@cs.uu.nl>: >> > "-ddump-deriv" will print (most of) it. >> >> But it doesn't print the most useful piece of information: the >> definition of Rep. >> >> It would be great if this could be added. >> >> Currently when I have a type that I want to know the Rep of, say: >> >> data Foo = Bar Int >> | Boo {hello :: String} >> deriving Generic >> >> I just convert it to a Rep and show it: >> >> err = show $ from $ Boo "World" >> >> However Reps don't have Show instances so GHC complains: >> >> No instance for >> (Show (D1 D1Foo ( C1 C1_0Foo (S1 NoSelector (Rec0 Int)) >> :+: C1 C1_1Foo (S1 S1_1_0Foo (Rec0 String)) >> ) >> x0 >> ) >> ) >> arising from a use of `show' >> >> And there you go. This is the only time when I'm happy to see an error >> message :-) >> >> Bas > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe