-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
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-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)
-then
- Var (loop Const.Con, loop IdInfo.IdInfo,
- loop Type.GenType, loop Type.Kind)
-then
- VarEnv, VarSet, ThinAir
-then
- Class (loop TyCon.TyCon, loop Type.Type, loop InstEnv.InstEnv)
-then
- TyCon (loop Type.Type, loop Type.Kind, loop DataCon.DataCon)
-then
- Type (loop DataCon.DataCon, loop Subst.substTy)
-then
- DataCon, TysPrim, Unify, PprType
-then
- InstEnv (Unify)
-then
- IdInfo (loop CoreRules.CoreRules)
- TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId)
-then
- PrimOp (PprType, TysWiredIn, IdInfo.StrictnessInfo)
-then
- Const (PrimOp.PrimOp, TysWiredIn.stringTy)
-then
- Id (Const.Con(..)), CoreSyn
-then
- CoreUtils (loop PprCore.pprCoreExpr), CoreFVs
-then
- OccurAnal (ThinAir.noRepStrs -- an awkward dependency)
-then
- CoreUnfold (loop OccurAnal.globalOccurAnalyse)
-then
- Rules (Unfolding), Subst (Unfolding, CoreFVs), CoreTidy (noUnfolding)
-then
- MkId (CoreUnfold.mkUnfolding, Subst)
+Module dependency information is now given in the GHC commentary
+ ghc/docs/comm/genesis/modules.html