Модули v. Пространства имен в F #

У меня есть библиотека, написанная на F #, потребляемая С# и F #. эта библиотека определяет класс foo, в модуле bar, в пространстве имен random:

#light
namespace random

module bar

type foo() = ...

Теперь, когда я перехожу к типу random.foo.bar, С# intellisense видит его как тип bar, вложенный в тип random.foo.

Вопрос заключается в следующем: есть ли преимущество для С# определять код, потребляемый извне, в модули, а не пространства имен? Я понимаю, что модули - хороший способ группировать функции, но как насчет классов?

Ответ 1

Если вы публикуете компоненты F # для потребления с других языков .Net, вам следует избегать модулей в общедоступных интерфейсах и придерживаться пространств имен, содержащих классы, структуры и перечисления.

(Модули - это удобный способ опубликовать значения, функции и типы среди F # -онных компонентов или как "внутренние" детали реализации компонента F #, который публикует классы .NET.)

(см. также этот вопрос для обсуждения "технического различия" между пространствами имен и модулями. Этот вопрос и мой ответ выше относятся к "преднамеренным различиям" 'например, когда вы решите использовать их.)