[Avoid lists. They are the bane of performance if badly used.
Lemmih <lemmih@gmail.com>**20080218232646] hunk ./FrontEnd/Tc/Class.hs 45
-    (mvs',nps,rp) <- splitReduce (Set.toList fmvenv) mvs (simplify ch ps)
+    (mvs',nps,rp) <- splitReduce (Set.toList fmvenv) (Set.toList mvs) (simplify ch ps)
hunk ./FrontEnd/Tc/Class.hs 53
-freeMetaVarsPred (IsIn _ t) = freeMetaVars t
-freeMetaVarsPred (IsEq t1 t2) = freeMetaVars t1 ++ freeMetaVars t2
+freeMetaVarsPred (IsIn _ t) = Set.toList $ freeMetaVars t
+freeMetaVarsPred (IsEq t1 t2) = Set.toList (freeMetaVars t1) ++ Set.toList (freeMetaVars t2)
hunk ./FrontEnd/Tc/Main.hs 541
-    let vss = Set.fromList $ freeMetaVars mv'
+    let vss = freeMetaVars mv'
hunk ./FrontEnd/Tc/Main.hs 647
-            let mvs = snub $ concatMap freeMetaVars (tr:vs)
+            let mvs = Set.toList $ Set.unions $ map freeMetaVars (tr:vs)
hunk ./FrontEnd/Tc/Monad.hs 390
-    return (Set.fromList $ concat xs)
+    return (Set.unions xs)
hunk ./FrontEnd/Tc/Monad.hs 450
-        when (u `elem` freeMetaVars tt) $ do
+        when (u `Set.member` freeMetaVars tt) $ do
hunk ./FrontEnd/Tc/Type.hs 37
-import List
+import Data.List
+import Data.Monoid
hunk ./FrontEnd/Tc/Type.hs 40
+import qualified Data.Set as S
hunk ./FrontEnd/Tc/Type.hs 106
-isTau t = and $ tickleCollect ((:[]) . isTau) t
+isTau t = getAll $ tickleCollect (All . isTau) t
hunk ./FrontEnd/Tc/Type.hs 110
-isTau' t = and $ tickleCollect ((:[]) . isTau') t
+isTau' t = getAll $ tickleCollect (All . isTau') t
hunk ./FrontEnd/Tc/Type.hs 114
-isBoxy t = or $ tickleCollect ((:[]) . isBoxy) t
+isBoxy t = getAny $ tickleCollect (Any . isBoxy) t
hunk ./FrontEnd/Tc/Type.hs 222
-freeMetaVars :: Type -> [MetaVar]
-freeMetaVars (TMetaVar mv) = [mv]
-freeMetaVars t = foldr union [] $ tickleCollect ((:[]) . freeMetaVars) t
+freeMetaVars :: Type -> S.Set MetaVar
+freeMetaVars (TMetaVar mv) = S.singleton mv
+freeMetaVars t = tickleCollect freeMetaVars t
hunk ./FrontEnd/Tc/Type.hs 228
-    freeVars (TForAll vs qt) = freeVars qt List.\\ vs
-    freeVars (TExists vs qt) = freeVars qt List.\\ vs
+    freeVars (TForAll vs qt) = freeVars qt Data.List.\\ vs
+    freeVars (TExists vs qt) = freeVars qt Data.List.\\ vs
hunk ./FrontEnd/Tc/Type.hs 233
+    freeVars t = S.toList $ freeMetaVars t
+
+instance FreeVars Type (S.Set MetaVar) where
hunk ./FrontEnd/Tc/Unify.hs 11
+import qualified Data.Set as Set
hunk ./FrontEnd/Tc/Unify.hs 113
-    when (u `elem` freeMetaVars tt) $ unificationError (TMetaVar u) tt -- occurs check
+    when (u `Set.member` freeMetaVars tt) $ unificationError (TMetaVar u) tt -- occurs check
hunk ./Ho/Build.hs 220
-    = SourceParsed { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModule :: HsModule, sourceFP :: FilePath, sourceHoName :: FilePath }
-    | SourceRaw    { sourceHash :: SourceHash, sourceDeps :: [Module], sourceModName :: Module, sourceLBS :: LBS.ByteString, sourceFP :: FilePath, sourceHoName :: FilePath }
+    = SourceParsed { sourceHash :: SourceHash, sourceDeps :: [Module]
+                   , sourceModule :: HsModule, sourceFP :: FilePath, sourceHoName :: FilePath }
+    | SourceRaw    { sourceHash :: SourceHash, sourceDeps :: [Module]
+                   , sourceModName :: Module, sourceLBS :: LBS.ByteString, sourceFP :: FilePath, sourceHoName :: FilePath }