[add rule to unification that evaluates known class aliases
John Meacham <john@repetae.net>**20061025052735] hunk ./FrontEnd/Class.hs 48
+import Support.FreeVars
hunk ./FrontEnd/Class.hs 50
-import Type as T
hunk ./FrontEnd/Class.hs 115
-    g cr Inst { instHead = _ :=> IsIn _cname (TAp (TCon ca) (TVar vv)), instAssocs = as } | _cname == className cr = ans where
+    g cr Inst { instHead = _ :=> IsIn _cname tt, instAssocs = as } | _cname == className cr = ans where
hunk ./FrontEnd/Class.hs 117
+        (TCon ca,_) = fromTAp tt
+    g cr x = error $  "makeInstanceEnv: " ++ show (className cr,x)
hunk ./FrontEnd/Class.hs 337
-    tsubst na vv v = T.apply (msingleton na vv) v
+    tsubst na vv v = applyTyvarMap (msingleton na vv) v
hunk ./FrontEnd/Class.hs 419
-   newQualType = everywhere (mkT at) $ tForAll (tv qt) qt
+   newQualType = everywhere (mkT at) $ tForAll (freeVars qt) qt
hunk ./FrontEnd/Tc/Type.hs 20
+    applyTyvarMap,
hunk ./FrontEnd/Tc/Type.hs 28
+import qualified Data.Map as Map
hunk ./FrontEnd/Tc/Type.hs 39
+import qualified Type as T
hunk ./FrontEnd/Tc/Type.hs 53
+applyTyvarMap :: Map.Map Tyvar Type -> Type -> Type
+applyTyvarMap = T.apply
hunk ./FrontEnd/Tc/Unify.hs 5
+import Control.Monad.Reader
hunk ./FrontEnd/Tc/Unify.hs 13
+import FrontEnd.Class
hunk ./FrontEnd/Tc/Unify.hs 16
-import qualified FlagDump as FD
hunk ./FrontEnd/Tc/Unify.hs 17
+import Util.SetLike
+import qualified FlagDump as FD
hunk ./FrontEnd/Tc/Unify.hs 233
+    t1' <- evalTAssoc t1'
hunk ./FrontEnd/Tc/Unify.hs 235
+    t2' <- evalTAssoc t2'
hunk ./FrontEnd/Tc/Unify.hs 262
+evalTAssoc TAssoc { typeCon = Tycon { tyconName = n1 }, typeClassArgs = [carg], typeExtraArgs = eas }  | (TCon Tycon { tyconName = n2 }, as) <- fromTAp carg = do
+    InstanceEnv ie <- asks tcInstanceEnv
+    case Map.lookup (n1,n2) ie of
+        Just (aa,bb,tt) -> return (applyTyvarMap (fromList $ zip aa as ++ zip bb eas) tt)
+        _ -> fail "no instance for associated type"
+evalTAssoc t = return t