Modules v. namespaces in F#
f#
Solution
If you're publishing F# components for consumption from other .Net languages, then you should avoid modules in the public interfaces, and stick to namespaces containing classes, structs, and enums.
(Modules are a handy way either to publish values, functions and types among F#-only components, or as 'internal' implementation details of an F# component that publishes .Net classes.)
(Do see also this question for a discussion of the 'technical distinction' between namespaces and modules. This question and my answer above are more about the 'intentional differences' e.g. when you would choose to use each.)
Problem
I've got a library written in F#, consumed by C# and F#. this library defines a class `foo`, in module `bar`, in namespace `random`: ``` #light namespace random module bar type foo() = ... ``` Now, when I go to consume type `random.foo.bar`, C# intellisense sees it as type `bar`, nested in type `random.foo`. The question is this: Is there an advantage to C# to define externally-consumable code into modules, rather than namespaces? I understand that modules are a good way to group functions, but what about classes?