
On Mon, 19 Mar 2007, Chris Kuklewicz wrote:
I used a "Types" module for most of the types in the all haskell regex-* backends I wrote. Doing anything else tended to lead to cycles, like Rob mentioned.
This seems to be a result of "module/import" being the one-true-and-unique-way to create a namespace combined with almost no support for recursive modules.
Thus data types that (indirectly) refer to each other must be in the same namespace. Thus one cannot even have a "all data types go in separate modules" policy.
As I write the above, I wonder: if a new variant of "module" that only defines data constructors and types could be created then could compilers support these if they have mutual recursive imports/references?
If I remember correctly, Oberon has one file per module and allows recursive modules. The identifiers to be exported are marked with a '*' on declaration. Interface files are automatically generated from these module files. (And Oberon programmers do not need to maintain export lists.)