		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 
then
	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)
then
	TyCon (loop Type.Type, loop Type.Kind, loop DataCon.DataCon, loop Generics.GenInfo)
then
	Type (loop DataCon.DataCon, loop Subst.substTy)
then
	FieldLabel( Type), TysPrim (Type), PprEnv (loop DataCon.DataCon, Type)
then
	Unify, PprType (PprEnv)
then
	Literal (TysPrim, PprType), DataCon (loop PprType)
then
	TysWiredIn (DataCon.mkDataCon, loop MkId.mkDataConId, loop Generics.mkGenInfo)
then
	TcType( lots of TywWiredIn stuff)
then
	PprType( lots of TcType stuff )
then
	PrimOp (PprType, TysWiredIn)
then
	CoreSyn
then
	IdInfo (CoreSyn.Unfolding, CoreSyn.CoreRules)
then
	Id (lots from IdInfo)
then
	CoreFVs, PprCore
then
	CoreUtils (PprCore.pprCoreExpr, CoreFVs.exprFreeVars,
		   CoreSyn.isEvaldUnfolding CoreSyn.maybeUnfoldingTemplate)
then	
	OccurAnal (CoreUtils.exprIsTrivial)
then
	CoreUnfold (OccurAnal.occurAnalyseGlobalExpr)
then
	Rules (Unfolding), Subst (Unfolding, CoreFVs), CoreTidy (noUnfolding), Generics (mkTopUnfolding)
then
	MkId (CoreUnfold.mkUnfolding, Subst)
then
	PrelInfo (MkId)

