1 Notes on module dependencies
2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 The Name/Var/Type group is a bit complicated. Here's the deal
5 Things in brackets are what the module *uses*.
6 A 'loop' indicates a use from a module compiled later
8 Name, PrimRep, FieldLabel (loop Type.Type)
10 Var (loop Const.Con, loop IdInfo.IdInfo,
11 loop Type.GenType, loop Type.Kind)
13 VarEnv, VarSet, ThinAir
15 Class (loop TyCon.TyCon, loop Type.Type, loop InstEnv.InstEnv)
17 TyCon (loop Type.Type, loop Type.Kind, loop DataCon.DataCon)
19 Type (loop DataCon.DataCon, loop Subst.substTy)
21 TysPrim (Type), PprEnv (loop DataCon.DataCon, Type)
23 Unify, PprType (PprEnv)
25 Literal (TysPrim, PprType), DataCon
29 TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId)
31 PrimOp (PprType, TysWiredIn)
33 IdInfo (loop CoreSyn.CoreRules, loop CoreUnfold.Unfolding)
35 Const (PrimOp.PrimOp, TysWiredIn.stringTy)
37 Id (Const.Con(..)), CoreSyn
41 CoreUtils (PprCore.pprCoreExpr, CoreFVs.exprFreeVars)
43 OccurAnal (ThinAir.noRepStrs -- an awkward dependency)
45 CoreUnfold (loop OccurAnal.globalOccurAnalyse)
47 Rules (Unfolding), Subst (Unfolding, CoreFVs), CoreTidy (noUnfolding)
49 MkId (CoreUnfold.mkUnfolding, Subst)