[move information just needed for name resolution to its own section in the ho file
John Meacham <john@repetae.net>**20080211055825] hunk ./FrontEnd/FrontEnd.hs 44
-    ms <- determineExports [ (x,y,z) | (x,(y,z)) <- Map.toList $ hoDefs $ choHo ho] (Map.toList $ hoExports $ choHo ho) ms
+    ms <- determineExports [ (x,y,z) | (x,(y,z)) <- Map.toList $ hoDefs $ hoExp $ choHo ho] (Map.toList $ hoExports $ hoExp $ choHo ho) ms
hunk ./FrontEnd/Tc/Module.hs 71
-        allDefs = theDefs ++ [ (x,z) | (x,(_,z)) <- Map.toList (hoDefs ho), nameType x == DataConstructor ]
+        allDefs = theDefs ++ [ (x,z) | (x,(_,z)) <- Map.toList (hoDefs $ hoExp ho), nameType x == DataConstructor ]
hunk ./FrontEnd/Tc/Module.hs 73
-        ans' = Map.fromList $ concatMap modInfoConsArity ms ++ getConstructorArities (hoDataTable ho)
+        ans' = Map.fromList $ concatMap modInfoConsArity ms ++ getConstructorArities (hoDataTable $ hoBuild ho)
hunk ./FrontEnd/Tc/Module.hs 103
+        hoB = hoBuild me
+        hoE = hoExp me
hunk ./FrontEnd/Tc/Module.hs 107
-    let importClassHierarchy = hoClassHierarchy me
-        importKindEnv = hoKinds me
+    let importClassHierarchy = hoClassHierarchy hoB
+        importKindEnv = hoKinds hoB
hunk ./FrontEnd/Tc/Module.hs 114
-    let fixityMap = thisFixityMap `mappend` hoFixities me
+    let fixityMap = thisFixityMap `mappend` hoFixities hoB
hunk ./FrontEnd/Tc/Module.hs 116
-    let ts = thisTypeSynonyms  `mappend` hoTypeSynonyms me
+    let ts = thisTypeSynonyms  `mappend` hoTypeSynonyms hoB
hunk ./FrontEnd/Tc/Module.hs 212
-        putStrLn $ PPrint.render $ pprintEnvMap (sigEnv `mappend` localDConsEnv `mappend` hoAssumps me)
+        putStrLn $ PPrint.render $ pprintEnvMap (sigEnv `mappend` localDConsEnv `mappend` hoAssumps hoB)
hunk ./FrontEnd/Tc/Module.hs 219
-        tcInfoEnv = hoAssumps me `mappend` localDConsEnv, -- (importVarEnv `mappend` globalDConsEnv),
+        tcInfoEnv = hoAssumps hoB `mappend` localDConsEnv, -- (importVarEnv `mappend` globalDConsEnv),
hunk ./FrontEnd/Tc/Module.hs 254
-    let ho = mempty {
-            hoExports = Map.fromList [ (modInfoName m,modInfoExport m) | m <- ms ],
-            hoDefs =  Map.fromList [ (x,(y,filter (`member` allExports) z)) | (x,y,z) <- concat $ map modInfoDefs ms, x `member` allExports],
+    let hoBld = mempty {
hunk ./FrontEnd/Tc/Module.hs 263
+        hoEx = mempty {
+            hoExports = Map.fromList [ (modInfoName m,modInfoExport m) | m <- ms ],
+            hoDefs =  Map.fromList [ (x,(y,filter (`member` allExports) z)) | (x,y,z) <- concat $ map modInfoDefs ms, x `member` allExports]
+        }
hunk ./FrontEnd/Tc/Module.hs 276
-    return (ho,tiData)
+    return (mempty { hoBuild = hoBld, hoExp = hoEx },tiData)
hunk ./Ho/Binary.hs 25
-instance Binary Ho where
-    put (Ho ac ad ae af ag ah ai ak al am) = do
-	    put ac
-	    putMap ad
+instance Binary HoBuild where
+    put (HoBuild ae af ag ah ai ak al am) = do
hunk ./Ho/Binary.hs 36
-    ac <- get
-    ad <- getMap
hunk ./Ho/Binary.hs 44
-    return (Ho ac ad ae af ag ah ai ak al am)
+    return (HoBuild ae af ag ah ai ak al am)
hunk ./Ho/Binary.hs 46
+instance Binary Ho where
+    put (Ho ac ad) = do
+	    put ac
+	    put ad
+    get = do
+    ac <- get
+    ad <- get
+    return (Ho ac ad)
+
+instance Binary HoExp where
+    put (HoExp ac ad) = do
+	    put ac
+	    putMap ad
+    get = do
+    ac <- get
+    ad <- getMap
+    return (HoExp ac ad)
hunk ./Ho/Build.hs 75
+-- DEFS - definitions and exports for modules, all that is needed for name resolution
hunk ./Ho/Build.hs 85
+cff_defs  = chunkType "DEFS"
hunk ./Ho/Build.hs 297
-    cho <- ifunc cho (mempty { hoDataTable = dataTablePrims } `mappend` readHo)
+    cho <- ifunc cho (mempty { hoBuild = mempty { hoDataTable = dataTablePrims } } `mappend` readHo)
hunk ./Ho/Build.hs 314
-    Just rho <- return $ lookup cff_core mp
+    Just rhe <- return $ lookup cff_defs mp
+    Just rhb <- return $ lookup cff_core mp
hunk ./Ho/Build.hs 317
-    let ho = decode (decompress $ L.fromChunks [rho])
-    return (hh,ho)
+    let he = decode (decompress $ L.fromChunks [rhe])
+    let hb = decode (decompress $ L.fromChunks [rhb])
+    return (hh,mempty { hoExp = he, hoBuild = hb})
hunk ./Ho/Build.hs 359
-            lazyWriteCFF fh cff_magic [(cff_jhdr, compress $ encode header),(cff_core, compress $ encode theho)]
+            lazyWriteCFF fh cff_magic [
+                (cff_jhdr, compress $ encode header),
+                (cff_defs, compress $ encode $ hoExp theho),
+                (cff_core, compress $ encode $ hoBuild theho)]
hunk ./Ho/Build.hs 408
-mapHoBodies sm ho = ho { hoEs = map f (hoEs ho) , hoRules =  runIdentity (E.Rules.mapBodies (return . sm) (hoRules ho)) } where
+mapHoBodies sm ho = ho { hoBuild = g (hoBuild ho) } where
+    g ho = ho { hoEs = map f (hoEs ho) , hoRules =  runIdentity (E.Rules.mapBodies (return . sm) (hoRules ho)) }
hunk ./Ho/Build.hs 422
-hoToProgram ho = programSetDs (hoEs ho) program {
-    progClassHierarchy = hoClassHierarchy ho,
-    progDataTable = hoDataTable ho
+hoToProgram ho = programSetDs (hoEs $ hoBuild ho) program {
+    progClassHierarchy = hoClassHierarchy $ hoBuild ho,
+    progDataTable = hoDataTable $ hoBuild ho
hunk ./Ho/Build.hs 440
-        let unknownMods = [ m | m <- mkeys (hoExports ho), m `notElem` allmods  ]
+        let unknownMods = [ m | m <- mkeys (hoExports $ hoExp ho), m `notElem` allmods  ]
hunk ./Ho/Build.hs 449
-                hohDepends = [ (m,MD5.emptyHash) | m <- mkeys (hoExports ho)],
+                hohDepends = [ (m,MD5.emptyHash) | m <- mkeys (hoExports $ hoExp ho)],
hunk ./Ho/Build.hs 482
+    let hoB = hoBuild ho
+        hoE = hoExp ho
hunk ./Ho/Build.hs 489
-    putStrLn $ "Modules contained:" <+> tshow (mkeys $ hoExports ho)
-    putStrLn $ "number of definitions:" <+> tshow (size $ hoDefs ho)
-    putStrLn $ "hoAssumps:" <+> tshow (size $ hoAssumps ho)
-    putStrLn $ "hoFixities:" <+> tshow (size $  hoFixities ho)
-    putStrLn $ "hoKinds:" <+> tshow (size $  hoKinds ho)
-    putStrLn $ "hoClassHierarchy:" <+> tshow (size $  hoClassHierarchy ho)
-    putStrLn $ "hoTypeSynonyms:" <+> tshow (size $  hoTypeSynonyms ho)
-    putStrLn $ "hoDataTable:" <+> tshow (size $  hoDataTable ho)
-    putStrLn $ "hoEs:" <+> tshow (size $  hoEs ho)
-    putStrLn $ "hoRules:" <+> tshow (size $  hoRules ho)
+    putStrLn $ "Modules contained:" <+> tshow (mkeys $ hoExports hoE)
+    putStrLn $ "number of definitions:" <+> tshow (size $ hoDefs hoE)
+    putStrLn $ "hoAssumps:" <+> tshow (size $ hoAssumps hoB)
+    putStrLn $ "hoFixities:" <+> tshow (size $  hoFixities hoB)
+    putStrLn $ "hoKinds:" <+> tshow (size $  hoKinds hoB)
+    putStrLn $ "hoClassHierarchy:" <+> tshow (size $  hoClassHierarchy hoB)
+    putStrLn $ "hoTypeSynonyms:" <+> tshow (size $  hoTypeSynonyms hoB)
+    putStrLn $ "hoDataTable:" <+> tshow (size $  hoDataTable hoB)
+    putStrLn $ "hoEs:" <+> tshow (size $  hoEs hoB)
+    putStrLn $ "hoRules:" <+> tshow (size $  hoRules hoB)
hunk ./Ho/Build.hs 501
-        CharIO.putStrLn $  (pprint $ hoExports ho :: String)
+        CharIO.putStrLn $  (pprint $ hoExports hoE :: String)
hunk ./Ho/Build.hs 504
-        CharIO.putStrLn $  (pprint $ hoDefs ho :: String)
+        CharIO.putStrLn $  (pprint $ hoDefs hoE :: String)
hunk ./Ho/Build.hs 507
-        CharIO.putStrLn $  (pprint $ hoKinds ho :: String)
+        CharIO.putStrLn $  (pprint $ hoKinds hoB :: String)
hunk ./Ho/Build.hs 510
-        printClassSummary (hoClassHierarchy ho)
+        printClassSummary (hoClassHierarchy hoB)
hunk ./Ho/Build.hs 513
-             printClassHierarchy (hoClassHierarchy ho)}
-    let rules = hoRules ho
+             printClassHierarchy (hoClassHierarchy hoB)}
+    let rules = hoRules hoB
hunk ./Ho/Build.hs 520
-         putDocM CharIO.putStr (showDataTable (hoDataTable ho))
+         putDocM CharIO.putStr (showDataTable (hoDataTable hoB))
hunk ./Ho/Build.hs 524
-        putStrLn $ PPrint.render $ pprint (hoAssumps ho)
+        putStrLn $ PPrint.render $ pprint (hoAssumps hoB)
hunk ./Ho/Build.hs 527
-        mapM_ (\ (v,lc) -> putChar '\n' >> printCheckName'' (hoDataTable ho) v lc) (hoEs ho)
+        mapM_ (\ (v,lc) -> putChar '\n' >> printCheckName'' (hoDataTable hoB) v lc) (hoEs hoB)
hunk ./Ho/Type.hs 33
+    {-! derive: update !-}
hunk ./Ho/Type.hs 45
-choDataTable cho = hoDataTable $ choHo cho
+choDataTable cho = hoDataTable $ hoBuild (choHo cho)
hunk ./Ho/Type.hs 61
--- The raw data as it appears on disk
-data Ho = Ho {
-    -- * libraries depended on
+-- data only needed for name resolution
+data HoExp = HoExp {
hunk ./Ho/Type.hs 64
-    hoDefs :: Map.Map Name (SrcLoc,[Name]),
+    hoDefs :: Map.Map Name (SrcLoc,[Name])
+    }
+
+
+data HoBuild = HoBuild {
hunk ./Ho/Type.hs 79
+    {-! derive: update !-}
+
+data Ho = Ho {
+    hoExp :: HoExp,
+    hoBuild :: HoBuild
+    }
+    {-! derive: update !-}
hunk ./Ho/Type.hs 88
-    mempty = Ho mempty mempty mempty mempty mempty mempty mempty mempty mempty mempty
+    mempty = Ho mempty mempty
hunk ./Ho/Type.hs 90
+        hoExp = hoExp a `mappend` hoExp b,
+        hoBuild = hoBuild a `mappend` hoBuild b
+    }
+
+instance Monoid HoExp where
+    mempty = HoExp mempty mempty
+    mappend a b = HoExp {
hunk ./Ho/Type.hs 98
-        hoDefs = hoDefs a `mappend` hoDefs b,
+        hoDefs = hoDefs a `mappend` hoDefs b
+    }
+
+instance Monoid HoBuild where
+    mempty = HoBuild mempty mempty mempty mempty mempty mempty mempty mempty
+    mappend a b = HoBuild {
hunk ./Interactive.hs 66
-    stateHo :: Ho,
+    stateHo :: HoBuild,
hunk ./Interactive.hs 96
-interact :: Ho -> IO ()
-interact ho = mre where
+interact :: CollectedHo -> IO ()
+interact cho = mre where
+    hoE = hoExp $ choHo cho
+    hoB = hoBuild $ choHo cho
+
hunk ./Interactive.hs 120
-    dataTable = hoDataTable ho
+    dataTable = hoDataTable hoB
hunk ./Interactive.hs 124
-        printDoc $ fillSep (map tshow $ Map.keys $  hoExports ho)
+        printDoc $ fillSep (map tshow $ Map.keys $  hoExports hoE)
hunk ./Interactive.hs 141
-            --Just rx -> mapM_ putStrLn $ sort [ nameTag (nameType v):' ':show v <+> "::" <+> ptype v  | v <- Map.keys (hoDefs ho), isJust (matchRegex rx (show v)), nameTag (nameType v) `elem` opt ]
-            Just rx -> mapM_ putStrLn $ sort [ pshow opt v  | v <- Map.keys (hoDefs ho), isJust (matchRegex rx (show v)), nameTag (nameType v) `elem` opt ]
+            --Just rx -> mapM_ putStrLn $ sort [ nameTag (nameType v):' ':show v <+> "::" <+> ptype v  | v <- Map.keys (hoDefs hoE), isJust (matchRegex rx (show v)), nameTag (nameType v) `elem` opt ]
+            Just rx -> mapM_ putStrLn $ sort [ pshow opt v  | v <- Map.keys (hoDefs hoE), isJust (matchRegex rx (show v)), nameTag (nameType v) `elem` opt ]
hunk ./Interactive.hs 145
-    ptype k | Just r <- Map.lookup k (hoAssumps ho) = show (pprint r:: PP.Doc)
-    ptype x | nameType x == ClassName = hsep (map kindShow $ kindOfClass x (hoKinds ho))
+    ptype k | Just r <- Map.lookup k (hoAssumps hoB) = show (pprint r:: PP.Doc)
+    ptype x | nameType x == ClassName = hsep (map kindShow $ kindOfClass x (hoKinds hoB))
hunk ./Interactive.hs 148
-    isStart =  isInitial { stateHo = ho, stateImports = runIdentity $ calcImports ho False (Module "Prelude") }
+    isStart =  isInitial { stateHo = hoB, stateImports = runIdentity $ calcImports hoE False (Module "Prelude") }
hunk ./Interactive.hs 156
-        | Just d <- showSynonym (show . (pprint :: HsType -> PP.Doc) ) v (hoTypeSynonyms ho) = nameTag (nameType v):' ':d
+        | Just d <- showSynonym (show . (pprint :: HsType -> PP.Doc) ) v (hoTypeSynonyms hoB) = nameTag (nameType v):' ':d
hunk ./Interactive.hs 178
-    is@IS { stateHo = ho } <- ask
+    is@IS { stateHo = hoB } <- ask
hunk ./Interactive.hs 183
-    stmt'' <- expandTypeSynsStmt (hoTypeSynonyms ho) (stateModule is) stmt'
-    stmt''' <- FrontEnd.Infix.infixStatement (hoFixities ho) stmt''
+    stmt'' <- expandTypeSynsStmt (hoTypeSynonyms hoB) (stateModule is) stmt'
+    stmt''' <- FrontEnd.Infix.infixStatement (hoFixities hoB) stmt''
hunk ./Interactive.hs 244
-calcImports :: Monad m => Ho -> Bool -> Module -> m [(Name,[Name])]
+calcImports :: Monad m => HoExp -> Bool -> Module -> m [(Name,[Name])]
hunk ./Main.hs 167
-processInitialHo accumho ho = do
+processInitialHo accumho aho = do
hunk ./Main.hs 169
-
+        ho = hoBuild aho
hunk ./Main.hs 182
-    return $ accumho' `mappend` mempty { choVarMap = newVarMap, choExternalNames = idMapToIdSet newVarMap, choHo = ho { hoEs = programDs prog } }
+    return $ accumho' `mappend` mempty { choVarMap = newVarMap, choExternalNames = idMapToIdSet newVarMap, choHo = aho { hoBuild = ho { hoEs = programDs prog } } }
hunk ./Main.hs 185
-reprocessHo :: Rules -> IdMap Properties -> Ho -> Ho
+reprocessHo :: Rules -> IdMap Properties -> HoBuild -> HoBuild
hunk ./Main.hs 191
-reprocessCho rules ps cho = cho { choVarMap = fmap h (choVarMap cho) , choHo = (choHo cho) { hoEs = map f (hoEs $ choHo cho) }} where
+reprocessCho rules ps cho = choHo_u (hoBuild_u (hoEs_u (map f))) $ choVarMap_u (fmap h) cho where
hunk ./Main.hs 221
-    let dataTable = toDataTable (getConstructorKinds (hoKinds ho')) (tiAllAssumptions tiData) originalDecls (hoDataTable ho)
+    let dataTable = toDataTable (getConstructorKinds (hoKinds $ hoBuild ho')) (tiAllAssumptions tiData) originalDecls (hoDataTable $ hoBuild ho)
hunk ./Main.hs 223
-        fullDataTable = dataTable `mappend` hoDataTable ho
+        fullDataTable = dataTable `mappend` hoDataTable (hoBuild ho)
hunk ./Main.hs 230
-            progClassHierarchy = hoClassHierarchy allHo,
+            progClassHierarchy = hoClassHierarchy $ hoBuild allHo,
hunk ./Main.hs 237
-    let allAssumps = (tiAllAssumptions tiData `mappend` hoAssumps ho)
+    let allAssumps = (tiAllAssumptions tiData `mappend` hoAssumps (hoBuild ho))
hunk ./Main.hs 239
-    ds' <- convertDecls tiData theProps (hoClassHierarchy ho') allAssumps  fullDataTable decls
+    ds' <- convertDecls tiData theProps (hoClassHierarchy $ hoBuild ho') allAssumps  fullDataTable decls
hunk ./Main.hs 244
-    rules' <- createInstanceRules fullDataTable (hoClassHierarchy ho')  (ds `mappend` hoEs ho)
-    nrules <- convertRules (progModule prog) tiData (hoClassHierarchy ho') allAssumps fullDataTable decls
+    rules' <- createInstanceRules fullDataTable (hoClassHierarchy $ hoBuild ho')  (ds `mappend` hoEs (hoBuild ho))
+    nrules <- convertRules (progModule prog) tiData (hoClassHierarchy  $ hoBuild ho') allAssumps fullDataTable decls
hunk ./Main.hs 261
-    let allRules = hoRules ho `mappend` rules
+    let allRules = hoRules (hoBuild ho) `mappend` rules
hunk ./Main.hs 267
-    let Identity prog = programMapDs (\ (t,e) -> return (shouldBeExported (getExports ho') t,e)) $ atomizeApps False prog'
+    let Identity prog = programMapDs (\ (t,e) -> return (shouldBeExported (getExports $ hoExp ho') t,e)) $ atomizeApps False prog'
hunk ./Main.hs 297
-            SS.so_boundVars = fromList [ (tvrIdent v,(v,e)) | (v,e) <- hoEs ho],
+            SS.so_boundVars = fromList [ (tvrIdent v,(v,e)) | (v,e) <- hoEs $ hoBuild ho],
hunk ./Main.hs 425
-    let newHo = ho' {
+    let newHoBuild = (hoBuild ho') {
hunk ./Main.hs 428
-        hoRules = hoRules ho' `mappend` rules
+        hoRules = hoRules (hoBuild ho') `mappend` rules
hunk ./Main.hs 430
-        newMap = fromList [ (tvrIdent n,Just (EVar n)) | (n,_) <- hoEs newHo ]
-    return (mempty { choHo = newHo, choExternalNames = idMapToIdSet newMap, choVarMap = newMap  } `mappend` cho,newHo)
+        newMap = fromList [ (tvrIdent n,Just (EVar n)) | (n,_) <- hoEs newHoBuild ]
+    return (mempty { choHo = ho' { hoBuild = newHoBuild}, choExternalNames = idMapToIdSet newMap, choVarMap = newMap  } `mappend` cho,ho' { hoBuild = newHoBuild })
hunk ./Main.hs 470
-        rules = hoRules ho
+        rules = hoRules $ hoBuild ho
hunk ./Main.hs 477
-        printClassSummary (hoClassHierarchy ho)
+        printClassSummary (hoClassHierarchy $ hoBuild ho)
hunk ./Main.hs 480
-        printClassHierarchy (hoClassHierarchy ho)
+        printClassHierarchy (hoClassHierarchy $ hoBuild ho)
hunk ./Main.hs 487
-    if int then Interactive.interact ho else do
+    if int then Interactive.interact cho else do
hunk ./Makefile.am 84
-   drift_processed/DataConstructors.hs-boot
+   drift_processed/DataConstructors.hs-boot drift_processed/Ho/Type.hs