Haskell Language
भूमिका
खोज…
परिचय
TypeFamilies
भाषा एक्सटेंशन प्रोग्रामर को टाइप-स्तरीय फ़ंक्शन को परिभाषित करने की अनुमति देता है। गैर-जीएडीटी प्रकार के निर्माणकर्ताओं से प्रकार के कार्यों को क्या अलग करता है, यह है कि प्रकार कार्यों के पैरामीटर गैर-पैरामीट्रिक हो सकते हैं, जबकि प्रकार के निर्माणकर्ता के पैरामीटर हमेशा पैरामीट्रिक होते हैं। यह अंतर GeneralizedNewTypeDeriving
एक्सटेंशन की शुद्धता के लिए महत्वपूर्ण है। इस भेद को जानने के लिए हास्केल में भूमिकाएँ पेश की जाती हैं।
टिप्पणियों
SafeNewtypeDeriving
भी देखें।
नाममात्र की भूमिका
हास्केल विकी में एक प्रकार के फ़ंक्शन के गैर-पैरामीट्रिक पैरामीटर का एक उदाहरण है:
type family Inspect x
type instance Inspect Age = Int
type instance Inspect Int = Bool
यहां x
गैर-पैरामीट्रिक है क्योंकि एक प्रकार के तर्क के लिए Inspect
को लागू करने के परिणाम को निर्धारित करने के लिए, प्रकार फ़ंक्शन को x
का निरीक्षण करना चाहिए।
इस मामले में, x
की भूमिका नाममात्र है। हम साथ स्पष्ट रूप से भूमिका घोषणा कर सकते हैं RoleAnnotations
विस्तार:
type role Inspect nominal
प्रतिनिधि भूमिका
एक प्रकार के फ़ंक्शन के पैरामीट्रिक पैरामीटर का एक उदाहरण:
data List a = Nil | Cons a (List a)
type family DoNotInspect x
type instance DoNotInspect x = List x
यहां x
पैरामीट्रिक है क्योंकि DoNotInspect
को एक प्रकार के तर्क पर लागू करने के परिणाम को निर्धारित करने के लिए, प्रकार फ़ंक्शन को x
का निरीक्षण करने की आवश्यकता नहीं है।
इस मामले में, एक्स की भूमिका प्रतिनिधित्वात्मक है। हम साथ स्पष्ट रूप से भूमिका घोषणा कर सकते हैं RoleAnnotations
विस्तार:
type role DoNotInspect representational
प्रेत भूमिका
एक फैंटम टाइप पैरामीटर की एक फैंटम भूमिका होती है। प्रेत भूमिकाएँ स्पष्ट रूप से घोषित नहीं की जा सकतीं।