खोज…


परिचय

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

प्रेत भूमिका

एक फैंटम टाइप पैरामीटर की एक फैंटम भूमिका होती है। प्रेत भूमिकाएँ स्पष्ट रूप से घोषित नहीं की जा सकतीं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow