मेरे पास एक प्रश्न है: मैं स्ट्रिंग या चार के लिए शो विधि को ओवरराइड कैसे कर सकता हूं? धन्यवाद।हास्केल में स्ट्रिंग/चार के लिए शो विधि ओवरराइड करें
उत्तर
यदि आप ऐसा करना चाहते हैं, तो आप इसे गलत कर रहे हैं।
एक और तकनीकी कारण के लिए, पिछले प्रश्न पर my answer देखें।
आप वास्तव में का उपयोग कर किया जाना चाहिए या तो अपने स्वयं a -> String
कार्यों (संभवतः अपने स्वयं के प्रकार श्रेणी के माध्यम से) या अधिक विस्तृत आउटपुट के लिए एक सुंदर-मुद्रण पुस्तकालय (जिनमें से कुछ पहले से ही एक इनबिल्ट Pretty
वर्ग है) का उपयोग करें।
के बाद से लोगों को मेरी टिप्पणी को पसंद करने लगते हैं, यहाँ यह एक जवाब है:
आप मौजूदा प्रकार पर प्रकार कक्षाएं reimplement चाहते हैं, तो आप उन्हें एक newtype
-declared प्रकार में लपेट कर सकते हैं। यह आपको रनटाइम पर किसी भी वास्तविक ओवरहेड के बिना अपने स्वयं के कार्यान्वयन को परिभाषित करने की अनुमति देता है (क्योंकि newtype
मूल प्रकार के लिए isomorphic है, रनटाइम पर कोई वास्तविक मुक्केबाजी नहीं है)। MyChar
साथ
newtype MyChar = MyChar Char
instance Show MyChar where
show (MyChar c) = "head \"" ++ c : "\""
आप इस का उपयोग कर सकते हैं लपेटकर Char
द्वारा, इसलिए जैसे:
यह कुछ इस तरह लग सकता है
print $ fmap MyChar "test"
यह बाहर प्रिंट होगा
[head "t",head "e",head "s",head "t"]
आप शोलिस्ट को भी परिभाषित कर सकते हैं, फिर माईचर की सूचियों में कस्टम स्वरूपण भी होगा। वास्तव में, यही कारण है कि वर्णों की सूची ([चार]) अन्य सूचियों को दिखाने से अलग व्यवहार करती है ([ए])। – sdcvvc
क्या कोई कारण है कि आप 'Char -> स्ट्रिंग' या' स्ट्रिंग -> स्ट्रिंग 'प्रकार के कुछ अन्य कार्यों को परिभाषित नहीं करना चाहते हैं? आप 'शो' को ओवरराइड क्यों करना चाहते हैं? – hammar
मुझे लगता है कि आपको इसे एक [नए प्रकार] (http://www.haskell.org/haskellwiki/Newtype) में लपेटना होगा और उस प्रकार के लिए शो को परिभाषित करना होगा। –