समवर्ती पुस्तकालय में जीएचसी.कॉन्क एक समारोह है जिसे numCapabilities
कहा जाता है। इसका प्रकार numCapabilities :: Int
है और यह वास्तव में कमांड लाइन ध्वज द्वारा पारित कुछ संख्या देता है (उदा। 5
यदि विकल्प +RTS -N 5
हैं)।numCapabilities एक शुद्ध फ़ंक्शन क्यों है?
हालांकि, getArgs
(प्रकार: IO [String]
) अनिवार्य रूप से वही है (यह अनपेक्षित गैर-रनटाइम तर्क देता है) लेकिन यह शुद्ध कार्य नहीं है।
यदि केवल एक ही बहाना है कि numCapabilities
अक्सर शुद्ध कोड में आवश्यक है, तो अन्य कमांड लाइन विकल्प नहीं शुद्ध कोड में आवश्यक नहीं है?
क्या मुझे कुछ याद आ रही है या numCapabilities
एक डिज़ाइन दोष है या क्या मुझे निम्नलिखित राक्षस लिखने की अनुमति है?
myGetArgs = unsafePerformIO getArgs
अब मैं इसके विपरीत सोच रहा हूं: चूंकि 'getArgs' का मान कभी भी आपके प्रोग्राम के दौरान नहीं बदलता है, इसलिए मुझे बिल्कुल यकीन नहीं है कि इसे' आईओ 'में क्यों होना चाहिए/होना चाहिए। – sepp2k
जैसा कि उत्तर में से एक में बताया गया है, यह इस बात पर निर्भर करता है कि कोई _pure_ अभिव्यक्ति को कैसे परिभाषित करता है। मैं _pure_ होने के लिए एक अभिव्यक्ति को परिभाषित करता हूं अगर यह अभिव्यक्ति के अलावा कुछ भी निर्भर नहीं करता है। इस परिभाषा के अनुसार 'numCapabilities' शुद्ध नहीं है, इसलिए एक प्रकार का 'Int' एक डिज़ाइन दोष के रूप में माना जाना चाहिए। आपको कोनल इलियट के ब्लॉग पोस्ट [हास्केल में शुद्धता के विचार] में रुचि हो सकती है (http://conal.net/blog/posts/notions-of-purity-in-haskell)। –
'numCapabilities' को '-N' को दिए गए मान को वापस नहीं करने की आवश्यकता है - यह केवल' getNumCapabilities 'कहता है, इसलिए उस समय कई क्षमताएं लौटाती हैं। मैं इसके बारे में एक बग के रूप में सोचता हूं, वास्तव में, लेकिन यह कहना मुश्किल है कि आप जीएचसी मॉड्यूल में क्या गारंटी दे सकते हैं। –