diff --git a/ghc/compiler/reader/RdrHsSyn.lhs b/ghc/compiler/reader/RdrHsSyn.lhs
index 053915204f13f7d30060ee5e696053339dea3859..22827fa4e1d865e34368a8e679e9ab8e2a9f944b 100644
--- a/ghc/compiler/reader/RdrHsSyn.lhs
+++ b/ghc/compiler/reader/RdrHsSyn.lhs
@@ -127,16 +127,16 @@ extractHsTyVars ty
 
 	-- In (All a => a -> a) -> Int, there are no free tyvars
 	-- We just assume that we quantify over all type variables mentioned in the context.
-    get (HsPreForAllTy ctxt ty)  acc = filter (`notElem` locals) (get ty [])
-				       ++ acc
-				     where
-				       locals = foldr (get . snd) [] ctxt
+    get (HsPreForAllTy ctxt ty)  acc = 
+		foldr insert acc (filter (`notElem` locals) (get ty []))
+	    where
+		locals = foldr (get . snd) [] ctxt
 
-    get (HsForAllTy tvs ctxt ty) acc = (filter (`notElem` locals) $
+    get (HsForAllTy tvs ctxt ty) acc = 
+		foldr insert acc (filter (`notElem` locals) $
 				        foldr (get . snd) (get ty []) ctxt)
-				       ++ acc
-				     where
-				       locals = map getTyVarName tvs
+	     where
+	       	locals = map getTyVarName tvs
 
     insert (Qual _ _ _)	      acc = acc
     insert (Unqual (TCOcc _)) acc = acc