
An instance Functor Maybe was missing, and I tried to add it to Prelude (where both Functor and Maybe are defined, to avoid orphan instance issues). It turns out, every time Prelude.hs is recompiled, its interface file is overwritten with one from bootstrap. What is the purpose of this? I'd assume the opposite: if Prelude got recompiled, the bootstrap interface has to be updated, so one getting a clean distribution would have prelude interface intact. Is this an error in SConscript? Or am I missing something?
For now, I just commented out three lines in SConscript responsible for the yhc-base package compilation. The new instance is now visible.
I haven't committed this to the central repo; I'd like to get some explanation of this first.
I also haven't submitted a patch that also had to implement instance Functor Maybe. We seem to have a very similar problem.
Apparently there are problems with orphan instances, and perhaps passing -prelude when compiling the file with the instance in it will work. If that doesn't work email the list, since its probably an nhc issue originally.
For clarity: I did a quick test. I think that orphan instances work when they involve non-prelude names. What I was told by someone else is that all names that appear in the prelude might not be exported unless -prelude, which is a different problem. I originally suggested that orphan instances didn't work because it didn't occur to me that prelude names would be given special treatment. --Lane