[when pulling type out of term about to be eta expanded, substitute any type variables within the types of the extracted lambda vars
John Meacham <john@repetae.net>**20060321022441] hunk ./E/Eta.hs 92
-{-
-{-# NOINLINE etaExpand #-}
-etaExpand :: Program -> IO Program
-etaExpand prog = do
-    prog <- annotateProgram mempty (const return) annotateArity lamann prog
-    let (p,stat) = runStatM $ programMapBodies (etaExpandE $ progDataTable prog) prog
-    Stats.printStat "EtaExpansion" stat
-    return p
-
-{-# NOINLINE etaExpandDs #-}
-etaExpandDs :: MonadStats m => DataTable -> [(TVr,E)] -> m [(TVr,E)]
-etaExpandDs dataTable ds = do
-    let Identity ds' = annotateDs mempty (const return) annotateArity lamann ds
-    sequence [ do e <- etaExpandE dataTable e; return (t,e) | (t,e) <- ds' ]
-
--}
hunk ./E/Eta.hs 104
-{-
-etaExpandE :: MonadStats m => DataTable -> E -> m E
-etaExpandE dataTable e = f e where
-    f (ELetRec ds e) = do
-        ds' <- sequence [ do e' <- ee e; e'' <- f e'; return (t,e'') | (t,e) <- ds]
-        e <- ee e
-        e' <- f e
-        return $ ELetRec ds' e'
-    f ec@ECase {} = do
-        ec' <- caseBodiesMapM ee ec
-        emapE' f ec'
-    f e = emapE' f e
-    ee e@EVar {} = return e
-    ee e = ee' e
-    ee' (ELam t e) = do
-        e' <- ee' e
-        return (ELam t e')
-    ee' e | (EVar t,as) <- fromAp e , Just (Arity n) <- Info.lookup (tvrInfo t), n > length as = do
-        let (_,ts) = expandPis dataTable (getType e)
-            ets = (take (n - length as) ts)
-        replicateM_ (length ets) $ mtick ("EtaExpand.{" ++ tvrShowName t)
-        let tvrs = f mempty [ (tvrIdent t,t { tvrIdent = n }) |  n <- [2,4 :: Int ..], not $ n `Set.member` freeVars (e,ets) | t <- ets ]
-            f map ((n,t):rs) = t { tvrType = substMap map (tvrType t)} : f (Map.insert n (EVar t) map) rs
-            f _ [] = []
-        return (foldr ELam (foldl EAp e (map EVar tvrs)) tvrs)
-    ee' e = return e
--}
hunk ./E/Eta.hs 160
-    f (AFun _ a) (ELam tvr e) ty ns | (EPi _ rt) <- followAliases dataTable ty = do
-        (ne,flag) <- f a e rt ns
+    f (AFun _ a) (ELam tvr e) (EPi tvr' rt) ns = do
+        (ne,flag) <- f a e (subst tvr' (EVar tvr) rt) ns
hunk ./E/Eta.hs 169
-        (ne,_) <- f a eb rt ns
+        (ne,_) <- f a eb (subst tt (EVar nv) rt) ns