Need help interpreting renamer trace output

Philip K.F. Hölzenspies p.k.f.holzenspies at
Wed Mar 6 10:18:49 CET 2013

Dear GHC-ers,

I'm looking into the inerts of the renamer and I'm trying to get a feel
for where things are bound. I thought it would be useful to have a look
at how the renamer works on something known, so I compiled the following
program (with HEAD):

class Foo x where
  type FooTy x y
  foo :: x t -> FooTy x t
instance Foo [] where
  type FooTy [] a = a
  foo (x:xs) = x

main = print "Done"

In the output of -ddump-rn-trace, I see this around the declaration of
the class Foo:

bhtv [x, y]
     ([(v1A, x), (v1C, y)], [(afy, x), (afz, y)])
bhtv [t]
     ([(v1A, x), (vjW, t)], [(afy, x), (afA, t)])
rnTycl [(class Foo x where
           type family FooTy x y
           foo :: x t -> FooTy x t,
         [(rfv, FooTy)])]
           class Foo x where
             type family FooTy x y
             foo :: x t -> FooTy x t]

I had expected that the 'x' and 'y' would have had the same uniques. The
last tuple of bhtv is a LocalRdrEnv, which is (OccEnv Name, NameSet).
Can someone explain to me the uses of both of these parts and why the
names mentioned in each have different uniques?


More information about the Glasgow-haskell-users mailing list