जीएचसी जादुई रूप से मनमानी डेटा प्रकारों के उदाहरणों को प्राप्त नहीं कर सकता है। हालांकि, यह इस तथ्य का उपयोग कर सकता है कि newtype
घोषणा GeneralizedNewtypeDeriving
एक्सटेंशन का उपयोग करने वाले लोगों के उदाहरणों को प्राप्त करने के लिए समान अंतर्निहित प्रकार के लिए एक नया नाम बनाती है। इसलिए, जब आप कुछ इस तरह कर सकता है:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
newtype Something = Something Integer deriving (MyClass, Show)
class MyClass a where
hello :: MyClass a => a -> a
instance MyClass Integer where
hello i = i + 1
main = print . hello $ Something 3
कारण GHC नया उदाहरण प्राप्त नहीं सकता है यह क्या उदाहरण होना चाहिए पता नहीं है कि। भले ही आपके डेटा प्रकार में केवल एक फ़ील्ड है, हो सकता है कि यह उस क्षेत्र के समान आवश्यक न हो। newtype
एस के लिए उदाहरण प्राप्त करने की क्षमता सुविधाजनक है, क्योंकि आमतौर पर कुछ प्रकार के वर्गों के लिए अलग-अलग व्यवहार प्रदान करने के लिए उपयोग किया जाता है या के प्रकार के रूप में टाइप सिस्टम का उपयोग उसी प्रकार की चीजों को अलग करने के लिए किया जाता है, जो आपके कोड में अलग-अलग उपयोग होते हैं।
आपको 'हैलो' के लिए प्रकार हस्ताक्षर के 'MyClass a =>' भाग की आवश्यकता नहीं है; यह इस तथ्य से निहित है कि 'ए' को 'क्लास माईक्लास' के वर्ग की घोषणा के माध्यम से दायरे में लाया गया है ...'। –
[GHC उपयोगकर्ता मार्गदर्शिका प्राप्त करने के बारे में मार्गदर्शिका] पर एक नज़र डालें [https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extensions-to-the-deriving-mechanism)। –