[add quantify routine, make failure print out diagnostic info in Tc
John Meacham <john@repetae.net>**20051210064420] hunk ./FrontEnd/Tc/Monad.hs 4
+    boxyInstantiate,
+    boxySpec,
hunk ./FrontEnd/Tc/Monad.hs 8
+    generalize,
+    getClassHierarchy,
hunk ./FrontEnd/Tc/Monad.hs 13
+    quantify,
hunk ./FrontEnd/Tc/Monad.hs 18
+    skolomize,
hunk ./FrontEnd/Tc/Monad.hs 23
-    varBind,
-    skolomize,
-    boxySpec,
-    boxyInstantiate,
hunk ./FrontEnd/Tc/Monad.hs 24
-    generalize,
+    varBind,
hunk ./FrontEnd/Tc/Monad.hs 283
-generalize r = do
-    let mtvs = freeMetaVars r
-    nvs <- mapM (newVar . tyvarKind) [ t | t <- mtvs]
-    sequence_ [ varBind mv (TVar v) | v <- nvs |  mv <- mtvs ]
-    r <- flattenMetaVars r
-    return $ TForAll nvs ([] :=> r)
+generalize r = quantify (freeMetaVars r) [] r
+
+
+quantify :: [MetaTV] -> [Pred] -> Rho -> Tc Sigma
+quantify vs ps r | all isMetaTV vs = do
+    r <- flattenType r
+    nvs <- mapM (newVar . tyvarKind) [ t | t <- vs]
+    sequence_ [ varBind mv (TVar v) | v <- nvs |  mv <- vs ]
+    r <- flattenType (ps :=> r)
+    return $ TForAll nvs r
hunk ./FrontEnd/Tc/Monad.hs 319
-        liftIO $ fail s -- typeError (Failure s) (tcDiagnostics st)
+        Left x <- typeError (Failure s) (tcDiagnostics st)
+        liftIO $ fail x