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)])]
       [REC
           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?

Regards,
Philip




_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to