[Haskell-cafe] Is generic information dumpable?

José Pedro Magalhães jpm at cs.uu.nl
Fri Nov 4 11:36:27 CET 2011


2011/11/4 Bas van Dijk <v.dijk.bas at gmail.com>

> Thanks José!
>
> Will this make it into ghc-7.4?
>

Yes, I think so.


Cheers,
Pedro


>
> Bas
>
> 2011/11/4 José Pedro Magalhães <jpm at 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.bas at gmail.com>
> >>
> >> 2011/11/3 José Pedro Magalhães <jpm at 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
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111104/7e661766/attachment.htm>


More information about the Haskell-Cafe mailing list