सामान्यीकृत बीजीय डेटा प्रकार

कार्यात्मक प्रोग्रामिंग में, एक सामान्यीकृत बीजगणितीय डेटा प्रकार (जीएडीटी, प्रथम श्रेणी फैंटम प्रकार, संरक्षित पुनरावर्ती डेटाटाइप, या समानता-योग्य प्रकार ) पैरामीट्रिक बीजगणितीय डेटा प्रकारों का एक सामान्यीकरण है।

सिंहावलोकन
जीएडीटी में, प्रोडक्ट कंस्ट्रक्टर (हास्केल में डेटा कंस्ट्रक्टर कहा जाता है) अपने रिटर्न वैल्यू (प्रतिफल मान) के प्रकार इंस्टेंशियेशन (दृष्टांतिकरण) के रूप में एडीटी का एक स्पष्ट इंस्टेंशियेशन प्रदान कर सकते हैं। यह कार्यों को अधिक उन्नत प्रकार के व्यवहार के साथ परिभाषित करने की अनुमति देता है। हास्केल 2010 के डेटा कंस्ट्रक्टर के लिए, रिटर्न वैल्यू में कंस्ट्रक्टर के एप्लिकेशन पर एडीटी पैरामीटर्स के इंस्टेंशियशन द्वारा निहित प्रकार इंस्टेंशियशन होता है।

वे वर्तमान में जीएचसी कंपाइलर में एक गैर-मानक एक्सटेंशन के रूप में कार्यान्वित किए जाते हैं, जिनका उपयोग अन्य लोगों के अलावा, पग्स और डार्क्स द्वारा किया जाता है। ओकैमल संस्करण 4.00 से मूल रूप से जीएडीटी का समर्थन करता है।

जीएचसी कार्यान्वयन अस्तित्वगत मात्रात्मक प्रकार के मापदंडों और स्थानीय बाधाओं के लिए समर्थन प्रदान करता है।

इतिहास
सामान्यीकृत बीजीय डेटा प्रकारों का प्रारंभिक संस्करण ऑगस्टसन और पीटरसन (1994) द्वारा वर्णित किया गया था और यह एएलएफ में पैटर्न मिलान पर आधारित था।

सामान्यीकृत बीजगणितीय डेटा प्रकार स्वतंत्र रूप से चेनी और हिंज (2003) द्वारा और उससे पहले शी, चेन और चेन (2003) द्वारा एमएल और हास्केल के बीजीय डेटा प्रकारों के विस्तार के रूप में पेश किए गए थे। दोनों मूलतः एक-दूसरे के समतुल्य हैं। वे सीओक्यू के कैलकुलस ऑफ इंडक्टिव कंस्ट्रक्शन और अन्य आश्रित रूप से टाइप की गई भाषाओं में पाए जाने वाले डेटा प्रकारों (या इंडक्टिव डेटाटाइप्स) के इंडक्टिव वर्गों के समान हैं, आश्रित प्रकारों को मॉड्यूल करते हैं और सिवाय इसके कि उत्तरार्द्ध में एक अतिरिक्त सकारात्मकता प्रतिबंध है जो जीएडीटी में लागू नहीं होता है।

सुल्ज़मैन, वाज़नी और स्टकी (2006) ने विस्तारित बीजीय डेटा प्रकार पेश किए जो जीएडीटी को अस्तित्वगत डेटा प्रकारों और प्रकार वर्ग बाधाओं के साथ संबद्ध करते हैं।

किसी भी प्रोग्रामर द्वारा प्रदत्त प्रकार के एनोटेशन के अभाव में प्रकार का अनुमान अनिर्णीत है और जीएडीटी पर परिभाषित फ़ंक्शन सामान्य रूप से प्रमुख प्रकारों को स्वीकार नहीं करते हैं। टाइप पुनर्निर्माण के लिए कई डिज़ाइन ट्रेड-ऑफ़ की आवश्यकता होती है और यह सक्रिय अनुसंधान का एक क्षेत्र है (पेयटन जोन्स, वॉशबर्न और वेइरिच 2004; पेयटन जोन्स एट अल। 2006)।

2021 के स्प्रिंग में, स्काला 3.0 जारी किया गया है। स्काला का यह प्रमुख अपडेट एडीटी के समान सिंटैक्स के साथ जीएडीटी लिखने की संभावना पेश करता है, जो मार्टिन ओडर्सकी के अनुसार अन्य प्रोग्रामिंग भाषाओं में नहीं है।

अनुप्रयोग
जीएडीटी के अनुप्रयोगों में सामान्य प्रोग्रामिंग, मॉडलिंग प्रोग्रामिंग भाषाएं (उच्च-क्रम अमूर्त वाक्यविन्यास), डेटा संरचनाओं में अपरिवर्तनीय (कंप्यूटर विज्ञान) को बनाए रखना, एम्बेडेड डोमेन-विशिष्ट भाषाओं में बाधाओं को व्यक्त करना और मॉडलिंग ऑब्जेक्ट शामिल हैं।

उच्च-क्रम अमूर्त वाक्यविन्यास
जीएडीटी का एक महत्वपूर्ण अनुप्रयोग उच्च-क्रम अमूर्त वाक्यविन्यास को एक प्रकार से सुरक्षित तरीके से एम्बेड करना है। यहां आधार प्रकार, ट्यूपल (कंप्यूटर विज्ञान) और एक निश्चित बिंदु कॉम्बिनेटर के मनमाने संग्रह के साथ सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का एक एम्बेडिंग है:

और एक प्रकार का सुरक्षित मूल्यांकन फ़ंक्शन: फैक्टोरियल फ़ंक्शन को अब इस प्रकार लिखा जा सकता है: हमें नियमित बीजगणितीय डेटा प्रकारों का उपयोग करने में समस्याओं का सामना करना पड़ता। प्रकार पैरामीटर को छोड़ने से उठाए गए आधार प्रकार अस्तित्वगत रूप से परिमाणित हो जाते, जिससे मूल्यांकनकर्ता को लिखना असंभव हो जाता। एक प्रकार के पैरामीटर के साथ हम अभी भी एक आधार प्रकार तक ही सीमित रहेंगे। इसके अलावा, ख़राब अभिव्यक्तियाँ जैसे  निर्माण करना संभव होता, जबकि वे GADT का उपयोग करके गलत टाइप किए गए हैं। एक सुगठित एनालॉग है. ऐसा इसलिए है क्योंकि का प्रकार  है , के प्रकार से अनुमान लगाया गया है   डेटा कंस्ट्रक्टर.

यह भी देखें

 * प्रकार चर

अग्रिम पठन

 * Applications
 * Semantics
 * Patricia Johann and Neil Ghani (2008). "Foundations for Structured Programming with GADTs".
 * Arie Middelkoop, Atze Dijkstra and S. Doaitse Swierstra (2011). "A lean specification for GADTs: system F with first-class equality proofs". Higher-Order and Symbolic Computation.
 * Type reconstruction
 * Other
 * Andrew Kennedy and Claudio V. Russo. "Generalized algebraic data types and object-oriented programming". In Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications. ACM Press, 2005.
 * Arie Middelkoop, Atze Dijkstra and S. Doaitse Swierstra (2011). "A lean specification for GADTs: system F with first-class equality proofs". Higher-Order and Symbolic Computation.
 * Type reconstruction
 * Other
 * Andrew Kennedy and Claudio V. Russo. "Generalized algebraic data types and object-oriented programming". In Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications. ACM Press, 2005.
 * Other
 * Andrew Kennedy and Claudio V. Russo. "Generalized algebraic data types and object-oriented programming". In Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications. ACM Press, 2005.
 * Other
 * Andrew Kennedy and Claudio V. Russo. "Generalized algebraic data types and object-oriented programming". In Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications. ACM Press, 2005.
 * Other
 * Andrew Kennedy and Claudio V. Russo. "Generalized algebraic data types and object-oriented programming". In Proceedings of the 20th annual ACM SIGPLAN conference on Object oriented programming, systems, languages, and applications. ACM Press, 2005.

बाहरी संबंध

 * Generalised Algebraic Datatype Page on the Haskell wiki
 * Generalised Algebraic Data Types in the GHC Users' Guide
 * Generalized Algebraic Data Types and Object-Oriented Programming
 * GADTs – Haskell Prime – Trac
 * Papers about type inference for GADTs, bibliography by Simon Peyton Jones
 * Type inference with constraints, bibliography by Simon Peyton Jones
 * Emulating GADTs in Java via the Yoneda lemma