के बीच समय संकलित करें और रन टाइम अंतर type
घोषणा और newtype
घोषणा के बीच, पठन-संकलन-संचालित पाइपलाइन के विभिन्न चरणों में क्या अंतर है?टाइप और न्यूटाइप
मेरे धारणा यह है कि वे एक ही मशीन निर्देश के लिए नीचे संकलित था, और उदाहरण
type Name = String
newtype Name_ = N String
के लिए आप एक Name
कहीं भी एक String
की आवश्यकता है उपयोग कर सकते हैं जहां कि फर्क सिर्फ इतना था जब कार्यक्रम, typechecked है लेकिन यदि आप Name_
का उपयोग करते हैं तो टाइपशेकर आपको कॉल करेगा, जहां String
की अपेक्षा की जाती है, भले ही वे एक ही जानकारी को एन्कोड करते हों।
मैं सवाल पूछ रहा हूँ, क्योंकि अगर यह मामला है, मैं किसी भी कारण है कि निम्नलिखित घोषणाओं मान्य नहीं होना चाहिए नहीं दिख रहा है:
type List a = Either() (a, List a)
newtype List_ a = L (Either() (a, List_ a))
हालांकि, प्रकार चेकर दूसरे को स्वीकार करता है एक लेकिन पहले को अस्वीकार करता है। ऐसा क्यों है?
यह एक संकलन समस्या नहीं है, यह एक प्रकार की जांच समस्या है। हास्केल "इक्वि-रिकर्सिव प्रकार" के बजाय "आईएसओ-रिकर्सिव प्रकार" का उपयोग करता है, इसलिए यदि आप चाहते हैं कि आपका प्रकार रिकर्सिव हो, तो आपको वहां 'डेटा' या 'न्यूटाइप' होना चाहिए। प्रत्येक विकल्प के लिए विभिन्न व्यापार-बंद हैं। इन सिस्टमों और विकल्पों में शामिल विकल्पों के बारे में अधिक जानकारी के लिए पिएर्स द्वारा प्रकार और प्रोग्रामिंग भाषाएं देखें। – luqui
धन्यवाद, मुझे लगता है कि मुझे Google के लिए क्या पता है यह जानने के लिए "आईएसओ-रिकर्सिव" और "इक्वि-रिकर्सिव" नामों की आवश्यकता है! अगर आप इसे उत्तर में बदलना चाहते हैं तो मैं इसे स्वीकार करूंगा। –