एक नेमस्पेस एक .Net चीज है, जो कई औद्योगिक-ताकत वाली भाषाओं में आम है, बस फ्रेमवर्क को व्यवस्थित करने और विभिन्न पुस्तकालयों के बीच नामकरण संघर्ष से बचने का एक तरीका है। आप और मैं दोनों एक प्रकार "फू" को परिभाषित कर सकते हैं और एक परियोजना में दोनों का उपयोग कर सकते हैं, बशर्ते वे अलग-अलग नामस्थान (जैसे NS1.Foo और NS2.Foo) में हों। .Net में Namespaces के प्रकार होते हैं।
एक मॉड्यूल एक एफ # चीज है, यह मोटे तौर पर एक "स्थिर वर्ग" के अनुरूप है ... यह एक इकाई है जो लेट-बाउंड मान और फ़ंक्शंस को पकड़ सकती है, साथ ही प्रकार (ध्यान दें कि नाम स्थान में सीधे मान / फ़ंक्शन, नेमस्पेस नहीं हो सकते हैं) केवल प्रकार शामिल कर सकते हैं, जिसमें स्वयं मान और कार्य शामिल हो सकते हैं)। एक मॉड्यूल के अंदर की चीजों को "ModuleName.Thing" के माध्यम से संदर्भित किया जा सकता है, जो नामस्थान के लिए एक ही वाक्यविन्यास है, लेकिन अयोग्य पहुँच के लिए अनुमति देने के लिए F # में मॉड्यूल को भी 'खोला' जा सकता है, जैसे।
open ModuleName
...
Thing // rather than ModuleName.Thing
(EDIT: Namespaces को भी इसी तरह खोला जा सकता है, लेकिन यह तथ्य कि मॉड्यूल में मान हो सकते हैं और फ़ंक्शन एक मॉड्यूल को और अधिक 'दिलचस्प' बनाते हैं, इसमें आप मूल्यों और कार्यों को हवा दे सकते हैं, उदाहरण के लिए "cos", नाम जिनका आप उपयोग कर सकते हैं। सीधे, जबकि अन्य .Net भाषाओं में आपको आमतौर पर इसे योग्य बनाना होगा, जैसे "Math.cos")।
यदि आप F # में 'शीर्ष स्तर' पर कोड लिखते हैं, तो यह कोड एक मॉड्यूल में जाता है।
आशा है कि कुछ हद तक मदद करता है, यह एक बहुत खुला सवाल है। :)