Ответ 1
Пространство имен - это .Net вещь, распространенная на многих языках промышленной прочности, просто способ организации фреймворков и избежание конфликтов имен между различными библиотеками. Мы с вами можем определить тип "Foo" и использовать их как в проекте, при условии, что они находятся в разных пространствах имен (например, NS1.Foo и NS2.Foo). Пространства имен в .Net содержат типы.
Модуль - это предмет F #, он примерно аналогичен "статическому классу"... это объект, который может хранить значения и функции, связанные с привязкой, а также типы (обратите внимание, что пространства имен не могут напрямую содержать значения/функции, пространства имен могут содержать только типы, которые сами могут содержать значения и функции). Вещи внутри модуля можно ссылаться через "ModuleName.Thing", который является тем же синтаксисом, что и для пространств имен, но модули в F # также могут быть "открыты", чтобы обеспечить неквалифицированный доступ, например.
open ModuleName
...
Thing // rather than ModuleName.Thing
(EDIT: Пространства имен также могут быть открыты, но тот факт, что модули могут содержать значения и функции, делает открытие модуля более "интересным", поскольку вы можете использовать значения и функции, например, "cos", будучи именами вы можете использовать напрямую, в то время как на других языках .Net, как правило, всегда необходимо их квалифицировать, например, "Math.cos" ).
Если вы вводите код на "верхнем уровне" в F #, этот код неявно входит в модуль.
Надеюсь, что это помогает, это довольно открытый вопрос.:)