1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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
TysPrim (Type), PprEnv (loop DataCon.DataCon, Type)
then
Unify, PprType (PprEnv)
then
Literal (TysPrim, PprType), DataCon
then
InstEnv (Unify)
then
TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId)
then
PrimOp (PprType, TysWiredIn)
then
IdInfo (loop CoreSyn.CoreRules, loop CoreUnfold.Unfolding)
then
Const (PrimOp.PrimOp, TysWiredIn.stringTy)
then
Id (Const.Con(..)), CoreSyn
then
CoreFVs, PprCore
then
CoreUtils (PprCore.pprCoreExpr, CoreFVs.exprFreeVars)
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)
|