[Use Sets instead of lists in the type-checker.
Lemmih <lemmih@gmail.com>**20090214142515
 Ignore-this: d135432359b30c2d46f53ff289180d70
] hunk ./FrontEnd/Tc/Class.hs 45
-    (mvs',nps,rp) <- splitReduce (Set.toList fmvenv) (Set.toList mvs) (simplify ch ps)
+    (mvs',nps,rp) <- splitReduce fmvenv mvs (simplify ch ps)
hunk ./FrontEnd/Tc/Class.hs 49
-freeMetaVarsPreds :: Preds -> [MetaVar]
-freeMetaVarsPreds ps = concatMap freeMetaVarsPred ps
+freeMetaVarsPreds :: Preds -> Set.Set MetaVar
+freeMetaVarsPreds ps = Set.unions (map freeMetaVarsPred ps)
hunk ./FrontEnd/Tc/Class.hs 52
-freeMetaVarsPred :: Pred -> [MetaVar]
-freeMetaVarsPred (IsIn _ t) = Set.toList $ freeMetaVars t
-freeMetaVarsPred (IsEq t1 t2) = Set.toList (freeMetaVars t1) ++ Set.toList (freeMetaVars t2)
+freeMetaVarsPred :: Pred -> Set.Set MetaVar
+freeMetaVarsPred (IsIn _ t) = freeMetaVars t
+freeMetaVarsPred (IsEq t1 t2) = freeMetaVars t1 `Set.union` freeMetaVars t2
hunk ./FrontEnd/Tc/Class.hs 57
-splitPreds :: Monad m => ClassHierarchy -> [MetaVar] -> Preds -> m (Preds, Preds)
+splitPreds :: Monad m => ClassHierarchy -> Set.Set MetaVar -> Preds -> m (Preds, Preds)
hunk ./FrontEnd/Tc/Class.hs 60
-    return $ partition (all (`elem` fs) . freeMetaVarsPred) $ simplify h  $ ps'
+    return $ partition (\p -> freeMetaVarsPred p `Set.isSubsetOf` fs) $ simplify h  $ ps'
hunk ./FrontEnd/Tc/Class.hs 147
-splitReduce :: [MetaVar] -> [MetaVar] -> [Pred] -> Tc ([MetaVar],[Pred], [Pred])
+splitReduce :: Set.Set MetaVar -> Set.Set MetaVar -> [Pred] -> Tc ([MetaVar],[Pred], [Pred])
hunk ./FrontEnd/Tc/Class.hs 153
-    (rs',sub) <- genDefaults h (fs++gs) rs
+    (rs',sub) <- genDefaults h (fs `Set.union` gs) rs
hunk ./FrontEnd/Tc/Class.hs 160
-    return (nub gs List.\\ map fst sub, ds,rs')
+    return (Set.toList gs List.\\ map fst sub, ds,rs')
hunk ./FrontEnd/Tc/Class.hs 162
-withDefaults     :: Monad m => ClassHierarchy ->  [MetaVar] -> [Pred] -> m [(MetaVar, [Pred], Type)]
+withDefaults     :: Monad m => ClassHierarchy ->  Set.Set MetaVar -> [Pred] -> m [(MetaVar, [Pred], Type)]
hunk ./FrontEnd/Tc/Class.hs 164
-  | any null tss = fail $ "withDefaults.ambiguity: " ++ (pprint ps)  ++ pprint vs -- ++ show ps
+  | any null tss = fail $ "withDefaults.ambiguity: " ++ (pprint ps)  ++ pprint (Set.toList vs) -- ++ show ps
hunk ./FrontEnd/Tc/Class.hs 171
-genDefaults :: Monad m => ClassHierarchy ->  [MetaVar] -> [Pred] -> m ([Pred],[(MetaVar,Type)])
+genDefaults :: Monad m => ClassHierarchy ->  Set.Set MetaVar -> [Pred] -> m ([Pred],[(MetaVar,Type)])
hunk ./FrontEnd/Tc/Class.hs 179
-ambig :: ClassHierarchy -> [MetaVar] -> [Pred] -> [(MetaVar,[Pred],[Type])]
+ambig :: ClassHierarchy -> Set.Set MetaVar -> [Pred] -> [(MetaVar,[Pred],[Type])]
hunk ./FrontEnd/Tc/Class.hs 183
-         v <- nub (freeMetaVarsPreds ps) \\ vs,
-         let qs = [ p | p<-ps, v `elem` freeMetaVarsPred p ] ]
+         v <- Set.toList (freeMetaVarsPreds ps `Set.difference` vs),
+         let qs = [ p | p<-ps, v `Set.member` freeMetaVarsPred p ] ]
hunk ./FrontEnd/Tc/Class.hs 228
-    let ams = ambig h [] ps
+    let ams = ambig h Set.empty ps
hunk ./FrontEnd/Tc/Main.hs 549
-    (mvs,ds,rs) <- splitReduce (Set.toList fs) (Set.toList vss) ps'
+    (mvs,ds,rs) <- splitReduce fs vss ps'
hunk ./FrontEnd/Tc/Main.hs 581
-    (mvs,ds,rs) <- splitReduce (Set.toList fs) (Set.toList $ foldr1 Set.intersection vss) ps'
+    (mvs,ds,rs) <- splitReduce fs (foldr1 Set.intersection vss) ps'
hunk ./FrontEnd/Tc/Main.hs 647
-                    ([],rs1) <- splitPreds ch [] ps1
-                    ([],rs2) <- splitPreds ch [] ps2
+                    ([],rs1) <- splitPreds ch Set.empty ps1
+                    ([],rs2) <- splitPreds ch Set.empty ps2
hunk ./FrontEnd/Tc/Main.hs 745
-    (_,ds,rs) <- splitReduce (Set.toList env) (freeMetaVarsPreds qs) ps
+    (_,ds,rs) <- splitReduce env (freeMetaVarsPreds qs) ps
hunk ./FrontEnd/Tc/Main.hs 819
-        ([],rs) <- splitPreds ch [] ps
+        ([],rs) <- splitPreds ch Set.empty ps
hunk ./FrontEnd/Tc/Main.hs 829
-            ([],leftovers) <- splitPreds ch [] ps
+            ([],leftovers) <- splitPreds ch Set.empty ps
hunk ./FrontEnd/Tc/Main.hs 838
-            ([],leftovers) <- splitPreds ch [] ps
+            ([],leftovers) <- splitPreds ch Set.empty ps