[add a rountine to quantify over several types at once
John Meacham <john@repetae.net>**20090226061136
 Ignore-this: 273d275ebe940755ebc5365ad02b0002
] hunk ./FrontEnd/Tc/Monad.hs 37
+    quantify_n,
hunk ./FrontEnd/Tc/Monad.hs 393
-quantify :: [MetaVar] -> [Pred] -> Rho -> Tc Sigma
-quantify vs ps r | not $ any isBoxyMetaVar vs = do
+quantify_n :: [MetaVar] -> [Pred] -> [Rho] -> Tc [Sigma]
+quantify_n vs ps rs | not $ any isBoxyMetaVar vs = do
+    -- we bind the quantified variables to fresh tvars
hunk ./FrontEnd/Tc/Monad.hs 397
-    r <- flattenType r
hunk ./FrontEnd/Tc/Monad.hs 399
-    (ps :=> r) <- flattenType (ps :=> r)
+
+    ps <- flattenType ps
+    rs <- flattenType rs
+
hunk ./FrontEnd/Tc/Monad.hs 404
-    return $ TForAll nvs (FrontEnd.Tc.Class.simplify ch ps :=> r)
+    return $ [TForAll nvs (FrontEnd.Tc.Class.simplify ch ps :=> r) | r <- rs ]
+
+quantify :: [MetaVar] -> [Pred] -> Rho -> Tc Sigma
+quantify vs ps r = do [s] <- quantify_n vs ps [r]; return s
hunk ./FrontEnd/Tc/Monad.hs 447
-evalArrowApp (TAp (TAp (TCon tcon) ta) tb) 
-    | tyconName tcon == tc_Arrow = return (TArrow ta tb) 
+evalArrowApp (TAp (TAp (TCon tcon) ta) tb)
+    | tyconName tcon == tc_Arrow = return (TArrow ta tb)