[clean up some code, allow duping of some case statements, change foreign imports to not be strict to allow worker/wrapper split and be more correct
John Meacham <john@repetae.net>**20051020033708] hunk ./DataConstructors.hs 95
-getProduct dataTable e | (ELit (LitCons cn _ _)) <- followAliases dataTable e, Just c <- getConstructor cn dataTable = f c where
+getProduct dataTable e | (ELit (LitCons cn _ _)) <- followAliases dataTable e, cn /= tc_World__, Just c <- getConstructor cn dataTable = f c where
hunk ./E/E.hs 335
-tAbsurd k = ELit (litCons TypeConstructor "Absurd#" [] k)
-vWorld__ = ELit (litCons DataConstructor ("Jhc.IO","World__") [] tWorld__)
+tAbsurd k = ELit (LitCons tc_Absurd [] k)
+vWorld__ = ELit (LitCons dc_World__ [] tWorld__)
hunk ./E/E.hs 340
+dc_EmptyList = toName DataConstructor ("Prelude","[]")
+dc_Integer = toName DataConstructor ("Prelude","Integer")
+dc_Int = toName DataConstructor ("Prelude","Int")
hunk ./E/E.hs 345
-dc_Int = toName DataConstructor ("Prelude","Int")
-dc_Integer = toName DataConstructor ("Prelude","Integer")
-dc_EmptyList = toName DataConstructor ("Prelude","[]")
-tc_List = toName TypeConstructor ("Prelude","[]")
-tc_IO = toName TypeConstructor ("Jhc.IO", "IO")
-tc_IOResult = toName TypeConstructor ("Jhc.IO","IOResult")
+dc_World__ = toName DataConstructor ("Jhc.IO","World__")
+tc_World__ = toName TypeConstructor ("Jhc.IO","World__")
+tc_Absurd = toName TypeConstructor ("Jhc@","Absurd#")
hunk ./E/E.hs 349
+tc_IOResult = toName TypeConstructor ("Jhc.IO","IOResult")
+tc_IO = toName TypeConstructor ("Jhc.IO", "IO")
+tc_List = toName TypeConstructor ("Prelude","[]")
hunk ./E/FromHs.hs 220
-createFunc :: DataTable -> [Int] -> [E] -> ([(TVr,String)] -> E) -> E
+createFunc :: DataTable -> [Int] -> [E] -> ([(TVr,String)] -> (E -> E,E)) -> E
hunk ./E/FromHs.hs 225
-    eee = foldr esr (ee tvrs') xs
+    (me,innerE) = ee tvrs'
+    eee = me $ foldr esr innerE xs
hunk ./E/FromHs.hs 249
-        | Func _ s _ _ <- p, not isIO =  expr $ createFunc dataTable [4,6..] (map tvrType es) $ \rs -> eStrictLet rtVar' (EPrim (APrim (Func False s (snds rs) rtt) req) [ EVar t | (t,_) <- rs ] rtt') (ELit $ LitCons cn [EVar rtVar'] rt')
+        | Func _ s _ _ <- p, not isIO =  expr $ createFunc dataTable [4,6..] (map tvrType es) $ \rs -> (,) id $ eStrictLet rtVar' (EPrim (APrim (Func False s (snds rs) rtt) req) [ EVar t | (t,_) <- rs ] rtt') (ELit $ LitCons cn [EVar rtVar'] rt')
hunk ./E/FromHs.hs 251
-                expr $ (createFunc dataTable [4,6..] (map tvrType es) $ \rs -> ELam tvrWorld $
+                expr $ (createFunc dataTable [4,6..] (map tvrType es) $ \rs -> (,) (ELam tvrWorld) $
hunk ./E/FromHs.hs 254
-                expr $ (createFunc dataTable [4,6..] (map tvrType es) $ \rs -> ELam tvrWorld $
+                expr $ (createFunc dataTable [4,6..] (map tvrType es) $ \rs -> (,) (ELam tvrWorld) $
hunk ./E/FromHs.hs 256
-        --  | AddrOf _ <- p = expr $ EPrim (APrim p req) [] rt
hunk ./E/FromHs.hs 261
-        --  | otherwise = [(name,var, lamt (foldr ELam p' es))]
hunk ./E/Values.hs 146
+safeToDup ec@ECase {} | EVar _ <- eCaseScrutinee ec = all safeToDup (caseBodies ec)
hunk ./docs/conventions.txt 21
+* Jhc@ - A finite set of built in special names that never occur in haskell source
+
+* F@ - bindings that have been floated out of top level definitions
+