Thanks for the answer. I have read the paper that You have mentioned and I think that there is something that You are missing.
I have used the Ciao prolog partially because I wanted to have a nice module system (and i didn't have money for Sicstus :). The other reason was excellent lpdoc system) but there is, in my opinion, something that could be done for the support of operators in the module system.
You state in Your work that "Syntax, flags, etc. should be local to modules" and as one of the reasons you say that "it should be possible to use different syntactic ( such as operator declarations or term expansions) in different modules without them interacting" and I can totally agree with the reason but the outcome is not so sure for me. I think It would be extremely useful (and much, much more elegant than include()'ing the operator declarations) to have a possibility to "export" operator declarations from the module the same way as you do it with predicates (ie by declaring certain operators as a part of module interface). It would be a clean and elegant solution allowing the programmer to have local operators that would not interefere with other modules and some "exported" ones that would be accessible for the users of the module. Actually you could introduce the common syntax for any directive (not only operators ) that should be "exported".
I have to admit that I'm looking at the problem from a user (programmer) perspective and I can understand that there are some reasons (ciao architecture, or particular decisions made while implementing it) that make this idea hard or even impossible to implement. Nevertheless I think it is worth discussion.