[implement cheap eagerness optimization
John Meacham <john@repetae.net>**20060814173230] hunk ./C/Prims.hs 58
+
+-- | whether a primitive can be eagarly evaluated.
+-- TODO needs grin support
+primEagerSafe :: Prim -> Bool
+primEagerSafe CConst {} = True
+primEagerSafe AddrOf {} = True
+primEagerSafe CCast {} = True
+primEagerSafe PrimTypeInfo {} = True
+primEagerSafe Operator { primOp = op } | op `elem` safeOps = True  where
+    safeOps = ["+","-","*","==",">=","<=",">","<","&","|","^","~",">>","<<"]
+primEagerSafe _ = False
hunk ./E/SSimplify.hs 518
+            [(t,ec@ECase { eCaseScrutinee = sc@(EPrim (APrim p _) _ _), eCaseAlts = [], eCaseDefault = Just def })] | primEagerSafe p && not (getProperty prop_CYCLIC t) -> do
+                mtick "E.Simplify.strictness.cheap-eagerness.def"
+                return $ ec { eCaseDefault = Just $ ELetRec [(t,def)] e' }
+            [(t,ec@ECase { eCaseScrutinee = sc@(EPrim (APrim p _) _ _), eCaseAlts = [Alt c def], eCaseDefault = Nothing })] | primEagerSafe p && not (getProperty prop_CYCLIC t) -> do
+                mtick "E.Simplify.strictness.cheap-eagerness.con"
+                return $ ec { eCaseAlts = [Alt c (ELetRec [(t,def)] e')] }
hunk ./E/SSimplify.hs 779
-    app' (ELetRec ds e) xs = do
+    app' ELetRec { eDefs = ds, eBody = e } xs = do
hunk ./E/SSimplify.hs 851
-someBenefit v (ELetRec ds e) xs | someBenefit v e xs = True
+someBenefit v ELetRec { eDefs = ds, eBody = e } xs | someBenefit v e xs = True