Wolfgang Jeltsch wrote:
Another point is that filterA uses just a single letter for “arrow”. This concept quickly leads to ambiguities. For example, in mappend, the “m” stands for “monoid” while in msum, it stands for “monad”. Something like filterArrow would have the disadvantage that it is longer. With qualified imports, the user of the library can decide whether to use a single letter (A.filter) or something more descriptive (Arrow.filter).
I would not like this. Let me first say that I *do* understand your point. It is certainly ugly to use these funny adhoc namespacing techniques. But I think it's less ugly than the alternatives we have, because: Our module system - or at least our module import/export system - is not sufficiently expressive. I would definitely not like to have to use Monoid.append Arrow.filter Monad.filter Monad.map ...just on grounds of verbosity. Too many characters = ugly code. But the alternative - to use short module aliases - does not scale well. I need to add appropriately qualified import statements to every single module in my project. We can't reexport qualifications. ;-( I'm interested in suggestions on how we could make our namespace management better so that this problem is more manageable. Jules