संपादित करें: यह उत्तर क्यों दिया जा रहा है, यह समझाने के लिए @interjay और @Antal Spector-Zabusky का धन्यवाद। उन्होंने लिखा
प्रलेखन थोड़ा भ्रामक है। मान GHC संकलक में हार्डकोड किए गए हैं। 48 वर्षों के बाद आप निश्चित रूप से जानते हैं कि वास्तविक कोड हमेशा दस्तावेज को रौंदता है। - interjay कल @ andy256 आप बिल्कुल सही कह रहे हैं कि दस्तावेज खराब है (वास्तव में, यही कारण है कि फ्रांसिस्को ने पहली बार में यह सवाल पूछा था), और आपका भ्रम समझ में आता है। हास्केल के बारे में बात यह है कि यदि उन स्ट्रिंग मान रनटाइम में भिन्न हो सकते हैं, तो यह एक गंभीर बग होगा - चर को बदलने की अनुमति नहीं है। यह IO प्रकार के निर्माता का महत्व है - यह एक गणना का प्रतिनिधित्व करता है जिसे "बाहरी दुनिया" तक पहुंचने की अनुमति है, और इसलिए जिसका परिणाम बदल सकता है। एक सिस्टम कॉल करना एक IO कार्रवाई का एक अच्छा उदाहरण है। … [१/२] - Antal Spector-Zabusky 9 घंटे पहले @ andy256… (एक और IO क्रिया "एक वैश्विक काउंटर को अपडेट करना" हो सकता है।) इसलिए जब हम एक स्ट्रिंग देखते हैं, तो हम जानते हैं कि यह किसी भी संचार के साथ नहीं कर सकता है। हुड के तहत ओएस। यही कारण है कि, शायद आश्चर्यजनक रूप से यदि आप हास्केल के लिए उपयोग नहीं किए जाते हैं, तो ओएस को लागू करना आसान नहीं होगा :: सिस्टम कॉल करने के लिए स्ट्रिंग - मूल हास्केल में ऐसा कोई भी मूल्य लागू नहीं है, हर प्रोग्रामर की अपेक्षाओं का उल्लंघन करेगा कि कैसे प्रोग्राम काम करते हैं, और संभावित रूप से कंपाइलर और ऑप्टिमाइज़र तक भी यात्रा करते हैं (सैद्धांतिक चिंता नहीं - वहाँ ढेर अतिप्रवाह उत्तर हैं जहां लोग एनालॉग समस्याओं में भागते हैं)। [२/२] - एंटाल स्पेक्टर-ज़बूसकी यही कारण है कि, शायद आश्चर्यजनक रूप से यदि आप हास्केल के लिए उपयोग नहीं किए जाते हैं, तो ओएस को लागू करना आसान नहीं होगा :: सिस्टम कॉल करने के लिए स्ट्रिंग - ऐसा कोई भी मूल्य बुनियादी हास्केल में लागू नहीं है, हर प्रोग्रामर की अपेक्षाओं का उल्लंघन करेगा कि कैसे प्रोग्राम काम करते हैं, और संभावित रूप से कंपाइलर और ऑप्टिमाइज़र तक भी यात्रा करते हैं (सैद्धांतिक चिंता नहीं - वहाँ ढेर अतिप्रवाह उत्तर हैं जहां लोग एनालॉग समस्याओं में भागते हैं)। [२/२] - एंटाल स्पेक्टर-ज़बूसकी यही कारण है कि, शायद आश्चर्यजनक रूप से यदि आप हास्केल के लिए उपयोग नहीं किए जाते हैं, तो ओएस को लागू करना आसान नहीं होगा :: सिस्टम कॉल करने के लिए स्ट्रिंग - मूल हास्केल में ऐसा कोई भी मूल्य लागू नहीं है, हर प्रोग्रामर की अपेक्षाओं का उल्लंघन करेगा कि कैसे प्रोग्राम काम करते हैं, और संभावित रूप से कंपाइलर और ऑप्टिमाइज़र तक भी यात्रा करते हैं (सैद्धांतिक चिंता नहीं - वहाँ ढेर अतिप्रवाह उत्तर हैं जहां लोग एनालॉग समस्याओं में भागते हैं)। [२/२] - एंटाल स्पेक्टर-ज़बूसकी और संभावित रूप से कंपाइलर और ऑप्टिमाइज़र पर भी यात्रा करें (एक सैद्धांतिक चिंता नहीं है - स्टैक ओवरफ्लो के उत्तर हैं जहां लोग एनालॉग समस्याओं में भाग लेते हैं)। [२/२] - एंटाल स्पेक्टर-ज़बूसकी और संभावित रूप से कंपाइलर और ऑप्टिमाइज़र पर भी यात्रा करें (एक सैद्धांतिक चिंता नहीं है - स्टैक ओवरफ्लो के उत्तर हैं जहां लोग एनालॉग समस्याओं में भाग लेते हैं)। [२/२] - एंटाल स्पेक्टर-ज़बूसकी
वर्तमान में इसके दो डिलीट वोट हैं। मैं उस प्रक्रिया को पूरा होने दूंगा, लेकिन यह सुझाव दूंगा कि वास्तव में इसका कुछ मूल्य है। एक साइड नोट पर, उनके स्पष्टीकरण से पता चलता है कि प्रश्न कमजोर था, और इसलिए उत्तर हैं, क्योंकि एक हास्केल नौसिखिया आसानी से उस तर्क का पालन कर सकता है जो मैंने किया था।
मूल उत्तर:
मैं हास्केल प्रोग्रामर नहीं हूं, लेकिन पहले से दिए गए दो जवाब ओपी से जुड़े दस्तावेज से मेल नहीं खाते हैं।
प्रलेखन की मेरी व्याख्या इस प्रकार है।
os :: String - यह आपको "ऑपरेटिंग सिस्टम जिस पर प्रोग्राम चल रहा है।"
मुझे उम्मीद है कि यह जानकारी प्राप्त करने के लिए एक सिस्टम कॉल जारी करेगा। क्योंकि जिस सिस्टम पर प्रोग्राम संकलित किया गया है, वह उस पर चलने वाले से भिन्न हो सकता है, यह कंपाइलर द्वारा डाला गया मान नहीं हो सकता है। यदि कोड की व्याख्या की जा रही है, तो दुभाषिया परिणाम प्रदान कर सकता है, जिसे सिस्टम कॉल के माध्यम से प्राप्त किया जाना चाहिए।
arch :: String - यह आपको "मशीन आर्किटेक्चर जिस पर प्रोग्राम चल रहा है।"
फिर से, मुझे उम्मीद है कि यह सूचना प्राप्त करने के लिए एक सिस्टम कॉल जारी करेगा। क्योंकि जिस सिस्टम पर प्रोग्राम संकलित किया गया है, वह उस पर चलने वाले से भिन्न हो सकता है, यह कंपाइलर द्वारा डाला गया मान नहीं हो सकता है।
compilerName :: String - यह आपको "हास्केल कार्यान्वयन देता है जिसके साथ कार्यक्रम संकलित किया गया था या व्याख्या की जा रही है।"
यह मान निश्चित रूप से संकलक / दुभाषिया द्वारा डाला जाता है।
compilerVersion :: String- यह आपको देता है "जिस संस्करण के compilerNameसाथ कार्यक्रम संकलित किया गया था या व्याख्या की जा रही थी।"
यह मान निश्चित रूप से संकलक / दुभाषिया द्वारा डाला जाता है।
जबकि आप इनपुट प्राप्त करने वाली पहली दो कॉल पर विचार कर सकते हैं, परिणाम ऑपरेटिंग सिस्टम द्वारा आयोजित मूल्यों से आता है। I / O आम तौर पर माध्यमिक भंडारण पहुंच को संदर्भित करता है।
IOमें वहां कुछ करना चाहता है , तोuname(3)हैकेज के आसपास एक रैपर उपलब्ध है: hackage.haskell.org/package/bindings-uname