[add etaAnnotateProgram which will iterate until a fixpoint is reached in arity calculation.
John Meacham <john@repetae.net>**20060320113858] hunk ./E/Eta.hs 10
+    etaAnnotateProgram,
hunk ./E/Eta.hs 15
+import Control.Monad.State
hunk ./E/Eta.hs 149
--- this annotates what it can, but only expands top-level definitions
+-- this annotates, but only expands top-level definitions
hunk ./E/Eta.hs 151
-etaExpandProgram prog = programMapRecGroups mempty pass letann pass f prog where
-    pass = \_ -> return
-    letann = (\e nfo -> return $ annotateArity e nfo)
-    f (False,[(t,e)]) = do
-        te <- etaExpandDef' (progDataTable prog) t e
-        return [te]
-    f (True,ts) = do
-        ts' <- mapM z ts
-        g ts' (length ts + 2)
-    g ts 0 = return ts
-    g ts n = do
-        ts' <- annotateDs mempty pass letann pass ts
-        ts'' <- mapM z ts'
-        g ts'' (n - 1)
-    z (t,e) = etaExpandDef' (progDataTable prog) t e
+etaExpandProgram prog = programMapDs f (etaAnnotateProgram prog) where
+    f (t,e) = etaExpandDef' (progDataTable prog) t e
hunk ./E/Eta.hs 154
+-- this annotates a program with its arity information, iterating until a fixpoint is reached.
+etaAnnotateProgram :: Program -> Program
+etaAnnotateProgram prog = runIdentity $ programMapRecGroups mempty pass iletann pass f prog where
+    pass _ = return
+    iletann e nfo = return $ annotateArity e nfo
+    letann e nfo = case Info.lookup nfo of
+        Nothing -> put True >> return (annotateArity e nfo)
+        Just at -> do
+            let at' = arityType e
+            when (at /= at') (put True)
+            return $ annotateArity' at' nfo
+    f (rec,ts) = do
+        let (ts',fs) = runState (annotateDs mempty pass letann pass ts) False
+        if fs then f (rec,ts') else return ts'
hunk ./E/Program.hs 7
+import qualified Data.Set as Set
hunk ./E/Program.hs 20
+    progExternalNames :: Set.Set Id,
hunk ./E/Program.hs 32
+    progExternalNames = mempty,
hunk ./Main.hs 251
+    prog <- return $ etaAnnotateProgram prog
+
hunk ./Main.hs 271
-            (v,lc) <- Stats.runStatIO stats (etaExpandDef' fullDataTable v lc)
hunk ./Main.hs 322
+
hunk ./Main.hs 341
+        prog <- return $ etaAnnotateProgram prog
hunk ./Main.hs 453
+    lintCheckProgram prog
+