हां।
Foo.showInt :: GHC.Types.Int -> GHC.Base.String
[... attributes omitted ...]
Foo.showInt = GHC.Show.$fShowInt_$cshow
आप देख सकते हैं, यह GHC.Show.$fShowInt_$cshow
करने के लिए बस एक सीधा संदर्भ: यह उत्पन्न कोर GHC 7.4.2 का उपयोग कर रहा है।
क्या होता है अगर हम प्रकार हस्ताक्षर हटाने के साथ तुलना करें ताकि अनुमानित प्रकार Show a => a -> String
बजाय प्रयोग किया जाता है:
Foo.showInt
:: forall a_aop. GHC.Show.Show a_aop => a_aop -> GHC.Base.String
[... attributes omitted ...]
Foo.showInt =
\ (@ a_aot) ($dShow_aou :: GHC.Show.Show a_aot) (x_a9Z :: a_aot) ->
GHC.Show.show @ a_aot $dShow_aou x_a9Z
यहाँ है, यह एक तर्क $dShow_aou
शब्दकोश लेता है और यह एक्सेसर समारोह GHC.Show.show
का उपयोग करता को देखने के लिए परिणामी फ़ंक्शन को x_a9Z
पर लागू करने से पहले इस शब्दकोश से उपयुक्त फ़ंक्शन।
कम से कम अवधारणा के पहले मामले में क्या होता है, यह है कि चूंकि ठोस प्रकार ज्ञात है, इसलिए जीएचसी उचित उदाहरण शब्दकोश के प्रत्यक्ष संदर्भ को तर्क के रूप में लेने के बजाय प्रत्यक्ष संदर्भ देता है। फिर, एक्सेसर, जो मूल रूप से केवल एक रिकॉर्ड लेबल है, को रेखांकित किया जा सकता है और उचित फ़ंक्शन के प्रत्यक्ष संदर्भ के साथ आप छोड़ दिए गए हैं।
यह अक्सर होता है, जैसा कि हथौड़ा द्वारा दिखाया गया है, और कभी-कभी नहीं। इसलिए, अधिक सामान्य सवाल यह है: "कौन सी परिस्थितियां जीएचसी को उपनगरीय संकेतों को दूर करने से रोकती हैं?" । मुझे विस्तार से जुड़े कुछ स्थितियों में पता है, लेकिन आईआईआरसी में हास्केल 98 में ऐसे मामले भी हैं, शायद पॉलिमॉर्फिक रिकर्सिव फ़ंक्शंस के साथ। –