-import Ubiq
-
-import HsSyn ( HsLit(..), HsExpr(..), HsBinds,
- InPat, OutPat, Stmt, Qual, Match,
- ArithSeqInfo, PolyType, Fake )
-import RnHsSyn ( RenamedArithSeqInfo(..), RenamedHsExpr(..) )
-import TcHsSyn ( TcIdOcc(..), TcExpr(..), TcIdBndr(..),
- mkHsTyApp, mkHsDictApp )
-
-import TcMonad hiding ( rnMtoTcM )
-import TcEnv ( tcLookupGlobalValueByKey )
-import TcType ( TcType(..), TcRhoType(..), TcMaybe, TcTyVarSet(..),
- tcInstType, zonkTcType )
-
-import Bag ( emptyBag, unitBag, unionBags, unionManyBags, listToBag, consBag )
-import Class ( Class(..), GenClass, ClassInstEnv(..), classInstEnv )
-import Id ( GenId, idType, mkInstId )
-import MatchEnv ( lookupMEnv, insertMEnv )
-import Name ( mkLocalName, getLocalName, Name )
+#include "HsVersions.h"
+
+import HsSyn ( HsLit(..), HsExpr(..) )
+import RnHsSyn ( RenamedArithSeqInfo, RenamedHsExpr, RenamedPat )
+import TcHsSyn ( TcExpr, TcId,
+ mkHsTyApp, mkHsDictApp, mkHsConApp, zonkId
+ )
+import TcMonad
+import TcEnv ( TcIdSet, InstEnv, tcGetInstEnv, lookupInstEnv, InstLookupResult(..),
+ tcLookupValueByKey, tcLookupTyConByKey
+ )
+import TcType ( TcThetaType,
+ TcType, TcTauType, TcTyVarSet,
+ zonkTcTyVars, zonkTcType, zonkTcTypes,
+ zonkTcThetaType
+ )
+import Bag
+import Class ( Class, FunDep )
+import FunDeps ( instantiateFdClassTys )
+import Id ( Id, idFreeTyVars, idType, mkUserLocal, mkSysLocal )
+import PrelInfo ( isStandardClass, isCcallishClass, isNoDictClass )
+import Name ( OccName, Name, mkDictOcc, mkMethodOcc, mkIPOcc,
+ getOccName, nameUnique )
+import PprType ( pprPred )
+import SrcLoc ( SrcLoc )
+import Type ( Type, PredType(..), ThetaType,
+ mkTyVarTy, isTyVarTy, mkDictTy, mkPredTy,
+ splitForAllTys, splitSigmaTy,
+ splitRhoTy, tyVarsOfType, tyVarsOfTypes, tyVarsOfPred,
+ mkSynTy, tidyOpenType, tidyOpenTypes
+ )
+import Subst ( emptyInScopeSet, mkSubst,
+ substTy, substClasses, mkTyVarSubst, mkTopTyVarSubst
+ )
+import TyCon ( TyCon )
+import Literal ( inIntRange )
+import Var ( TyVar )
+import VarEnv ( lookupVarEnv, TidyEnv,
+ lookupSubstEnv, SubstResult(..)
+ )
+import VarSet ( elemVarSet, emptyVarSet, unionVarSet )
+import TysPrim ( intPrimTy, floatPrimTy, doublePrimTy )
+import TysWiredIn ( intDataCon, isIntTy,
+ floatDataCon, isFloatTy,
+ doubleDataCon, isDoubleTy,
+ integerTy, isIntegerTy,
+ voidTy
+ )
+import Unique ( fromRationalClassOpKey, rationalTyConKey,
+ fromIntClassOpKey, fromIntegerClassOpKey, Unique
+ )
+import Maybes ( expectJust )
+import Maybe ( catMaybes )
+import Util ( thenCmp, zipWithEqual, mapAccumL )