-rnClassBinds :: RdrNameTyClDecl -> RenamedTyClDecl -> RnMS (RenamedTyClDecl, FreeVars)
-rnClassBinds (ClassDecl {tcdMeths = Nothing})
- rn_cls_decl@(ClassDecl {tcdSigs = sigs})
- -- No method bindings, so this class decl comes from an interface file,
- -- However we want to treat the default-method names as free (they should
- -- be defined somewhere else). [In source code this is not so; the class
- -- decl will bind whatever default-methods are necessary.]
- = returnRn (rn_cls_decl, mkFVs [v | ClassOpSig _ (DefMeth v) _ _ <- sigs])
-
-rnClassBinds (ClassDecl {tcdMeths = Just mbinds}) -- Get mbinds from here
- rn_cls_decl@(ClassDecl {tcdTyVars = tyvars, tcdLoc = src_loc}) -- Everything else is here
+finishSourceTyClDecl :: RdrNameTyClDecl -> RenamedTyClDecl -> RnMS (RenamedTyClDecl, FreeVars)
+ -- Used for source file decls only
+ -- Renames the default-bindings of a class decl
+ -- the derivings of a data decl
+finishSourceTyClDecl (TyData {tcdDerivs = Just derivs, tcdLoc = src_loc}) -- Derivings in here
+ rn_ty_decl -- Everything else is here
+ = pushSrcLocRn src_loc $
+ mapRn rnDeriv derivs `thenRn` \ derivs' ->
+ returnRn (rn_ty_decl {tcdDerivs = Just derivs'}, mkNameSet derivs')
+
+finishSourceTyClDecl (ClassDecl {tcdMeths = Just mbinds, tcdLoc = src_loc}) -- Get mbinds from here
+ rn_cls_decl@(ClassDecl {tcdTyVars = tyvars}) -- Everything else is here