+mkCoVars :: [PredType] -> TcM [TyVar]
+mkCoVars [] = return []
+mkCoVars (pred:preds) =
+ do { uniq <- newUnique
+ ; let name = mkSysTvName uniq FSLIT("mkCoVars")
+ ; let tv = mkCoVar name (PredTy pred)
+ ; tvs <- mkCoVars preds
+ ; return (tv:tvs)
+ }
+
+mkMetaCoVars :: [PredType] -> TcM [TyVar]
+mkMetaCoVars [] = return []
+mkMetaCoVars (EqPred ty1 ty2:preds) =
+ do { tv <- newMetaTyVar TauTv (mkCoKind ty1 ty2)
+ ; tvs <- mkMetaCoVars preds
+ ; return (tv:tvs)
+ }
+