टीएल; डीआर: यह एक गंदे बकवास प्रकार है जो चिंतित होने के लायक नहीं है।
इंटीजर अक्षर किसी भी प्रकार के मानों का प्रतिनिधित्व कर सकते हैं जो Num
टाइपक्लास लागू करता है। तो 1
या किसी भी अन्य पूर्णांक अक्षर का उपयोग कहीं भी आपको एक संख्या की आवश्यकता हो सकती है।
doubleVal :: Double
doubleVal = 1
intVal :: Int
intVal = 1
integerVal :: Integer
integerVal = 1
इससे हमें किसी भी संख्यात्मक संदर्भ में अभिन्न अंगों का उपयोग करने में सक्षम बनाता है।
जब आप किसी भी प्रकार के संदर्भ के बिना एक पूर्णांक शाब्दिक का उपयोग करते हैं, तो ghci नहीं जानता कि यह किस प्रकार है।
Prelude> :type 1
1 :: Num a => a
GHCi कह रहा है "कि '1' कुछ प्रकार मैं नहीं जानता कि की है, लेकिन मुझे पता है कि यह है जो भी प्रकार, उस प्रकार लागू करता Num
typeclass है"।
हास्केल स्रोत में एक पूर्णांक अक्षरक की प्रत्येक घटना को एक अंतर्निहित fromInteger
फ़ंक्शन के साथ लपेटा गया है। तो (1 "one")
को ((fromInteger (1::Integer)) "one")
में निहित रूपांतरित कर दिया गया है, और उप-संपीड़न (fromInteger (1::Integer))
में अभी तक अज्ञात प्रकार Num a => a
है, जिसका अर्थ है कि यह कुछ अज्ञात प्रकार है, लेकिन हम जानते हैं कि यह Num
टाइपक्लास का उदाहरण प्रदान करता है।
हम यह भी देख सकते हैं कि यह "one"
करने के लिए एक समारोह की तरह लागू किया जाता है, इसलिए हम जानते हैं कि अपने प्रकार प्रपत्र [Char] -> a0
जहां a0
अभी तक एक अज्ञात प्रकार है होना आवश्यक है। तो a
और [Char] -> a0
समान होना चाहिए। Num a => a
प्रकार में हमने उपरोक्त अनुमान लगाया है, हम जानते हैं कि 1
में Num ([Char] -> a0) => [Char] -> a0)
टाइप होना चाहिए, और अभिव्यक्ति (1 "one")
में Num ([Char] -> a0) => a0
है। कि पिछले प्रकार पढ़ें "के रूप में कुछ प्रकार a0 जो एक समारोह के लिए एक [Char]
तर्क लागू करने का परिणाम है नहीं है, और कहा कि समारोह प्रकार Num
वर्ग का एक उदाहरण है।
तो अभिव्यक्ति ही एक मान्य प्रकार Num ([Char] -> a0) => a0
है।
हास्केल को Monomorphism restriction कहा जाता है। इसका एक पहलू यह है कि अभिव्यक्तियों में सभी प्रकार के चर के पास एक विशिष्ट, ज्ञात प्रकार होना चाहिए, इससे पहले कि आप उनका मूल्यांकन कर सकें। जीएचसी कुछ स्थितियों में डिफॉल्ट नियमों का उपयोग करता है, जब यह समायोजित हो सकता है monomorphism प्रतिबंध। हालांकि, जीएचसी किसी भी प्रकार a0
के बारे में नहीं जानता है, यह उपरोक्त प्रकार अभिव्यक्ति में प्लग कर सकता है जिसमें Num
उदाहरण परिभाषित किया गया है। इसलिए मैं टी के साथ सौदा करने का कोई तरीका नहीं है, और आपको "नो इंस्टेंट फॉर न्यूम ..." संदेश देता है।
याद रखें कि स्थान फ़ंक्शन एप्लिकेशन ऑपरेटर है। – Bergi