Un espace de noms est une chose .Net, commune dans de nombreux langages industriels, juste un moyen d'organiser les frameworks et d'éviter les conflits de noms entre différentes bibliothèques. Vous et moi pouvons définir un type "Foo" et les utiliser tous les deux dans un projet, à condition qu'ils se trouvent dans des espaces de noms différents (par exemple NS1.Foo et NS2.Foo). Les espaces de noms dans .Net contiennent des types. Un module est une chose F #, il est à peu près analogue à une "classe statique" ... c'est une entité qui peut contenir des valeurs et des fonctions de let let, ainsi que des types (notez que les namespaces ne peuvent pas contenir directement des valeurs/fonctions, les espaces de noms ne peuvent contenir que des types, qui eux-mêmes peuvent contenir des valeurs et des fonctions). Les choses à l'intérieur d'un module peuvent être référencées via "ModuleName.Thing", qui est la même syntaxe que pour les espaces de noms, mais les modules de F # peuvent également être "ouverts" pour permettre un accès non qualifié, par ex.
open ModuleName
...
Thing // rather than ModuleName.Thing
(EDIT: Les espaces de noms peut également être ouvert de même, mais le fait que les modules peuvent contenir des valeurs et des fonctions permet l'ouverture d'un module plus « intéressant » dans la mesure où vous pouvez liquider avec des valeurs et des fonctions, par exemple « cos ", étant des noms que vous pouvez utiliser directement, alors que dans d'autres langages .Net vous devriez toujours le qualifier, par exemple" Math.cos ").
Si vous tapez du code au 'niveau supérieur' dans F #, ce code est implicitement placé dans un module.
Espérons que cela aide un peu, c'est une question assez ouverte. :)
Et une note de plus, lorsque vous ouvrez un espace de noms en F #, comme System, vous avez également accès à ses sous-espaces de noms. Donc en C#, si vous ouvrez System, vous devez toujours écrire "System.IO.File". En F #, vous pouvez écrire "IO.File". Je trouve que cela rend le code beaucoup plus agréable. – MichaelGG