[perfrom static argument transformation on non-toplevel recursive definitions too when at least one argument can be eliminated.
John Meacham <john@repetae.net>**20061127100119] hunk ./E/LambdaLift.hs 47
-    (ds',nstat) = runStatM $ mapM f (programDecomposedDs prog)
-    f (Left t) = return [t]
-    f (Right [(t,v@ELam {})]) | not (null collectApps) = ans where
+    (ds',nstat) = runStatM $ mapM (f True) (programDecomposedDs prog)
+    f _ (Left (t,e)) = gds [(t,e)]
+    f always (Right [(t,v@ELam {})]) | not (null collectApps), always || dropArgs > 0 = ans where
hunk ./E/LambdaLift.hs 68
-    f (Right ts) = return ts
+    f _ (Right ts) = gds ts
+    gds ts = mapM g' ts >>= return where
+        g' (t,e) = g e >>= return . (,) t
+    g elet@ELetRec { eDefs = ds }  = do
+        ds' <- mapM (f False) (decomposeDs ds)
+        emapE g elet { eDefs = concat ds' }
+    g e = emapE g e