[use IdMap instead of Map Id in Grin.FromE, switch the scope of local function definitons to be truely local
John Meacham <john@repetae.net>**20070510035644] hunk ./Grin/FromE.hs 90
-newtype LEnv = LEnv {
-    evaledMap :: Map Id Val
+data LEnv = LEnv {
+    evaledMap :: IdMap Val,
+    lfuncMap  :: IdMap (Atom,Int,Ty)
hunk ./Grin/FromE.hs 96
-    scMap :: Map Id (Atom,[Ty],Ty),
-    ccafMap :: Map Id Val,
+    scMap :: IdMap (Atom,[Ty],Ty),
+    ccafMap :: IdMap Val,
hunk ./Grin/FromE.hs 100
-    constMap :: Map Int Val,
-    localFuncMap :: IORef (IdMap (Atom,Int,Ty)),
hunk ./Grin/FromE.hs 157
-    lm <- newIORef mempty
hunk ./Grin/FromE.hs 158
-        lenv = LEnv { evaledMap = mempty }
+        lenv = LEnv { evaledMap = mempty, lfuncMap = mempty }
hunk ./Grin/FromE.hs 164
-            constMap = mempty,
-            localFuncMap = lm,
hunk ./Grin/FromE.hs 166
-            ccafMap = Map.fromList $ [(tvrIdent v,e) |(v,_,e) <- cc ]  ++ [ (tvrIdent v,Var vv (TyPtr TyNode)) | (v,vv,_) <- rcafs]
+            ccafMap = fromList $ [(tvrIdent v,e) |(v,_,e) <- cc ]  ++ [ (tvrIdent v,Var vv (TyPtr TyNode)) | (v,vv,_) <- rcafs]
hunk ./Grin/FromE.hs 212
-    scMap = Map.fromList [ (tvrIdent t,toEntry x) |  x@(t,_,_) <- progCombinators prog]
-    initTyEnv = mappend primTyEnv $ TyEnv $ Map.fromList $ concat [ makePartials (a,b,c) | (_,(a,b,c)) <-  Map.toList scMap] ++ concat [con x| x <- Map.elems $ constructorMap dataTable, conType x /= eHash]
+    scMap = fromList [ (tvrIdent t,toEntry x) |  x@(t,_,_) <- progCombinators prog]
+    initTyEnv = mappend primTyEnv $ TyEnv $ Map.fromList $ concat [ makePartials (a,b,c) | (_,(a,b,c)) <-  massocs scMap] ++ concat [con x| x <- Map.elems $ constructorMap dataTable, conType x /= eHash]
hunk ./Grin/FromE.hs 280
-    canidate e | (EVar x,as) <- fromAp e, Just vs <- Map.lookup x res, vs > length (ff as) = True
+    canidate e | (EVar x,as) <- fromAp e, Just vs <- mlookup x res, vs > length (ff as) = True
hunk ./Grin/FromE.hs 290
-    conv e | (EVar x,as) <- fromAp e, Just vs <- Map.lookup x res, vs > length (ff as) = Const (NodeC (partialTag (scTag x) (vs - length (ff as))) (keepIts $ map conv (ff as)))
-    conv (EVar v) | Just ce <- Map.lookup v coMap = ce
+    conv e | (EVar x,as) <- fromAp e, Just vs <- mlookup x res, vs > length (ff as) = Const (NodeC (partialTag (scTag x) (vs - length (ff as))) (keepIts $ map conv (ff as)))
+    conv (EVar v) | Just ce <- mlookup v coMap = ce
hunk ./Grin/FromE.hs 325
-    case Map.lookup (tvrIdent tvr) em of
+    case mlookup (tvrIdent tvr) em of
hunk ./Grin/FromE.hs 342
-        let (nn,_,_) = runIdentity $ Map.lookup (tvrIdent tvr) (scMap cenv)
+        let (nn,_,_) = runIdentity $ mlookup (tvrIdent tvr) (scMap cenv)
hunk ./Grin/FromE.hs 358
-        lfunc <- liftIO $ readIORef (localFuncMap cenv)
+        lfunc <- asks lfuncMap
hunk ./Grin/FromE.hs 360
-        case Map.lookup (tvrIdent tvr) (ccafMap cenv) of
+        case mlookup (tvrIdent tvr) (ccafMap cenv) of
hunk ./Grin/FromE.hs 366
-            Nothing -> case Map.lookup (tvrIdent tvr) (scMap cenv) of
+            Nothing -> case mlookup (tvrIdent tvr) (scMap cenv) of
hunk ./Grin/FromE.hs 511
-        nm = Map.fromList [ (tvrIdent x, v) | x <- vs, tvrIdent x /= 0 ]
+        nm = fromList [ (tvrIdent x, v) | x <- vs, tvrIdent x /= 0 ]
+
+    localFuncs vs action = local (\lenv -> lenv { lfuncMap = fromList vs `mappend` lfuncMap lenv }) action
hunk ./Grin/FromE.hs 596
-        case Map.lookup (tvrIdent v) (scMap cenv) of
+        case mlookup (tvrIdent v) (scMap cenv) of
hunk ./Grin/FromE.hs 642
-                g' (t,e@ELam {}) = do
+                g' (t,e@ELam {}) =
hunk ./Grin/FromE.hs 645
-                    liftIO $ modifyIORef (localFuncMap cenv) (minsert (tvrIdent t) (nn,length as,toType TyNode (getType a)))
-            mapM_ g' bs
-            v <- f ds x
-            defs <- mapM g bs
-            return $ grinLet (concat defs) v
+                    in (tvrIdent t,(nn,length as,toType TyNode (getType a)))
+            localFuncs (map g' bs) $ do
+                v <- f ds x
+                defs <- mapM g bs
+                return $ grinLet (concat defs) v
hunk ./Grin/FromE.hs 685
-    constant (EVar tvr) | Just c <- Map.lookup (tvrIdent tvr) (ccafMap cenv) = return c
-                        | Just (v,as,_) <- Map.lookup (tvrIdent tvr) (scMap cenv)
+    constant (EVar tvr) | Just c <- mlookup (tvrIdent tvr) (ccafMap cenv) = return c
+                        | Just (v,as,_) <- mlookup (tvrIdent tvr) (scMap cenv)
hunk ./Grin/FromE.hs 714
-    scInfo tvr | Just n <- Map.lookup (tvrIdent tvr) (scMap cenv) = return n
+    scInfo tvr | Just n <- mlookup (tvrIdent tvr) (scMap cenv) = return n