हां यह है। यहां एक तरीका है:
पहला, प्रकार-समानता प्रकार।
data EQ :: * -> * -> * where
Refl :: EQ a a -- is an old traditional name for this constructor
deriving Typeable
ध्यान दें कि इसे स्वयं टाइप करने योग्य का उदाहरण बनाया जा सकता है। यही कुंजी है। अब मुझे इस तरह की जरूरत पड़ने पर मुझे अपने हाथों की आवश्यकता है।
refl :: a -> EQ a a
refl _ = Refl
और अब मैं चालू करने के लिए (REFL :: Eq एक क) (Eq एक ख) प्रकार के कुछ Data.Typeable के कलाकारों ऑपरेटर का उपयोग करके में की कोशिश कर सकते हैं। यह तब काम करेगा जब ए और बी बराबर हैं!
eq :: (Typeable a, Typeable b) => a -> b -> Maybe (EQ a b)
eq a _ = cast (refl a)
कड़ी मेहनत पहले ही हो चुकी है।
इस विषय पर अधिक विविधताएं डेटावॉट लाइब्रेरी, में पाई जा सकती हैं लेकिन डेटा। टाइप करने योग्य कास्ट ऑपरेटर आपको इस नौकरी के लिए आवश्यक है। यह निश्चित रूप से धोखाधड़ी है, लेकिन सुरक्षित रूप से धोखाधड़ी पैक किया गया है।
स्रोत
2010-10-31 00:05:27
यह साफ है! धन्यवाद। –
सुरक्षित रूप से तब तक पैक किया गया जब किसी ने किसी चीज़ पर गलत 'डेटा टाइप करने योग्य' उदाहरण नहीं बनाया। ('टाइप करने योग्य' प्राप्त करना हमेशा सुरक्षित है।) –
ध्यान दें कि इन दिनों 'eq'' data.Typeable' मॉड्यूल में उपलब्ध है ['eqT'] (https://hackage.haskell.org/package/base-4.9 .0.0/docs/डाटा-Typeable.html # v: eqt) –