		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)


