पर आवृत्ति घोषणा से उदाहरण के लिए हास्केल प्रकार संदर्भ, मैंने बनाए गए डेटा प्रकार के लिए एक उदाहरण घोषणा करने में एक प्रकार का संदर्भ उपयोग किया।फ़ंक्शन
data Set a = Insert a (Set a) | EmptySet
instance (Show a) => Show (Set a) where
show x = "{" ++ show' x ++ "}" where
show' (Insert x EmptySet) = show x
show' (Insert x xs) = show x ++ ", " ++ show' xs
instance Eq a => Eq (Set a) where
(Insert x xs) == (Insert y ys) = (x == y) && (xs == ys)
तो अब, मैं कार्यों मुझे लगता है कि मेरी सेट प्रकार का उपयोग करें, तो तरह परिभाषित सभी के लिए समीकरण प्रकार प्रसंग जोड़ने के लिए है, या मैं एक प्रकार त्रुटि मिलती है:
memberSet::Eq a =>a->Set a->Bool
memberSet _ EmptySet = False
memberSet x (Insert y ys)
| x == y = True
| otherwise = memberSet x ys
subSet::Eq a=>Set a->Set a->Bool
subSet EmptySet _ = True
subSet (Insert a as) bs
| memberSet a bs = subSet as bs
| otherwise = False
त्रुटि मुझे लगता है:
No instance for (Eq a)
arising from a use of `=='
In the expression: (x == y)
In a stmt of a pattern guard for
an equation for `memberSet':
(x == y)
In an equation for `memberSet':
memberSet x (Insert y ys)
| (x == y) = True
| otherwise = memberSet x ys
Failed, modules loaded: none.
इसका क्या अर्थ है? मुझे यह त्रुटि क्यों मिलती है? मैंने सोचा कि एक बार जब मैंने घोषणा की घोषणा की, तो हास्केल स्वचालित रूप से यह सत्यापित करने में सक्षम होगा कि मेरे कार्यों में "==" की तुलना में चीजों की तुलना "सदस्यसेट" और "सबसेट" स्वचालित रूप से "ईक" के उदाहरणों के लिए की जाएगी। स्पष्टता के लिए
संपादित करें:
मेरे मुद्दा यह है कि मुझे समझ नहीं आता क्यों प्रकार संदर्भों "memberSet" और पर आवश्यक हैं कि "सबसेट।" अगर मैं उन्हें इस तरह हटा देता हूं, तो यह संकलित नहीं होता है।
memberSet::a->Set a->Bool
memberSet _ EmptySet = False
memberSet x (Insert y ys)
| x == y = True
| otherwise = memberSet x ys
subSet::Set a->Set a->Bool
subSet EmptySet _ = True
subSet (Insert a as) bs
| memberSet a bs = subSet as bs
| otherwise = False
वह कोड जो आप मेरे लिए टाइप चेक देते हैं।तुम क्या छोड़ रहे हो – bdonlan
मुझे किसी प्रकार की काफी सूक्ष्म त्रुटि का संदेह है जो दायरे या नाम शामिल है, क्योंकि दिया गया कोड ठीक लगता है। –
मेरा प्रश्न अस्पष्ट था। कोड संकलित है। मैं सोच रहा हूं कि यह "सदस्यसेट" और "सबसेट" पर प्रकार के संदर्भ के साथ संकलित क्यों नहीं करेगा, मैं संपादित करूंगा। –