[do not extend environment with called top-level functions
John Meacham <john@repetae.net>**20060718024607] hunk ./E/Demand.hs 205
-determineDemandType :: TVr -> Demand -> IM DemandType
+-- returns the demand type and whether it was found in the local environment or guessed
+determineDemandType :: TVr -> Demand -> IM (Bool,DemandType)
hunk ./E/Demand.hs 208
-    env <- getEnv
-    case mlookup (tvrIdent tvr) env `mplus` Info.lookup (tvrInfo tvr) of
-        Nothing -> return absType
-        Just (DemandSignature n dt) -> f n demand where
-            f 0 _ = return dt
+    let g (DemandSignature n dt) = f n demand where
+            f 0 _ = dt
hunk ./E/Demand.hs 211
-            f _ _ = return absType
+            f _ _ = absType
+    env <- getEnv
+    case mlookup (tvrIdent tvr) env of
+        Just ds -> return (True, g ds)
+        Nothing -> case Info.lookup (tvrInfo tvr) of
+            Nothing -> return (True,absType)
+            Just ds -> return (False,g ds)
+
hunk ./E/Demand.hs 226
-    phi :=> sigma <- determineDemandType v s
-    return (EVar v,(phi `glb` (demandEnvSingleton v s)) :=> sigma)
+    (fl,phi :=> sigma) <- determineDemandType v s
+    return (EVar v,(if fl then phi `glb` (demandEnvSingleton v s) else phi) :=> sigma)
hunk ./E/Demand.hs 282
-        rg' <- extEnvs [ (t,ds)| (t,_) <- rg, let il@(~(Just ds)) = Info.lookup (tvrInfo t), isJust il] $ do
+        rg' <- extEnvs [ (t,ds)| (t,_) <- rg, let ds = maybe absSig id (Info.lookup (tvrInfo t))] $ do
hunk ./E/Demand.hs 340
---    flip mapM_ (programDs prog) $ \ (t,e) -> case (runIM (infer e)) of
---        Left err -> putStrLn $ "strictness error :" ++ pprint t ++ "\n" ++ err
---        Right (c,(ty,_)) -> do
---            putStrLn $ "strictnes " ++ pprint t
---            print c
---            let cc (TAnot l TAtomic) = strict `islte` l
---                cc (TAnot _ (_ `TFun` b)) = cc b
---            print (fmap fn ty)
---            putStrLn "solving:"
---            processConstraints True c
---    return ()
-