Un espacio de nombre es una cosa .Net, común en muchos lenguajes de fortaleza industrial, solo una forma de organizar marcos y evitar conflictos de nombres entre bibliotecas diferentes. Tanto usted como yo podemos definir un tipo "Foo" y usar ambos en un proyecto, siempre que se encuentren en diferentes espacios de nombres (por ejemplo, NS1.Foo y NS2.Foo). Los espacios de nombre en .Net contienen tipos.
Un módulo es una cosa F #, es más o menos análogo a una "clase estática" ... es una entidad que puede contener valores y funciones, así como tipos (tenga en cuenta que los espacios de nombres no pueden contener valores directamente/funciones, los espacios de nombres solo pueden contener tipos, que a su vez pueden contener valores y funciones). Las cosas dentro de un módulo se pueden referenciar a través de "ModuleName.Thing", que es la misma sintaxis que para los espacios de nombres, pero los módulos en F # también se pueden 'abrir' para permitir el acceso no calificado, p.
open ModuleName
...
Thing // rather than ModuleName.Thing
(EDIT: Los espacios de nombres puede también de manera similar puede abrir, pero el hecho de que los módulos pueden contener valores y funciones hace que la apertura de un módulo más 'interesante', en la que se puede cerrar con los valores y funciones, por ejemplo, "cos ", siendo nombres que puede usar directamente, mientras que en otros lenguajes .Net generalmente siempre tiene que calificar, por ejemplo," Math.cos ").
Si escribe el código en 'el nivel superior' en F #, este código entra implícitamente en un módulo.
Espero que ayude un poco, es una pregunta bastante abierta. :)
Y una nota más, cuando abres un espacio de nombres en F #, como System, también tienes acceso a sus espacios de nombres secundarios. Entonces en C#, si abre el Sistema, aún necesita escribir "System.IO.File". En F #, puede escribir "IO.File". Encuentro que esto hace que el código sea mucho mejor. – MichaelGG