+
+mkDynName :: OccName.NameSpace -> TH.OccName -> RdrName
+-- Parse the string to see if it has a "." in it
+-- so we know whether to generate a qualified or unqualified name
+-- It's a bit tricky because we need to parse
+-- Foo.Baz.x as Qual Foo.Baz x
+-- So we parse it from back to front
+
+mkDynName ns th_occ
+ = split [] (reverse (TH.occString th_occ))
+ where
+ split occ [] = mkRdrUnqual (mk_occ occ)
+ split occ ('.':rev) = mkRdrQual (mk_mod (reverse rev)) (mk_occ occ)
+ split occ (c:rev) = split (c:occ) rev
+
+ mk_occ occ = OccName.mkOccFS ns (mkFastString occ)
+ mk_mod mod = mkModuleName mod