Haskell Language
सामान्यीकृत बीजगणितीय डेटा प्रकार
खोज…
मूल उपयोग
जब GADTs
एक्सटेंशन को सक्षम किया जाता है, तो नियमित डेटा घोषणाओं के अलावा, आप सामान्यकृत बीजीय GADTs
भी घोषित कर सकते हैं:
data DataType a where
Constr1 :: Int -> a -> Foo a -> DataType a
Constr2 :: Show a => a -> DataType a
Constr3 :: DataType Int
एक जीएडीटी घोषणा में सभी बिल्डरों के प्रकारों को सूचीबद्ध किया गया है जो एक डेटाटाइप में स्पष्ट रूप से है। नियमित डेटाटाइप घोषणाओं के विपरीत, एक कंस्ट्रक्टर का प्रकार किसी भी एन-एरी (नलरी सहित) फ़ंक्शन हो सकता है जो अंततः कुछ तर्कों पर लागू डेटाैटाइप में परिणाम करता है।
इस मामले में हम घोषित किया है कि प्रकार DataType
तीन कंस्ट्रक्टर्स है: Constr1
, Constr2
और Constr3
।
Constr1
कंस्ट्रक्टर एक नियमित डेटा घोषणा का उपयोग करते हुए घोषित किए गए से अलग नहीं है: data DataType a = Constr1 Int a (Foo a) | ...
Constr2
तथापि की आवश्यकता है कि a
का एक उदाहरण है Show
, और इसलिए जब निर्माता का उपयोग कर उदाहरण मौजूद हैं की आवश्यकता होगी। दूसरी ओर, जब उस पर पैटर्न मिलान, तथ्य यह है कि a
का एक उदाहरण है Show
दायरे में आता है, तो आप लिख सकते हैं:
foo :: DataType a -> String
foo val = case val of
Constr2 x -> show x
...
ध्यान दें कि Show a
अड़चन Show a
फ़ंक्शन के प्रकार में प्रकट नहीं होता है, और केवल ->
के दाईं ओर कोड में दिखाई देता है।
Constr3
में DataType Int
टाइप किया गया है, जिसका अर्थ है कि जब भी DataType a
प्रकार का मान Constr3
, तो यह ज्ञात होता है कि a ~ Int
। यह जानकारी, एक पैटर्न मैच के साथ भी पुनर्प्राप्त की जा सकती है।