--- /dev/null
+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
+
+ Name, PrimRep, FieldLabel (uses Type.Type)
+then
+ Var (uses Const.Con, IdInfo.IdInfo, Type.GenType, Type.Kind)
+then
+ VarEnv, VarSet
+then
+ Class (uses TyCon.TyCon, Type.Type, SpecEnv.SpecEnv)
+then
+ TyCon (uses Type.Type, Type.Kind, DataCon.DataCon)
+then
+ Type (uses [DataCon.DataCon])
+then
+ DataCon, TysPrim, Unify, SpecEnv, PprType
+then
+ IdInfo, TysWiredIn (uses DataCon.mkDataCon, [MkId.mkDataConId])
+then
+ PrimOp (uses PprType, TysWiredIn)
+then
+ Const (needs PrimOp, [TysWiredIn.stringTy])
+then
+ Id (needs Const.Con(..)), CoreSyn
+then
+ CoreUtils, OccurAnal
+then
+ CoreUnfold (uses OccurAnal)
+then
+ MkId (uses CoreUnfold)
+
+
+PrimOp uses TysWiredIn
+
+
+Add
+~~~
+basicTypes/DataCon.lhs
+basicTypes/DataCon.hi-boot
+
+Remove
+~~~~~~
+specialise/SpecUtils.lhs
+basicTypes/IdUtils.lhs