diff --git a/ghc/compiler/typecheck/Inst.lhs b/ghc/compiler/typecheck/Inst.lhs
index 64f831aca702ea2727d2c8b1128b7766ffa67c37..6ff359b5b0dd24bc4dd48b2bb6f4e24f9c2ec4bc 100644
--- a/ghc/compiler/typecheck/Inst.lhs
+++ b/ghc/compiler/typecheck/Inst.lhs
@@ -29,20 +29,19 @@ module Inst (
 
 #include "HsVersions.h"
 
-import HsSyn	( HsLit(..), HsExpr(..), MonoBinds(..) )
+import HsSyn	( HsLit(..), HsExpr(..), MonoBinds )
 import RnHsSyn	( RenamedArithSeqInfo, RenamedHsExpr )
 import TcHsSyn	( TcExpr, TcIdOcc(..), TcIdBndr, 
-		  TcDictBinds, TcMonoBinds,
 		  mkHsTyApp, mkHsDictApp, tcIdTyVars, zonkTcId
 		)
 import TcMonad
 import TcEnv	( tcLookupGlobalValueByKey, tcLookupTyConByKey )
 import TcType	( TcThetaType,
-		  TcType, TcRhoType, TcTauType, TcMaybe, TcTyVarSet,
-		  tcInstType, zonkTcType, zonkTcTypes, tcSplitForAllTy, tcSplitRhoTy,
+		  TcType, TcTauType, TcMaybe, TcTyVarSet,
+		  tcInstType, zonkTcType, zonkTcTypes, tcSplitForAllTy,
 		  zonkTcThetaType
 		)
-import Bag	( emptyBag, unitBag, unionBags, unionManyBags, bagToList,
+import Bag	( emptyBag, unitBag, unionBags, unionManyBags,
 		  listToBag, consBag, Bag )
 import Class	( classInstEnv,
 		  Class, ClassInstEnv 
@@ -51,14 +50,13 @@ import Id	( idType, mkUserLocal, mkSysLocal, Id,
 		  GenIdSet, elementOfIdSet
 		)
 import PrelInfo	( isStandardClass, isCcallishClass, isNoDictClass )
-import Name	( OccName(..), Name, mkLocalName, 
-		  mkSysLocalName, occNameString, getOccName )
+import Name	( OccName(..), Name, occNameString, getOccName )
 import PprType	( TyCon, pprConstraint )	
 import SpecEnv	( SpecEnv, matchSpecEnv, addToSpecEnv )
 import SrcLoc	( SrcLoc )
 import Type	( Type, ThetaType, instantiateTy, instantiateThetaTy, matchTys,
 		  isTyVarTy, mkDictTy, splitForAllTys, splitSigmaTy,
-		  splitRhoTy, matchTy, tyVarsOfType, tyVarsOfTypes,
+		  splitRhoTy, tyVarsOfType, tyVarsOfTypes,
 		  mkSynTy
 		)
 import TyVar	( zipTyVarEnv, lookupTyVarEnv, unionTyVarSets )
@@ -68,7 +66,7 @@ import Unique	( fromRationalClassOpKey, rationalTyConKey,
 		  fromIntClassOpKey, fromIntegerClassOpKey, Unique
 		)
 import Maybes	( MaybeErr, expectJust )
-import Util	( thenCmp, zipEqual, zipWithEqual, isIn )
+import Util	( thenCmp, zipWithEqual )
 import Outputable
 \end{code}
 
diff --git a/ghc/compiler/typecheck/TcBinds.lhs b/ghc/compiler/typecheck/TcBinds.lhs
index 43612e725d2c83e11dfc6448d52c46b05edcde7c..388925865c49c7c461837d21f8499d1286520ef6 100644
--- a/ghc/compiler/typecheck/TcBinds.lhs
+++ b/ghc/compiler/typecheck/TcBinds.lhs
@@ -19,7 +19,7 @@ import RnHsSyn		( RenamedHsBinds, RenamedSig(..),
 			  RenamedMonoBinds
 			)
 import TcHsSyn		( TcHsBinds, TcMonoBinds,
-			  TcExpr, TcIdOcc(..), TcIdBndr, 
+			  TcIdOcc(..), TcIdBndr, 
 			  tcIdType
 			)
 
@@ -38,7 +38,7 @@ import TcPat		( tcPat )
 import TcSimplify	( bindInstsOfLocalFuns )
 import TcType		( TcType, TcThetaType, TcTauType, 
 			  TcTyVarSet, TcTyVar,
-			  newTyVarTy, newTcTyVar, tcInstSigType, newTyVarTys,
+			  newTyVarTy, newTcTyVar, tcInstSigType,
 			  zonkTcType, zonkTcTypes, zonkTcThetaType, zonkTcTyVar
 			)
 import Unify		( unifyTauTy, unifyTauTyLists )
@@ -46,16 +46,16 @@ import Unify		( unifyTauTy, unifyTauTyLists )
 import Kind		( isUnboxedTypeKind, mkTypeKind, isTypeKind, mkBoxedTypeKind )
 import Id		( GenId, idType, mkUserId )
 import IdInfo		( noIdInfo )
-import Maybes		( maybeToBool, assocMaybe, catMaybes )
+import Maybes		( maybeToBool, assocMaybe )
 import Name		( getOccName, getSrcLoc, Name )
 import PragmaInfo	( PragmaInfo(..) )
 import Type		( mkTyVarTy, mkTyVarTys, isTyVarTy, tyVarsOfTypes,
-			  mkSigmaTy, splitSigmaTy, mkForAllTys, mkFunTys, getTyVar, mkDictTy,
+			  splitSigmaTy, mkForAllTys, mkFunTys, getTyVar, mkDictTy,
 			  splitRhoTy, mkForAllTy, splitForAllTys )
 import TyVar		( GenTyVar, TyVar, tyVarKind, mkTyVarSet, minusTyVarSet, emptyTyVarSet,
 			  elementOfTyVarSet, unionTyVarSets, tyVarSetToList )
-import Bag		( bagToList, foldrBag, isEmptyBag )
-import Util		( isIn, zipEqual, zipWithEqual, zipWith3Equal, hasNoDups, assoc )
+import Bag		( bagToList, foldrBag, )
+import Util		( isIn, hasNoDups, assoc )
 import Unique		( Unique )
 import BasicTypes	( TopLevelFlag(..), RecFlag(..) )
 import SrcLoc           ( SrcLoc )
diff --git a/ghc/compiler/typecheck/TcClassDcl.lhs b/ghc/compiler/typecheck/TcClassDcl.lhs
index 407f3d62c2a290a12032ff5778420a1ba986dc9d..818842cbabf81c5d16de166a380e03e5ae07de19 100644
--- a/ghc/compiler/typecheck/TcClassDcl.lhs
+++ b/ghc/compiler/typecheck/TcClassDcl.lhs
@@ -9,21 +9,18 @@ module TcClassDcl ( tcClassDecl1, tcClassDecls2, tcMethodBind, badMethodErr ) wh
 #include "HsVersions.h"
 
 import HsSyn		( HsDecl(..), ClassDecl(..), Sig(..), MonoBinds(..),
-			  InPat(..),
-			  andMonoBinds, collectMonoBinders,
-			  getTyVarName
+			  InPat(..), andMonoBinds, getTyVarName
 			)
 import HsPragmas	( ClassPragmas(..) )
 import BasicTypes	( NewOrData(..), TopLevelFlag(..), RecFlag(..) )
 import RnHsSyn		( RenamedClassDecl(..), RenamedClassPragmas(..),
 			  RenamedClassOpSig(..), RenamedMonoBinds,
-			  RenamedGenPragmas(..), RenamedContext(..), RenamedHsDecl
+			  RenamedContext(..), RenamedHsDecl
 			)
-import TcHsSyn		( TcHsBinds, TcMonoBinds, TcExpr,
-			  mkHsTyApp, mkHsTyLam, mkHsDictApp, mkHsDictLam, tcIdType )
+import TcHsSyn		( TcMonoBinds )
 
 import Inst		( Inst, InstOrigin(..), LIE, emptyLIE, plusLIE, newDicts, newMethod )
-import TcEnv		( TcIdOcc(..), newLocalIds, tcAddImportedIdInfo,
+import TcEnv		( TcIdOcc(..), tcAddImportedIdInfo,
 			  tcLookupClass, tcLookupTyVar, 
 			  tcExtendGlobalTyVars )
 import TcBinds		( tcBindWithSigs, checkSigTyVars, sigCtxt, sigThetaCtxt, TcSigInfo(..) )
@@ -36,9 +33,9 @@ import TcType		( TcType, TcTyVar, TcTyVarSet, tcInstSigTyVars,
 			)
 import PragmaInfo	( PragmaInfo(..) )
 
-import Bag		( bagToList, unionManyBags )
+import Bag		( unionManyBags )
 import Class		( mkClass, classBigSig, Class )
-import CmdLineOpts      ( opt_PprUserLength, opt_GlasgowExts )
+import CmdLineOpts      ( opt_GlasgowExts )
 import Id		( Id, StrictnessMark(..),
 			  mkSuperDictSelId, mkMethodSelId, 
 			  mkDefaultMethodId, getIdUnfolding, mkDataCon, 
@@ -46,16 +43,13 @@ import Id		( Id, StrictnessMark(..),
 			)
 import CoreUnfold	( getUnfoldingTemplate )
 import IdInfo
-import Name		( Name, isLocallyDefined, moduleString, getSrcLoc, 
-			  OccName, nameOccName,
-			  nameString, NamedThing(..) )
+import Name		( Name, isLocallyDefined, OccName, nameOccName,
+			  NamedThing(..) )
 import Outputable
-import SrcLoc		( mkGeneratedSrcLoc )
 import Type		( mkFunTy, mkTyVarTy, mkTyVarTys, mkDictTy, splitRhoTy,
-			  mkForAllTy, mkSigmaTy, splitSigmaTy, mkForAllTys, Type, ThetaType
+			  mkSigmaTy, mkForAllTys, Type, ThetaType
 			)
-import TysWiredIn	( stringTy )
-import TyVar		( unitTyVarSet, tyVarSetToList, mkTyVarSet, tyVarKind, TyVar )
+import TyVar		( mkTyVarSet, tyVarKind, TyVar )
 import TyCon		( mkDataTyCon )
 import Kind		( mkBoxedTypeKind, mkArrowKind )
 import Unique		( Unique, Uniquable(..) )
diff --git a/ghc/compiler/typecheck/TcDefaults.lhs b/ghc/compiler/typecheck/TcDefaults.lhs
index 714f278ca281e7c310d33b23784664979bafbbc5..f6e337e5b340156f146c01a3e31b16230e9d7168 100644
--- a/ghc/compiler/typecheck/TcDefaults.lhs
+++ b/ghc/compiler/typecheck/TcDefaults.lhs
@@ -9,15 +9,14 @@ module TcDefaults ( tcDefaults ) where
 #include "HsVersions.h"
 
 import HsSyn		( HsDecl(..), DefaultDecl(..) )
-import RnHsSyn		( RenamedHsDecl(..), RenamedDefaultDecl(..) )
+import RnHsSyn		( RenamedHsDecl(..) )
 
 import TcMonad
-import Inst		( InstOrigin(..) )
-import TcEnv		( TcIdOcc, tcLookupClassByKey )
+import TcEnv		( tcLookupClassByKey )
 import TcMonoType	( tcHsType )
 import TcSimplify	( tcSimplifyCheckThetas )
 
-import TysWiredIn	( intTy, doubleTy, unitTy )
+import TysWiredIn	( intTy, doubleTy )
 import Type             ( Type )
 import Unique		( numClassKey )
 import ErrUtils		( addShortErrLocLine )
diff --git a/ghc/compiler/typecheck/TcDeriv.lhs b/ghc/compiler/typecheck/TcDeriv.lhs
index 4e392531eeff7721e6d77296d34c7fe174cdd5a4..631833bb720f25c51f2c6bfd575a3bd7a9a6d247 100644
--- a/ghc/compiler/typecheck/TcDeriv.lhs
+++ b/ghc/compiler/typecheck/TcDeriv.lhs
@@ -11,13 +11,12 @@ module TcDeriv ( tcDeriving ) where
 #include "HsVersions.h"
 
 import HsSyn		( HsBinds(..), MonoBinds(..), collectMonoBinders )
-import HsPragmas	( InstancePragmas(..) )
 import RdrHsSyn		( RdrName, RdrNameMonoBinds )
-import RnHsSyn		( RenamedHsBinds, RenamedMonoBinds, RenamedFixityDecl )
+import RnHsSyn		( RenamedHsBinds, RenamedMonoBinds )
 
 import TcMonad
 import Inst		( InstanceMapper )
-import TcEnv		( TcIdOcc, getEnv_TyCons, tcLookupClassByKey )
+import TcEnv		( getEnv_TyCons, tcLookupClassByKey )
 import TcKind		( TcKind )
 import TcGenDeriv	-- Deriv stuff
 import TcInstUtil	( InstInfo(..), mkInstanceRelatedIds, buildInstanceEnvs )
@@ -25,16 +24,16 @@ import TcSimplify	( tcSimplifyThetas )
 
 import RnBinds		( rnMethodBinds, rnTopMonoBinds )
 import RnEnv		( newDfunName, bindLocatedLocalsRn )
-import RnMonad		( RnM, RnDown, GDown, SDown, RnNameSupply(..), 
-			  setNameSupplyRn, renameSourceCode, thenRn, mapRn, returnRn )
+import RnMonad		( RnM, RnDown, SDown, RnNameSupply(..), 
+			  renameSourceCode, thenRn, mapRn, returnRn )
 
-import Bag		( Bag, emptyBag, isEmptyBag, unionBags, listToBag )
+import Bag		( Bag, emptyBag, unionBags, listToBag )
 import Class		( classKey, Class )
 import ErrUtils		( ErrMsg )
 import Id		( dataConArgTys, isNullaryDataCon, mkDictFunId )
 import PrelInfo		( needsDataDeclCtxtClassKeys )
 import Maybes		( maybeToBool )
-import Name		( isLocallyDefined, getSrcLoc, ExportFlag(..), Provenance, 
+import Name		( isLocallyDefined, getSrcLoc, Provenance, 
 			  Name{--O only-}, Module, NamedThing(..)
 			)
 import SrcLoc		( mkGeneratedSrcLoc, SrcLoc )
@@ -48,12 +47,9 @@ import Type		( GenType(..), TauType, mkTyVarTys, mkTyConApp,
 			)
 import TysPrim		( voidTy )
 import TyVar		( GenTyVar, TyVar )
-import UniqFM		( emptyUFM )
 import Unique		-- Keys stuff
 import Bag		( bagToList )
-import Util		( zipWithEqual, zipEqual, sortLt, removeDups,  assoc,
-			  thenCmp, cmpList
-			)
+import Util		( zipWithEqual, sortLt, removeDups,  assoc, thenCmp )
 import Outputable
 \end{code}
 
diff --git a/ghc/compiler/typecheck/TcEnv.hi-boot b/ghc/compiler/typecheck/TcEnv.hi-boot
index 89ac4120d1027cbd1496141e4fd305a64cc2b8aa..62273d95a158452b5165cd9a86dddb8b660fe67d 100644
--- a/ghc/compiler/typecheck/TcEnv.hi-boot
+++ b/ghc/compiler/typecheck/TcEnv.hi-boot
@@ -1,6 +1,5 @@
 _interface_ TcEnv 1
 _exports_
-TcEnv TcEnv initEnv;
+TcEnv TcEnv;
 _declarations_
 1 data TcEnv a;
-1 initEnv _:_ _forall_ [a] => ArrBase.MutableVar a (TcType.TcTyVarSet a) -> TcEnv.TcEnv a ;;
diff --git a/ghc/compiler/typecheck/TcEnv.lhs b/ghc/compiler/typecheck/TcEnv.lhs
index a790a8b7926a387f686c0a4328a76a4c3d7eb3c4..587176a27bebd0901fb9c3b8f56ae718bb13ca61 100644
--- a/ghc/compiler/typecheck/TcEnv.lhs
+++ b/ghc/compiler/typecheck/TcEnv.lhs
@@ -24,14 +24,13 @@ module TcEnv(
 
 #include "HsVersions.h"
 
-import HsTypes	( HsTyVar(..) )
 import Id	( Id, GenId, idType, mkUserLocal, mkUserId, replaceIdInfo, getIdInfo )
 import PragmaInfo ( PragmaInfo(..) )
-import TcKind	( TcKind, newKindVars, newKindVar, tcDefaultKind, kindToTcKind, Kind )
+import TcKind	( TcKind, kindToTcKind, Kind )
 import TcType	( TcType, TcMaybe, TcTyVar, TcTyVarSet, TcThetaType,
 		  newTyVarTys, tcInstTyVars, zonkTcTyVars, tcInstType
 		)
-import TyVar	( mkTyVarSet, unionTyVarSets, emptyTyVarSet, tyVarSetToList, TyVar )
+import TyVar	( mkTyVarSet, unionTyVarSets, emptyTyVarSet, TyVar )
 import PprType	( GenTyVar )
 import Type	( tyVarsOfType, tyVarsOfTypes, splitForAllTys, splitRhoTy )
 import TyCon	( TyCon, tyConKind, tyConArity, isSynTyCon, Arity )
@@ -40,14 +39,13 @@ import Class	( Class )
 import TcMonad
 
 import IdInfo		( noIdInfo )
-import Name		( Name, OccName(..), getSrcLoc, occNameString,
+import Name		( Name, OccName(..), 
 			  maybeWiredInTyConName, maybeWiredInIdName, isLocallyDefined,
 			  NamedThing(..)
 			)
 import Unique		( pprUnique10{-, pprUnique ToDo:rm-}, Unique, Uniquable(..) )
 import UniqFM	     
-import Util		( zipEqual, zipWithEqual, zipWith3Equal, zipLazy
-			)
+import Util		( zipEqual, zipWithEqual, zipWith3Equal )
 import Maybes		( maybeToBool )
 import Outputable
 \end{code}
diff --git a/ghc/compiler/typecheck/TcExpr.lhs b/ghc/compiler/typecheck/TcExpr.lhs
index 38a124ec5afe3e794e122760f896b6b97d760cb5..44964cffc80d925d3c346ab21a448c27ca5bdc24 100644
--- a/ghc/compiler/typecheck/TcExpr.lhs
+++ b/ghc/compiler/typecheck/TcExpr.lhs
@@ -10,7 +10,7 @@ module TcExpr ( tcExpr, tcStmt, tcId ) where
 
 import HsSyn		( HsExpr(..), HsLit(..), ArithSeqInfo(..), 
 			  HsBinds(..), Stmt(..), DoOrListComp(..),
-			  pprParendExpr, failureFreePat, collectPatBinders
+			  failureFreePat, collectPatBinders
 			)
 import RnHsSyn		( RenamedHsExpr, 
 			  RenamedStmt, RenamedRecordBinds
@@ -29,7 +29,7 @@ import Inst		( Inst, InstOrigin(..), OverloadedLit(..),
 import TcBinds		( tcBindsAndThen, checkSigTyVars, sigThetaCtxt )
 import TcEnv		( TcIdOcc(..), tcInstId,
 			  tcLookupLocalValue, tcLookupGlobalValue, tcLookupClassByKey,
-			  tcLookupGlobalValueByKey, newMonoIds, tcGetGlobalTyVars,
+			  tcLookupGlobalValueByKey, newMonoIds,
 			  tcExtendGlobalTyVars, tcLookupGlobalValueMaybe,
 			  tcLookupTyCon
 			)
@@ -40,7 +40,7 @@ import TcSimplify	( tcSimplifyAndCheck )
 import TcType		( TcType, TcMaybe(..),
 			  tcInstType, tcInstSigTcType, tcInstTyVars,
 			  tcInstSigType, tcInstTcType, tcInstTheta, tcSplitRhoTy,
-			  newTyVarTy, newTyVarTys, zonkTcTyVars, zonkTcType )
+			  newTyVarTy, newTyVarTys, zonkTcType )
 import TcKind		( TcKind )
 
 import Class		( Class )
@@ -51,27 +51,23 @@ import Id		( idType, dataConFieldLabels, dataConSig, recordSelectorFieldLabel,
 			)
 import Kind		( Kind, mkBoxedTypeKind, mkTypeKind, mkArrowKind )
 import Name		( Name{-instance Eq-} )
-import Type		( mkFunTy, mkAppTy, mkTyVarTy, mkTyVarTys, mkRhoTy,
+import Type		( mkFunTy, mkAppTy, mkTyVarTy, mkTyVarTys,
 			  splitFunTy_maybe, splitFunTys,
 			  mkTyConApp,
 			  splitForAllTys, splitRhoTy, splitSigmaTy, 
-			  isTauTy, mkFunTys, tyVarsOfType, tyVarsOfTypes, 
+			  isTauTy, tyVarsOfType, tyVarsOfTypes, 
 			  splitForAllTy_maybe, splitAlgTyConApp, splitAlgTyConApp_maybe
 			)
-import TyVar		( TyVarSet, emptyTyVarEnv, zipTyVarEnv,
-			  unionTyVarSets, elementOfTyVarSet, mkTyVarSet, tyVarSetToList
+import TyVar		( emptyTyVarEnv, zipTyVarEnv,
+			  elementOfTyVarSet, mkTyVarSet, tyVarSetToList
 			)
 import TyCon		( tyConDataCons )
 import TysPrim		( intPrimTy, charPrimTy, doublePrimTy,
-			  floatPrimTy, addrPrimTy, realWorldTy
-			)
-import TysWiredIn	( addrTy, mkTupleTy,
-			  boolTy, charTy, stringTy, mkListTy
+			  floatPrimTy, addrPrimTy
 			)
+import TysWiredIn	( boolTy, charTy, stringTy )
 import PrelInfo		( ioTyCon_NAME )
-import Unify		( unifyTauTy, unifyTauTyList, unifyTauTyLists, 
-			  unifyFunTy, unifyListTy, unifyTupleTy
-			)
+import Unify		( unifyTauTy, unifyFunTy, unifyListTy, unifyTupleTy )
 import Unique		( Unique, cCallableClassKey, cReturnableClassKey, 
 			  enumFromClassOpKey, enumFromThenClassOpKey,
 			  enumFromToClassOpKey, enumFromThenToClassOpKey,
diff --git a/ghc/compiler/typecheck/TcGRHSs.lhs b/ghc/compiler/typecheck/TcGRHSs.lhs
index 77a0eab01d092b223d818023b924b225b56a583d..d19715c4917c703c5bc2f6b2aff72331b5624d36 100644
--- a/ghc/compiler/typecheck/TcGRHSs.lhs
+++ b/ghc/compiler/typecheck/TcGRHSs.lhs
@@ -16,10 +16,7 @@ import TcMonad
 import Inst		( Inst, LIE, plusLIE )
 import TcBinds		( tcBindsAndThen )
 import TcExpr		( tcExpr, tcStmt )
-import TcType		( TcType, newTyVarTy ) 
-import TcEnv		( TcIdOcc(..) )
-
-import TysWiredIn	( boolTy )
+import TcType		( TcType ) 
 \end{code}
 
 \begin{code}
diff --git a/ghc/compiler/typecheck/TcIfaceSig.lhs b/ghc/compiler/typecheck/TcIfaceSig.lhs
index 7d7ca677f04e6e83d4b8d9e573879213aa896f87..2d7a66669b41bad81605af621f2340ed65cfb40d 100644
--- a/ghc/compiler/typecheck/TcIfaceSig.lhs
+++ b/ghc/compiler/typecheck/TcIfaceSig.lhs
@@ -11,8 +11,8 @@ module TcIfaceSig ( tcInterfaceSigs ) where
 import HsSyn		( HsDecl(..), IfaceSig(..) )
 import TcMonad
 import TcMonoType	( tcHsType, tcHsTypeKind )
-import TcEnv		( tcLookupGlobalValue, tcExtendTyVarEnv, tcExtendGlobalValEnv,
-			  tcLookupTyConByKey, tcLookupGlobalValueMaybe, tcLookupLocalValue,
+import TcEnv		( tcExtendTyVarEnv, tcExtendGlobalValEnv,
+			  tcLookupTyConByKey, tcLookupGlobalValueMaybe,
 			  tcExplicitLookupGlobal
 			)
 import TcKind		( TcKind, kindToTcKind )
diff --git a/ghc/compiler/typecheck/TcInstDcls.lhs b/ghc/compiler/typecheck/TcInstDcls.lhs
index 900d97f78bde0d35b3c75a7c06a02182eebc6c1a..32a9c3ab23e143240e3e93be10567968e925eed6 100644
--- a/ghc/compiler/typecheck/TcInstDcls.lhs
+++ b/ghc/compiler/typecheck/TcInstDcls.lhs
@@ -11,77 +11,62 @@ module TcInstDcls (
 
 #include "HsVersions.h"
 
-import HsSyn		( HsDecl(..), InstDecl(..), HsType(..), 
+import HsSyn		( HsDecl(..), InstDecl(..),
 			  HsBinds(..), MonoBinds(..), GRHSsAndBinds(..), GRHS(..),
 			  HsExpr(..), InPat(..), HsLit(..),
 			  unguardedRHS,
 			  collectMonoBinders, andMonoBinds
 			)
 import RnHsSyn		( RenamedHsBinds, RenamedMonoBinds,
-			  RenamedInstDecl, RenamedFixityDecl, RenamedHsExpr,
-			  RenamedSig, RenamedSpecInstSig, RenamedHsDecl
+			  RenamedInstDecl, RenamedHsExpr,
+			  RenamedSig, RenamedHsDecl
 			)
-import TcHsSyn		( TcHsBinds,
-			  TcMonoBinds, TcExpr, TcIdOcc(..), TcIdBndr, 
-			  tcIdType, maybeBoxedPrimType, 
-			  mkHsTyLam, mkHsTyApp,
-			  mkHsDictLam, mkHsDictApp )
+import TcHsSyn		( TcMonoBinds, TcIdOcc(..), TcIdBndr, 
+			  maybeBoxedPrimType, mkHsTyLam, mkHsTyApp,
+			  )
 
 import TcBinds		( tcPragmaSigs, sigThetaCtxt )
 import TcClassDcl	( tcMethodBind, badMethodErr )
 import TcMonad
 import RnMonad		( RnNameSupply )
-import Inst		( Inst, InstOrigin(..), InstanceMapper,
-			  instToId, newDicts, newMethod, LIE, emptyLIE, plusLIE )
+import Inst		( Inst, InstOrigin(..),
+			  newDicts, LIE, emptyLIE, plusLIE )
 import PragmaInfo	( PragmaInfo(..) )
 import TcDeriv		( tcDeriving )
-import TcEnv		( tcLookupClass, newLocalId, tcGetGlobalTyVars,
-			  tcExtendGlobalValEnv, tcAddImportedIdInfo
-			)
-import TcInstUtil	( InstInfo(..), mkInstanceRelatedIds, buildInstanceEnvs, classDataCon )
+import TcEnv		( tcExtendGlobalValEnv, tcAddImportedIdInfo )
+import TcInstUtil	( InstInfo(..), mkInstanceRelatedIds, classDataCon )
 import TcKind		( TcKind, unifyKind )
-import TcMatches	( tcMatchesFun )
-import TcMonoType	( tcTyVarScope, tcContext, tcHsTypeKind, tcHsType )
+import TcMonoType	( tcHsType )
 import TcSimplify	( tcSimplifyAndCheck )
 import TcType		( TcType, TcTyVar, TcTyVarSet, 
-			  zonkSigTyVar,
-			  tcInstSigTyVars, tcInstType, tcInstSigTcType, 
-			  tcInstTheta, tcInstTcType
+			  zonkSigTyVar, tcInstSigTyVars, tcInstType, tcInstTheta
 			)
-import Unify		( unifyTauTy, unifyTauTyLists )
-
 
 import Bag		( emptyBag, unitBag, unionBags, unionManyBags,
-			  concatBag, foldBag, bagToList, listToBag,
-			  Bag
-			)
-import CmdLineOpts	( opt_GlasgowExts, 
-			  opt_SpecialiseOverloaded, opt_WarnMissingMethods
+			  foldBag, bagToList, Bag
 			)
-import Class		( classBigSig, classTyCon, Class )
-import Id		( idType, replacePragmaInfo,
-			  isNullaryDataCon, dataConArgTys, Id )
-import ListSetOps	( minusList )
-import Maybes 		( maybeToBool, expectJust, seqMaybe, catMaybes )
-import Name		( nameOccName, getSrcLoc, mkLocalName,
+import CmdLineOpts	( opt_GlasgowExts, opt_WarnMissingMethods )
+import Class		( classBigSig, Class )
+import Id		( idType, isNullaryDataCon, dataConArgTys, Id )
+import Maybes 		( maybeToBool, seqMaybe, catMaybes )
+import Name		( nameOccName, mkLocalName,
 			  isLocallyDefined, Module,
 			  NamedThing(..)
 			)
 import PrelVals		( nO_METHOD_BINDING_ERROR_ID )
 import PprType		( pprParendGenType,  pprConstraint )
 import SrcLoc		( SrcLoc, noSrcLoc )
-import TyCon		( tyConDataCons, isSynTyCon, isDataTyCon, tyConDerivings )
-import Type		( Type, ThetaType, mkTyVarTys, isUnpointedType,
-			  splitSigmaTy, splitAppTys, isTyVarTy, matchTy, mkSigmaTy,
-			  splitTyConApp_maybe, getTyVar, splitDictTy_maybe,
-			  splitAlgTyConApp_maybe, splitRhoTy, isSynTy,
+import TyCon		( isSynTyCon, isDataTyCon, tyConDerivings )
+import Type		( Type, ThetaType, isUnpointedType,
+			  splitSigmaTy, isTyVarTy, mkSigmaTy,
+			  splitTyConApp_maybe, splitDictTy_maybe,
+			  splitAlgTyConApp_maybe, splitRhoTy,
 			  tyVarsOfTypes
 			)
 import TyVar		( zipTyVarEnv, mkTyVarSet, tyVarSetToList, TyVar )
 import TysPrim		( byteArrayPrimTyCon, mutableByteArrayPrimTyCon )
 import TysWiredIn	( stringTy )
 import Unique		( Unique, cCallableClassKey, cReturnableClassKey, Uniquable(..) )
-import Util		( zipEqual, removeDups )
 import Outputable
 \end{code}
 
diff --git a/ghc/compiler/typecheck/TcInstUtil.lhs b/ghc/compiler/typecheck/TcInstUtil.lhs
index a12633ae8ae930534acbcf20e18358adabe7ade1..28abdaf6dc519a48f8b353911ba20f112607959d 100644
--- a/ghc/compiler/typecheck/TcInstUtil.lhs
+++ b/ghc/compiler/typecheck/TcInstUtil.lhs
@@ -15,8 +15,7 @@ module TcInstUtil (
 
 #include "HsVersions.h"
 
-import RnHsSyn		( RenamedMonoBinds, RenamedSig(..), 
-			  RenamedInstancePragmas(..) )
+import RnHsSyn		( RenamedMonoBinds, RenamedSig(..) )
 
 import TcMonad
 import Inst		( InstanceMapper )
@@ -28,7 +27,7 @@ import SpecEnv		( emptySpecEnv, addToSpecEnv )
 import Maybes		( MaybeErr(..), mkLookupFunDef )
 import Name		( getSrcLoc, Name )
 import SrcLoc		( SrcLoc )
-import Type		( mkSigmaTy, mkForAllTys, mkDictTy, mkTyVarTys, instantiateThetaTy,
+import Type		( mkSigmaTy, mkDictTy, instantiateThetaTy,
 			  ThetaType, Type
 			)
 import PprType		( pprConstraint )
@@ -36,7 +35,7 @@ import Class		( classTyCon )
 import TyCon		( tyConDataCons )
 import TyVar		( TyVar, zipTyVarEnv )
 import Unique		( Unique )
-import Util		( equivClasses, zipWithEqual, panic{-, pprTrace-}, assertPanic )
+import Util		( equivClasses, panic, assertPanic )
 import Outputable
 \end{code}
 
diff --git a/ghc/compiler/typecheck/TcKind.lhs b/ghc/compiler/typecheck/TcKind.lhs
index 1429bbde029dec0ffd98c1289056e461a70c7c21..d8863935c0f631cfdcafa712e681a3d3013cc3b8 100644
--- a/ghc/compiler/typecheck/TcKind.lhs
+++ b/ghc/compiler/typecheck/TcKind.lhs
@@ -20,7 +20,7 @@ module TcKind (
 import Kind
 import TcMonad
 
-import Unique	( Unique, pprUnique10 )
+import Unique	( Unique )
 import Util	( nOfThem, panic )
 import Outputable
 \end{code}
diff --git a/ghc/compiler/typecheck/TcMatches.lhs b/ghc/compiler/typecheck/TcMatches.lhs
index 9185d6054f2ad043bb4f8da999c8aff168020cd1..6ea887e75c8558d67900f1d5e6cf525256b69329 100644
--- a/ghc/compiler/typecheck/TcMatches.lhs
+++ b/ghc/compiler/typecheck/TcMatches.lhs
@@ -11,7 +11,7 @@ module TcMatches ( tcMatchesFun, tcMatchesCase, tcMatchExpected ) where
 import {-# SOURCE #-} TcGRHSs ( tcGRHSsAndBinds )
 
 import HsSyn		( HsBinds(..), Match(..), GRHSsAndBinds(..), GRHS(..),
-			  HsExpr(..), MonoBinds(..),
+			  HsExpr, MonoBinds(..),
 			  collectPatBinders, pprMatch, getMatchLoc
 			)
 import RnHsSyn		( RenamedMatch )
@@ -23,12 +23,12 @@ import TcEnv		( TcIdOcc(..), newMonoIds )
 import TcPat		( tcPat )
 import TcType		( TcType, TcMaybe, zonkTcType, newTyVarTy )
 import TcSimplify	( bindInstsOfLocalFuns )
-import Unify		( unifyTauTy, unifyTauTyList, unifyFunTy )
+import Unify		( unifyTauTy, unifyFunTy )
 import Name		( Name {- instance Outputable -} )
 
 import Kind		( Kind, mkTypeKind )
 import BasicTypes	( RecFlag(..) )
-import Type		( isTyVarTy, isTauTy, mkFunTy, splitFunTy_maybe )
+import Type		( isTauTy, mkFunTy )
 import Util
 import Outputable
 import SrcLoc           (SrcLoc)
diff --git a/ghc/compiler/typecheck/TcModule.lhs b/ghc/compiler/typecheck/TcModule.lhs
index d2163149a0ab6a0b3cb90c17356675f2d0e70ff1..7a6cb156d6d9b9ce6cb6360293b4158df25b8be5 100644
--- a/ghc/compiler/typecheck/TcModule.lhs
+++ b/ghc/compiler/typecheck/TcModule.lhs
@@ -28,7 +28,7 @@ import TcDefaults	( tcDefaults )
 import TcEnv		( TcIdOcc(..), tcExtendGlobalValEnv, tcExtendTyConEnv, getEnv_LocalIds,
 			  getEnv_TyCons, getEnv_Classes, tcLookupLocalValue,
 			  tcLookupLocalValueByKey, tcLookupTyCon,
-			  tcLookupGlobalValueByKeyMaybe )
+			  tcLookupGlobalValueByKeyMaybe, initEnv )
 import TcExpr		( tcId )
 import TcIfaceSig	( tcInterfaceSigs )
 import TcInstDcls	( tcInstDecls1, tcInstDecls2 )
@@ -86,7 +86,8 @@ typecheckModule
 
 typecheckModule us rn_name_supply mod
   = let
-      (maybe_result, warns, errs) = initTc us (tcModule rn_name_supply mod)
+      (maybe_result, warns, errs) = 
+		initTc us initEnv (tcModule rn_name_supply mod)
     in
     print_errs warns	>>
     print_errs errs	>>
diff --git a/ghc/compiler/typecheck/TcMonad.lhs b/ghc/compiler/typecheck/TcMonad.lhs
index ceb589f174d306b19dc75a88b8a3a1802b74571c..02552dae95f103e5f0849a75f3f78b08cca1a99b 100644
--- a/ghc/compiler/typecheck/TcMonad.lhs
+++ b/ghc/compiler/typecheck/TcMonad.lhs
@@ -34,19 +34,15 @@ module TcMonad(
 
 #include "HsVersions.h"
 
-import {-# SOURCE #-} TcEnv  ( TcEnv, initEnv )
-import {-# SOURCE #-} TcType ( TcMaybe, TcTyVarSet )
+import {-# SOURCE #-} TcEnv  ( TcEnv )
 
 import Type		( Type, GenType )
-import TyVar		( TyVar, GenTyVar )
 import ErrUtils		( addShortErrLocLine, addShortWarnLocLine, ErrMsg, Message, WarnMsg )
-import CmdLineOpts      ( opt_PprStyle_All, opt_PprUserLength )
+import CmdLineOpts      ( opt_PprStyle_All )
 
 import SST
 import Bag		( Bag, emptyBag, isEmptyBag,
 			  foldBag, unitBag, unionBags, snocBag )
-import FiniteMap	( FiniteMap, emptyFM, isEmptyFM{-, keysFM ToDo:rm-} )
-import Maybes		( MaybeErr(..) )
 import SrcLoc		( SrcLoc, noSrcLoc )
 import UniqFM		( UniqFM, emptyUFM )
 import UniqSupply	( UniqSupply, getUnique, getUniques, splitUniqSupply,
@@ -74,11 +70,14 @@ type TcM    s r =  TcDown s -> TcEnv s -> FSST s r ()
 -- With a builtin polymorphic type for runSST the type for
 -- initTc should use  TcM s r  instead of  TcM RealWorld r 
 
+-- initEnv is passed in to avoid module recursion between TcEnv & TcMonad.
+
 initTc :: UniqSupply
+       -> (TcRef RealWorld (UniqFM a) -> TcEnv RealWorld)
        -> TcM RealWorld r
        -> (Maybe r, Bag WarnMsg, Bag ErrMsg)
 
-initTc us do_this
+initTc us initenv do_this
   = runSST (
       newMutVarSST us 			`thenSST` \ us_var ->
       newMutVarSST (emptyBag,emptyBag)	`thenSST` \ errs_var ->
@@ -87,7 +86,7 @@ initTc us do_this
           init_down = TcDown [] us_var
 			     noSrcLoc
 			     [] errs_var
-	  init_env  = initEnv tvs_var
+	  init_env  = initenv tvs_var
       in
       recoverSST
 	(\_ -> returnSST Nothing)
@@ -559,9 +558,6 @@ arityErr kind name n m
   = hsep [ ppr name, ptext SLIT("should have"),
 	   n_arguments <> comma, text "but has been given", int m, char '.']
     where
-	errmsg = kind ++ " has too " ++ quantity ++ " arguments"
-	quantity | m < n     = "few"
-		 | otherwise = "many"
 	n_arguments | n == 0 = ptext SLIT("no arguments")
 		    | n == 1 = ptext SLIT("1 argument")
 		    | True   = hsep [int n, ptext SLIT("arguments")]
diff --git a/ghc/compiler/typecheck/TcMonoType.lhs b/ghc/compiler/typecheck/TcMonoType.lhs
index dad3e7baf3db882858bc65e2507e11e13c1e041c..aec75e7935cf7800e0d84045a910b3d78f443a96 100644
--- a/ghc/compiler/typecheck/TcMonoType.lhs
+++ b/ghc/compiler/typecheck/TcMonoType.lhs
@@ -18,7 +18,7 @@ import TcKind		( TcKind, mkBoxedTypeKind, mkTypeKind, mkArrowKind,
 			  kindToTcKind, tcDefaultKind
 			)
 import Type		( Type, ThetaType, 
-			  mkTyVarTy, mkFunTy, mkAppTy, mkSynTy,
+			  mkTyVarTy, mkFunTy, mkSynTy,
 			  mkSigmaTy, mkDictTy, mkTyConApp, mkAppTys
 			)
 import TyVar		( TyVar, mkTyVar )
diff --git a/ghc/compiler/typecheck/TcSimplify.lhs b/ghc/compiler/typecheck/TcSimplify.lhs
index f38dc93af20df73c7b47b87ac5521d2d711b2bcd..0de237dfffbb6c483f87706dd2b7be837e3cbc74 100644
--- a/ghc/compiler/typecheck/TcSimplify.lhs
+++ b/ghc/compiler/typecheck/TcSimplify.lhs
@@ -131,34 +131,31 @@ import TcHsSyn		( TcExpr, TcIdOcc(..), TcIdBndr,
 import TcMonad
 import Inst		( lookupInst, lookupSimpleInst, LookupInstResult(..),
 			  tyVarsOfInst, 
-			  isTyVarDict, isDict, isStdClassTyVarDict, isMethodFor,
+			  isDict, isStdClassTyVarDict, isMethodFor,
 			  instToId, instBindingRequired, instCanBeGeneralised,
 			  newDictFromOld,
 			  instLoc, getDictClassTys,
 			  pprInst, zonkInst,
 			  Inst(..), LIE, pprInsts, pprInstsInFull, mkLIE, 
-			  InstOrigin(..), pprOrigin
+			  InstOrigin, pprOrigin
 			)
-import TcEnv		( TcIdOcc(..), tcGetGlobalTyVars )
-import TcType		( TcType, TcTyVar, TcTyVarSet, TcMaybe, tcInstType, tcInstTheta )
+import TcEnv		( TcIdOcc(..) )
+import TcType		( TcType, TcTyVarSet, TcMaybe, tcInstType, tcInstTheta )
 import Unify		( unifyTauTy )
 import Id		( mkIdSet )
 
-import Bag		( Bag, unitBag, listToBag, foldBag, filterBag, emptyBag, bagToList, 
-			  snocBag, consBag, unionBags, isEmptyBag )
+import Bag		( Bag, bagToList, snocBag )
 import Class		( Class, ClassInstEnv, classBigSig, classInstEnv )
 import PrelInfo		( isNumericClass, isCcallishClass )
 
-import Maybes		( expectJust, firstJust, catMaybes, seqMaybe, maybeToBool )
+import Maybes		( maybeToBool )
 import Type		( Type, ThetaType, TauType, mkTyVarTy, getTyVar,
-			  isTyVarTy, getTyVar_maybe, instantiateThetaTy
+			  isTyVarTy, instantiateThetaTy
 			)
 import PprType		( pprConstraint )
-import TysWiredIn	( intTy, unitTy )
-import TyVar		( elementOfTyVarSet, emptyTyVarSet, unionTyVarSets,
-			  intersectTyVarSets, unionManyTyVarSets,
-			  isEmptyTyVarSet, tyVarSetToList, 
-			  zipTyVarEnv, emptyTyVarEnv
+import TysWiredIn	( unitTy )
+import TyVar		( intersectTyVarSets, unionManyTyVarSets,
+			  isEmptyTyVarSet, zipTyVarEnv, emptyTyVarEnv
 			)
 import FiniteMap
 import BasicTypes	( TopLevelFlag(..) )
diff --git a/ghc/compiler/typecheck/TcType.hi-boot b/ghc/compiler/typecheck/TcType.hi-boot
deleted file mode 100644
index 49e5cd6f6424091f5f978f63e9ea3ba7b5c6047a..0000000000000000000000000000000000000000
--- a/ghc/compiler/typecheck/TcType.hi-boot
+++ /dev/null
@@ -1,6 +0,0 @@
-_interface_ TcType 1
-_exports_
-TcType TcMaybe TcTyVarSet;
-_declarations_
-1 data TcMaybe a;
-1 type TcTyVarSet a = TyVar.GenTyVarSet (ArrBase.MutableVar a (TcMaybe a));
diff --git a/ghc/compiler/typecheck/TcType.lhs b/ghc/compiler/typecheck/TcType.lhs
index 2944d90d2da8ab645b456f3d0f66d23a5c58eb05..9cb41124d81f7b8d8b9d369c5c3ef4d4427c5972 100644
--- a/ghc/compiler/typecheck/TcType.lhs
+++ b/ghc/compiler/typecheck/TcType.lhs
@@ -1,3 +1,8 @@
+%
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
+%
+\section[TcType]{Types used in the typechecker}
+
 \begin{code}
 module TcType (
   
@@ -36,33 +41,27 @@ module TcType (
 
 
 -- friends:
-import Type	( Type, ThetaType, GenType(..), mkAppTy,
-		  tyVarsOfTypes, getTyVar_maybe, splitDictTy_maybe,
-		  splitForAllTys, splitRhoTy, isTyVarTy,
-		  mkForAllTys, instantiateTy
-		)
-import TyVar	( TyVar, GenTyVar(..), TyVarSet, GenTyVarSet, 
-		  TyVarEnv, lookupTyVarEnv, addToTyVarEnv,
-		  emptyTyVarEnv, mkTyVarEnv, zipTyVarEnv,
-		  tyVarSetToList
-		)
+import Type		( Type, ThetaType, GenType(..), mkAppTy,
+			  tyVarsOfTypes, splitDictTy_maybe,
+			  isTyVarTy, instantiateTy
+			)
+import TyVar		( TyVar, GenTyVar(..), GenTyVarSet, 
+			  TyVarEnv, lookupTyVarEnv, addToTyVarEnv,
+			  emptyTyVarEnv, zipTyVarEnv, tyVarSetToList
+			)
 
 -- others:
-import Class	( Class )
-import TyCon	( isFunTyCon )
-import Kind	( Kind )
-import TcKind	( TcKind )
+import Class		( Class )
+import TyCon		( isFunTyCon )
+import Kind		( Kind )
 import TcMonad
 
 import TysPrim		( voidTy )
 
-import Name		( NamedThing(..) )
 import Unique		( Unique )
 import UniqFM		( UniqFM )
-import Maybes		( assocMaybe )
 import BasicTypes	( unused )
-import Util		( zipEqual, nOfThem )
-import Outputable
+import Util		( nOfThem, panic )
 \end{code}
 
 
diff --git a/ghc/compiler/typecheck/Unify.lhs b/ghc/compiler/typecheck/Unify.lhs
index 439ccdaaf9ff46bcef89800ebca9e89fcfe4d7be..077aed6a66a76535c3c9d19efd222c8cf4b0f379 100644
--- a/ghc/compiler/typecheck/Unify.lhs
+++ b/ghc/compiler/typecheck/Unify.lhs
@@ -17,7 +17,7 @@ module Unify ( unifyTauTy, unifyTauTyList, unifyTauTyLists,
 -- friends: 
 import TcMonad
 import Type	( GenType(..), Type, tyVarsOfType,
-		  typeKind, mkFunTy, splitFunTy_maybe, splitAppTys, splitTyConApp_maybe )
+		  typeKind, mkFunTy, splitFunTy_maybe, splitTyConApp_maybe )
 import TyCon	( TyCon, mkFunTyCon, isTupleTyCon, tyConArity, Arity )
 import TyVar	( GenTyVar(..), TyVar, tyVarKind, tyVarSetToList,
 		  TyVarEnv, lookupTyVarEnv, emptyTyVarEnv, addToTyVarEnv
@@ -481,10 +481,6 @@ unifyMisMatch ty1 ty2
   = hang (ptext SLIT("Couldn't match the type"))
 	 4 (sep [quotes (ppr ty1), ptext SLIT("against"), quotes (ppr ty2)])
 
-expectedFunErr ty
-  = hang (text "Function type expected, but found the type")
-	 4 (ppr ty)
-
 unifyKindErr tyvar ty
   = hang (ptext SLIT("Compiler bug: kind mis-match between"))
 	 4 (sep [quotes (hsep [ppr tyvar, ptext SLIT("::"), ppr (tyVarKind tyvar)]),