चूंकि newtype
एस संकलन के दौरान प्रभावी रूप से हटा दिए जाते हैं, उनके पास थंक्स नहीं होते हैं, केवल मूल्य होते हैं। तो अगर मैं rseq
का उपयोग कर अपने डब्ल्यूएचएनएफ के लिए पूछता हूं तो क्या होता है?एक नया प्रकार का डब्ल्यूएचएनएफ क्या है और आरएसईसी एक नए प्रकार पर कैसे काम करता है?
Sum (lengthyComputation :: Int) `using` rseq
में उदाहरण के लिए जहां Sum
lengthyComputation
या मूल्यांकन नहीं हो जाएगी
newtype Sum a = Sum { getSum :: a }
के रूप में परिभाषित किया गया है? क्या यह कहीं निर्दिष्ट/दस्तावेज है ताकि मैं उस पर भरोसा कर सकूं?
अद्यतन: मुझे और अधिक विस्तार से मेरी संदेह समझाता हूँ। सहजता से एक कहता है: "newtype
इतना सख्ती से स्पष्ट है कि डब्ल्यूएचएनएफ डब्ल्यूएचएनएफ है जो अंदर लपेटा गया है"। लेकिन मुझे लगता है कि यह एक बहुत ही कम शॉर्टकट है और तर्क इतना स्पष्ट नहीं है। मुझे एक उदाहरण दें:
मानक data
प्रकारों के लिए, डब्ल्यूएचएनएफ को एक रूप के रूप में परिभाषित किया जा सकता है जहां हम जानते हैं कि मूल्य बनाने के लिए किस कन्स्ट्रक्टर का उपयोग किया गया था। , उदाहरण के लिए, हम seq
नहीं था, हम बना सकते हैं हमारे अपने
seqMaybe :: Maybe a -> b -> b
seqMaybe Nothing = id
seqMaybe _ = id
और इसी तरह किसी भी data
प्रकार के लिए, बस इसके निर्माताओं में से एक पर मिलान पैटर्न से।
अब
newtype Identity a = Identity { runIdentity :: a }
लेने के लिए और एक समान seqIdentity
समारोह बना सकते हैं:
seqIdentity :: Identity a -> b -> b
seqIdentity (Identity _) = id
स्पष्ट रूप से, कुछ भी नहीं यहाँ WHNF करने के लिए मजबूर कर रहा है। (आखिरकार, हम हमेशा जानते हैं कि कन्स्ट्रक्टर का उपयोग किया गया था।) संकलन के बाद, seqIdentity
const id
के समान होगा। वास्तव में, पॉलीमोर्फिक seqIdentity
बनाना संभव नहीं है कि यह Identity
के अंदर लिपटे मान के मूल्यांकन को मजबूर करेगा! हम डब्ल्यूएचएनएफ को newtype
में से एक को केवल अनमोडिफाइड मानने के लिए परिभाषित कर सकते हैं, और यह लगातार होगा। तो मेरा मानना है कि सवाल यह है कि डब्ल्यूएचएनएफ ने newtype
एस के लिए कैसे परिभाषित किया है? या क्या कोई कठोर परिभाषा नहीं है, और व्यवहार "यह अंदर की चीज़ों का डब्ल्यूएचएनएफ" है जिसे बस कुछ स्पष्ट माना जाता है?
आपके उत्तर के लिए धन्यवाद। लेकिन मुझे लगता है कि "नया प्रकार" चरण सख्त है इसलिए डब्ल्यूएचएनएफ डब्ल्यूएचएनएफ है जो अंदर है "सटीक नहीं है। मैंने सवाल को संशोधित किया और विस्तार से अपने संदेह व्यक्त करने की कोशिश की। –
यह नहीं है कि 'न्यूटाइप सख्त हैं, यह है कि वे _unlifted_ हैं जो डब्ल्यूएचएनएफ प्रचारित करता है। –
विस्तृत उत्तर, क्या यह और अधिक स्पष्ट करता है? –