+ iterImprove nfdss
+ where
+ cfdss = getFunDepsOfLIE lie
+ clas_nfdss = map (\(c, fds) -> (emptyVarSet, className c, fds)) cfdss
+ classes = nub (map fst cfdss)
+ inst_nfdss = concatMap getInstNfdssOf classes
+ ips = getIPsOfLIE lie
+ ip_nfdss = map (\(n, ty) -> (emptyVarSet, n, [([], [ty])])) ips
+ nfdss = ip_nfdss ++ clas_nfdss ++ inst_nfdss
+
+getInstNfdssOf clas = nfdss
+ where
+ nm = className clas
+ ins = classInstEnv clas
+ mk_nfds (free, ts, i) = (free, nm, instantiateFdClassTys clas ts)
+ nfdss = map mk_nfds ins
+
+iterImprove :: [(VarSet, Name, [([Type],[Type])])] -> TcM s ()