मैं एक प्रकार वर्ग Truthy
जो एक विधि true
एक Bool
मूल्य के प्रकार वर्ग का एक उदाहरण परिवर्तित होता है परिभाषित करने के लिए किया है।किसी अन्य प्रकार के वर्ग में सभी प्रकार के लिए एक उदाहरण कैसे लिखें?
मेरे प्रकार वर्ग घोषणा:
class Truthy a where
true :: a -> Bool
इसके बाद, मैं इस सूची और संख्यात्मक प्रकार सहित विभिन्न प्रकार के लिए इस वर्ग के उदाहरणों को परिभाषित करने के लिए है। मैं सूचियों और Int
s के लिए यह किया है, लेकिन वहाँ एक बार में सभी सांख्यिक प्रकार के लिए यह करने के लिए एक तरीका है?
मेरी इंट घोषणा के आधार पर:
instance Truthy Int where
true = (/=) 0
मैं प्रकार वर्ग बाधा जोड़ने की कोशिश की है, लेकिन यह काम नहीं करता है:
instance (Num a) => (Truthy a) where
true = (/=) 0::a
अगर वहाँ को यह समान करने के लिए एक रास्ता है कि मैं क्या ध्यान में था, या मुझे इसे प्रत्येक संख्यात्मक प्रकार के लिए अलग से परिभाषित करना चाहिए?
"या मैं सिर्फ अलग संख्यात्मक प्रकार के लिए यह परिभाषित करना चाहिए?" - एक शब्द में ** हाँ **। प्रकार वर्गों का डिज़ाइन लक्ष्य प्रति-प्रकार के आधार पर ओवरलोडिंग की अनुमति देना है। एक्सटेंशन के साथ "ओवररीचिंग" उदाहरण परिभाषित करना संभव हो सकता है लेकिन वे आम तौर पर एक डिज़ाइन दोष होते हैं। –
संभावित डुप्लिकेट [टाइप क्लास के सभी उदाहरणों को घोषित करें मूल वर्ग घोषणाओं को संशोधित किए बिना किसी अन्य टाइपक्लास में हैं] (http: // stackoverflow।कॉम/प्रश्न/8461029/घोषणा-सब-इंस्टेंस-ऑफ-ए-टाइपक्लास-इन-इन-टाइप-क्लास-बिना-संशोधित) –