Don't import FastString in HsVersions.h
[ghc-hetmet.git] / compiler / typecheck / TcGadt.lhs
index b556e89..e45d6bd 100644 (file)
@@ -41,6 +41,7 @@ import Outputable
 import TcType
 import Unique
 import UniqFM
+import FastString
 \end{code}
 
 
@@ -237,11 +238,15 @@ fixTvCoEnv in_scope env
       -- then use transitivity with the original coercion
 
 -----------------------------
+-- XXX Can we do this more nicely, by exploiting laziness?
+-- Or avoid needing it in the first place?
 fixTvSubstEnv :: InScopeSet -> TvSubstEnv -> TvSubstEnv
-fixTvSubstEnv in_scope env
-  = fixpt 
+fixTvSubstEnv in_scope env = f env
   where
-    fixpt = mapVarEnv (substTy (mkTvSubst in_scope fixpt)) env
+    f e = let e' = mapUFM (substTy (mkTvSubst in_scope e)) e
+          in if and $ eltsUFM $ intersectUFM_C tcEqType e e'
+             then e
+             else f e'
 
 ----------------------------
 tryToBind :: TyVarSet -> TyVar -> BindFlag