[project @ 2001-08-04 06:19:54 by ken]
[ghc-hetmet.git] / ghc / compiler / DEPEND-NOTES
index 2c0f82a..fb966c6 100644 (file)
@@ -1,75 +1,3 @@
-add types/InstEnv, InstEnv.hi-boot
-add coreSyn/CoreRules.*
-add coreSyn/CoreTidy.lhs
-add coreSyn/CoreFVs.lhs
-remove coreSyn/FreeVars.lhs
-add coreSyn/Subst.*
-remove simplCore/MagicUFs.*
-
-remove specialise/SpecEnv.*
-
-
-
-ToDo
-~~~~
-* Test effect of eta-expanding past (case x of ..)
-
-* Bottom strictness isn't right.  Should be (eg) SSX, not just X.
-
-* Enumeration types in worker/wrapper for strictness analysis
-
-* Use (!) types in data cons to unbox.
-
-* Check constant folding
-
-* .hi file isn't updated if the only change is to the exports.
-  For example, UgenAll.lhs re-exports all of U_binding.hs; when a data type
-  decl in the latter changes, the .hi file for the former isn't updated.
-  I think this happens when a module exports another mdodule thus:
-
-       module UgenAll( module U_binding, ... ) where
-
-* This should be reported as an error:
-       data T k = MkT (k Int#)
-
-* Bogus report of overlapped pattern for
-       f (R {field = [c]}) = 1
-       f (R {})              = 2
-  This shows up for TyCon.maybeTyConSingleCon
-
-*  > module Main( main ) where
-
-   > f :: String -> Int
-   > f "=<" = 0
-   > f "="  = 0
-   
-   > g :: [Char] -> Int
-   > g ['=','<'] = 0
-   > g ['=']     = 0
-   
-   > main = return ()
-   
-   For ``f'' the following is reported.
-   
-   tmp.lhs:4: 
-    Pattern match(es) are overlapped in the definition of function `f'
-            "=" = ...
-
-   There are no complaints for definition for ``g''.
-
-* Without -O I don't think we need change the module version
-  if the usages change; I forget why it changes even with -O
-
-* Record selectors for existential type; no good!  What to do?
-  Record update doesn't make sense either.
-
-  Need to be careful when figuring out strictness, and when generating
-  worker-wrapper split.
-
-  Also when deriving.
-
-* Consructor re-use via CSE
-
                Notes on module dependencies
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -77,40 +5,49 @@ The Name/Var/Type group is a bit complicated. Here's the deal
 Things in brackets are what the module *uses*.
 A 'loop' indicates a use from a module compiled later
 
-       Name, PrimRep, FieldLabel (loop Type.Type)
+       Name, PrimRep 
 then
-       Var (loop Const.Con, loop IdInfo.IdInfo, 
-            loop Type.GenType, loop Type.Kind)
+       PrelNames
+then
+       Var (Name, loop IdInfo.IdInfo, 
+            loop Type.Type, loop Type.Kind)
 then
        VarEnv, VarSet, ThinAir
 then
-       Class (loop TyCon.TyCon, loop Type.Type, loop InstEnv.InstEnv)
+       Class (loop TyCon.TyCon, loop Type.Type)
 then
-       TyCon (loop Type.Type, loop Type.Kind, loop DataCon.DataCon)
+       TyCon (loop Type.Type, loop Type.Kind, loop DataCon.DataCon, loop Generics.GenInfo)
 then
        Type (loop DataCon.DataCon, loop Subst.substTy)
 then
-       DataCon, TysPrim, Unify, PprType
+       FieldLabel( Type), TysPrim (Type), PprEnv (loop DataCon.DataCon, Type)
+then
+       Unify, PprType (PprEnv)
+then
+       Literal (TysPrim, PprType), DataCon (PprType)
 then
-       InstEnv (Unify)
+       TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId, loop Generics.mkGenInfo)
 then
-       IdInfo (loop CoreRules.CoreRules) 
-       TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId)
+       PrimOp (PprType, TysWiredIn)
 then
-       PrimOp (PprType, TysWiredIn, IdInfo.StrictnessInfo)
+       CoreSyn
 then
-       Const (PrimOp.PrimOp, TysWiredIn.stringTy)
+       IdInfo (CoreSyn.Unfolding, CoreSyn.CoreRules)
 then
-       Id (Const.Con(..)), CoreSyn
+       Id (lots from IdInfo)
 then
-       CoreUtils (loop PprCore.pprCoreExpr), CoreFVs
+       CoreFVs, PprCore
+then
+       CoreUtils (PprCore.pprCoreExpr, CoreFVs.exprFreeVars,
+                  CoreSyn.isEvaldUnfolding CoreSyn.maybeUnfoldingTemplate)
 then   
-       OccurAnal (ThinAir.noRepStrs -- an awkward dependency)
+       OccurAnal (CoreUtils.exprIsTrivial)
 then
-       CoreUnfold (loop OccurAnal.globalOccurAnalyse)
+       CoreUnfold (OccurAnal.occurAnalyseGlobalExpr)
 then
-       Rules (Unfolding), Subst (Unfolding, CoreFVs), CoreTidy (noUnfolding)
+       Rules (Unfolding), Subst (Unfolding, CoreFVs), CoreTidy (noUnfolding), Generics (mkTopUnfolding)
 then
        MkId (CoreUnfold.mkUnfolding, Subst)
-
+then
+       PrelInfo (MkId)