[begin adding type specialization code
John Meacham <john@repetae.net>**20060131093326] hunk ./E/Program.hs 66
+programMapDs f prog = do
+     ds <- mapM f (programDs prog)
+     return $ programSetDs ds prog
hunk ./E/TypeAnalysis.hs 6
+import Control.Monad.Reader
hunk ./E/TypeAnalysis.hs 9
-import Data.Typeable
hunk ./E/TypeAnalysis.hs 10
-import List(intersperse)
hunk ./E/TypeAnalysis.hs 13
-import Doc.DocLike
hunk ./E/TypeAnalysis.hs 140
-pruneE ec@ECase { eCaseScrutinee = EVar v } | sortStarLike (getType v), Just (VMap _ ns) <- Info.lookup (tvrInfo v) = do
-    ec' <- pruneCase ec ns
-    emapE' pruneE ec'
-pruneE e = emapE' pruneE e
+pruneE e = return $ runIdentity (prune e)  where
+    prune ec@ECase { eCaseScrutinee = EVar v } | sortStarLike (getType v), Just (VMap _ ns) <- Info.lookup (tvrInfo v) = do
+        ec' <- pruneCase ec ns
+        emapE' prune ec'
+    prune e = emapE' prune e
hunk ./E/TypeAnalysis.hs 159
+
+{-
+
+specializeProgram :: Program -> Program
+specializeProgram prog = ans where
+    entries = Set.fromList $ progEntryPoints -- must not be specialized
+    ans = runReader (programMapDs f prog) (cenv $ programDs prog)
+    f (t,e) = do
+        env <- ask
+        ne <- case Map.lookup t env of
+            Just (cd,_) -> cd e
+            Nothing -> return e
+        ne' <- de e
+        return (t,ne')
+    cenv ds = undefined
+    de = undefined
+
+-}
+
+