+
+import RnBinds ( rnMethodBinds, rnTopMonoBinds )
+import RnEnv ( newDfunName, bindLocatedLocalsRn )
+import RnMonad ( RnNameSupply,
+ renameSourceCode, thenRn, mapRn, returnRn )
+
+import Bag ( Bag, emptyBag, unionBags, listToBag )
+import Class ( classKey, Class )
+import ErrUtils ( ErrMsg )
+import MkId ( mkDictFunId )
+import Id ( mkVanillaId )
+import DataCon ( dataConArgTys, isNullaryDataCon )
+import PrelInfo ( needsDataDeclCtxtClassKeys )
+import Maybes ( maybeToBool )
+import Name ( isLocallyDefined, getSrcLoc,
+ Name, Module, NamedThing(..),
+ OccName, nameOccName
+ )
+import SrcLoc ( mkGeneratedSrcLoc, SrcLoc )
+import TyCon ( tyConTyVars, tyConDataCons, tyConDerivings,
+ tyConTheta, maybeTyConSingleCon, isDataTyCon,
+ isEnumerationTyCon, isAlgTyCon, TyCon
+ )
+import Type ( GenType(..), TauType, mkTyVarTys, mkTyConApp,
+ mkSigmaTy, mkDictTy, isUnboxedType,
+ splitAlgTyConApp
+ )
+import TysWiredIn ( voidTy )
+import Var ( TyVar )
+import Unique -- Keys stuff
+import Bag ( bagToList )
+import Util ( zipWithEqual, sortLt, removeDups, assoc, thenCmp )
+import Outputable