[add code to allow aborting fixpoint analysis if it is taking too long. add readRawValue routine.
John Meacham <john@repetae.net>**20060226044250] hunk ./Fixer/Fixer.hs 21
+    readRawValue,
hunk ./Fixer/Fixer.hs 189
+readRawValue :: (Fixable a,MonadIO m) => Value a -> m a
+readRawValue (IV v) = liftIO $ do
+    readIORef (current v)
+readRawValue (IOValue iov) = liftIO iov >>= readRawValue
+readRawValue (ConstValue v) = return v
+readRawValue (UnionValue a b) = liftIO $ do
+    a' <- readRawValue a
+    b' <- readRawValue b
+    return (lub a' b')
hunk ./Fixer/Fixer.hs 208
-    let f [] n | n > 0 = do
+    let f _ tl n | (tl::Int) `seq` n `seq` False = undefined
+        f [] tl n | n > 0, tl /= 0 = do
hunk ./Fixer/Fixer.hs 213
-            f (Set.toList vs) 0
-        f [] _ = mputStr "\n" >> mFlush >> return ()
-        f (MkFixable v:vs) n = do
+            f (Set.toList vs) (tl - 1) 0
+        f [] _ n | n > 0 = mputStr "[Aborting]\n" >> mFlush >> return ()
+        f [] _ _ = mputStr "\n" >> mFlush >> return ()
+        f (MkFixable v:vs) tl n = do
hunk ./Fixer/Fixer.hs 221
-            if p `lte` c then f vs n else do
+            if p `lte` c then f vs tl n else do
hunk ./Fixer/Fixer.hs 229
-            f vs $! (n + 1)
+            f vs tl (n + 1)
hunk ./Fixer/Fixer.hs 238
-    f (Set.toList to) (0::Int)
+    f (Set.toList to) (-1) (0::Int)