इस मॉडल में टाइप कक्षाएं कैसे फिट होती हैं?
संक्षिप्त उत्तर है: वे नहीं।
जब भी आप एक भाषा में coercions, प्रकार कक्षाएं, या तदर्थ बहुरूपता के लिए अन्य तंत्र परिचय, मुख्य डिजाइन मुद्दा आप का सामना करना पड़ता है जुटना ।
मूल रूप से, आपको यह सुनिश्चित करने की आवश्यकता है कि टाइपकास्ट रिज़ॉल्यूशन नियतात्मक है, ताकि एक अच्छी तरह से टाइप किए गए प्रोग्राम की एक ही व्याख्या हो। उदाहरण के लिए, यदि आप एक ही दायरे में एक ही प्रकार के लिए कई उदाहरण दे सकते हैं, तो आप संभावित रूप से इस तरह के अस्पष्ट कार्यक्रम लिख सकते हैं:
class Blah a where
blah : a -> String
instance Blah T where
blah _ = "Hello"
instance Blah T where
blah _ = "Goodbye"
v :: T = ...
main :: IO ()
main = print (blah v) -- does this print "Hello" or "Goodbye"?
उदाहरण के आधार पर कंपाइलर बनाता है, या blah v
तो बराबर कर सकता है । इसलिए, एक प्रोग्राम का अर्थ पूरी तरह से प्रोग्राम के सिंटैक्स द्वारा निर्धारित नहीं किया जाएगा, बल्कि कंपाइलर द्वारा किए गए मनमाने विकल्पों से प्रभावित हो सकता है।"Hello"
"Goodbye"
इस समस्या के लिए हास्केल के समाधान की आवश्यकता है कि प्रत्येक प्रकार के प्रत्येक टाइपेकेल के लिए सबसे अधिक एक उदाहरण है। यह सुनिश्चित करने के लिए, यह शीर्ष स्तर पर केवल उदाहरण घोषणाओं को अनुमति देता है, और इसके अलावा सभी घोषणाओं को विश्व स्तर पर दिखाई देता है। इस तरह, कंपाइलर हमेशा त्रुटि का संकेत दे सकता है यदि अस्पष्ट उदाहरण की घोषणा की जाती है।
हालाँकि, विश्व स्तर पर घोषणाएँ दिखाई देने से शब्दार्थ की संरचना टूट जाती है। आप पुनर्प्राप्त करने के लिए क्या कर सकते हैं , प्रोग्रामिंग भाषा के लिए एक विस्तृत शब्दार्थ प्रदान करना है - अर्थात, आप यह दिखा सकते हैं कि हास्केल कार्यक्रमों को बेहतर-व्यवहार वाली, अधिक रचनाशील भाषा में कैसे अनुवाद किया जाए।
यह वास्तव में आपको टाइपकास्टाइल संकलन करने का एक तरीका देता है, साथ ही - इसे आमतौर पर हास्केल हलकों में "साक्ष्य अनुवाद" या "डिक्शनरी-पासिंग ट्रांसफॉर्मेशन" कहा जाता है, और अधिकांश हास्केल संकलक के शुरुआती चरणों में से एक है।
टाइपकास्टेस भी एक अच्छा उदाहरण है कि कैसे प्रोग्रामिंग भाषा का डिज़ाइन शुद्ध प्रकार के सिद्धांत से अलग है। टंकण एक बहुत ही भयानक भाषा की विशेषता है, लेकिन वे प्रूफ-थ्योरिटिक दृष्टिकोण से काफी बीमार व्यवहार करते हैं। (यही कारण है कि अगाडा में टाइपकास्ट नहीं होता है, और क्यों कोक उन्हें इसके अनुमान संबंधी बुनियादी ढांचे का हिस्सा बनाता है।)