Simon Peyton-Jones wrote:
Now when compiling Foo, GHC reads Prelude.hi, and sees that GHC.Map.map is brought into scope. Since that function is *used* in Foo, GHC also reads GHC.Map.hi to find GHC.Map.map's type, unfolding, arity, strictness etc etc. But it doesn't read GHC.Filter.
In the *presence* of orphan modules, perhaps somewhere in the transitive closure of modules imported by Prelude, GHC must read those interface files too. We store a list of all orphan modules transitively below Prelude inside Prelude.hi, precisely so GHC knows which ones to read.
Perhaps Prelude.hi could, instead of storing a *list* of orphan modules, store all the orphan instances themselves? Obviously that would waste a bit more space (less now that instances don't contain big function bodies in the HEAD; more because RULES can be orphan too, and numerous). Would it be any faster loading or is it just a bad idea? :-) -Isaac