one should be able to define two instances having the same signature, as long as they are in different namespaces [snip] But now, ghc complains about two instances of Foo Integer, although there should be none in the namespace main.
It's a Haskell problem, not a ghc one. Class instances are not constrained by module boundaries. Other people have found this to be a problem, e.g. in combination with tools like Strafunski - you just cannot encapsulate a class instance in a module. It's a design flaw in Haskell.
I have not found any documentation on why ghc behaves like this and whether this conforms to the haskell language specification. Is there any haskell compiler out there that is able to compile the above example?
I think Clean (a very similar language) permits to limit the scope of class instances. Stefan