[make followAliases use followAlias, do not expand alias unless it has been fully applied.
John Meacham <john@repetae.net>**20060222090255] hunk ./DataConstructors.hs 8
+    followAlias,
hunk ./DataConstructors.hs 36
+import E.TypeCheck
hunk ./DataConstructors.hs 307
+followAlias _ e | not (sortTypeLike e) = fail "followAlias: not a type"
hunk ./DataConstructors.hs 312
-    | Just con <- jcon, Just [cn] <- jcn, conAlias ccon  = return ans where
+    | Just _ <- jcon, sameLength (conSlots con) ts, Just [_] <- jcn, conAlias ccon  = return ans where
hunk ./DataConstructors.hs 321
-followAliases dataTable ap@EAp {} = case followAlias dataTable ap of
-    Just x -> followAliases dataTable x
-    Nothing -> ap
-followAliases dataTable (ELit (LitCons c ts e))
-    | Just con <- jcon, Just [cn] <- jcn, conAlias ccon  = followAliases dataTable ans where
-        jcn@(~(Just [cn])) = conChildren con
-        Identity ccon = getConstructor cn dataTable
-        jcon@(~(Just con)) = getConstructor c dataTable
-        [sl] = conSlots ccon
-        ans = doSubst False False (Map.fromList $ zip [2..] (map Just ts)) sl
-followAliases _ e = e
+followAliases dataTable l = f l 10 where
+    f l 0 = l
+    f l n = case followAlias dataTable l of
+        Just e -> f e (n - 1)
+        Nothing -> l
hunk ./DataConstructors.hs-boot 8
+followAlias :: Monad m => DataTable -> E -> m E