[classify aliases (newtypes) into erased and non-erased varieties
John Meacham <john@repetae.net>**20061010050040] hunk ./DataConstructors.hs 5
+    AliasType(..),
hunk ./DataConstructors.hs 28
-import qualified Data.Map as Map hiding(map)
hunk ./DataConstructors.hs 29
+import qualified Data.Map as Map hiding(map)
hunk ./DataConstructors.hs 60
+import qualified Util.Graph as G
hunk ./DataConstructors.hs 97
+
+data AliasType = NotAlias | ErasedAlias | RecursiveAlias
+    deriving(Eq,Ord,Show)
+    {-! derive: GhcBinary !-}
+
hunk ./DataConstructors.hs 111
-    conAlias    :: Bool,         -- whether this is a simple alias and has no tag of its own.
+    conAlias    :: AliasType,         -- whether this is a simple alias and has no tag of its own.
hunk ./DataConstructors.hs 149
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 160
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 177
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 192
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 205
-                conAlias = False,
+                conAlias = NotAlias,
hunk ./DataConstructors.hs 218
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 232
-        conAlias = False,
+        conAlias = NotAlias,
hunk ./DataConstructors.hs 244
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 255
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 338
-    True <- return $ sameLength (conSlots con) ts && conAlias ccon
+    True <- return $ sameLength (conSlots con) ts && (conAlias ccon == ErasedAlias)
hunk ./DataConstructors.hs 423
-            conAlias = alias,
+            conAlias = if alias then ErasedAlias else NotAlias,
hunk ./DataConstructors.hs 457
-            conAlias = False,
+            conAlias = NotAlias,
hunk ./DataConstructors.hs 477
-    | conAlias mc = ELam var (EVar var)
+    | ErasedAlias <- conAlias mc = ELam var (EVar var)
hunk ./E/FromHs.hs 799
-    f ECase { eCaseScrutinee = e, eCaseAlts =  ((Alt (LitCons n [v] t) z):_) } | alias = eLet v (f e)  (f z) where
+    f ECase { eCaseScrutinee = e, eCaseAlts =  ((Alt (LitCons n [v] t) z):_) } | alias == ErasedAlias = eLet v (f e)  (f z) where
hunk ./Grin/FromE.hs 287
-    | conAlias cons = error $ "Alias still exists: " ++ show v
+    | conAlias cons /= NotAlias = error $ "Alias still exists: " ++ show v
hunk ./Grin/FromE.hs 620
-        | conAlias cons = error $ "Alias still exists: " ++ show v
+        | conAlias cons /= NotAlias = error $ "Alias still exists: " ++ show v