2011-11-19 14 views
5

मेरे पास एक प्रश्न है: मैं स्ट्रिंग या चार के लिए शो विधि को ओवरराइड कैसे कर सकता हूं? धन्यवाद।हास्केल में स्ट्रिंग/चार के लिए शो विधि ओवरराइड करें

+1

क्या कोई कारण है कि आप 'Char -> स्ट्रिंग' या' स्ट्रिंग -> स्ट्रिंग 'प्रकार के कुछ अन्य कार्यों को परिभाषित नहीं करना चाहते हैं? आप 'शो' को ओवरराइड क्यों करना चाहते हैं? – hammar

+4

मुझे लगता है कि आपको इसे एक [नए प्रकार] (http://www.haskell.org/haskellwiki/Newtype) में लपेटना होगा और उस प्रकार के लिए शो को परिभाषित करना होगा। –

उत्तर

2

यदि आप ऐसा करना चाहते हैं, तो आप इसे गलत कर रहे हैं।

एक और तकनीकी कारण के लिए, पिछले प्रश्न पर my answer देखें।

आप वास्तव में का उपयोग कर किया जाना चाहिए या तो अपने स्वयं a -> String कार्यों (संभवतः अपने स्वयं के प्रकार श्रेणी के माध्यम से) या अधिक विस्तृत आउटपुट के लिए एक सुंदर-मुद्रण पुस्तकालय (जिनमें से कुछ पहले से ही एक इनबिल्ट Pretty वर्ग है) का उपयोग करें।

8

के बाद से लोगों को मेरी टिप्पणी को पसंद करने लगते हैं, यहाँ यह एक जवाब है:

आप मौजूदा प्रकार पर प्रकार कक्षाएं 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"] 
+0

आप शोलिस्ट को भी परिभाषित कर सकते हैं, फिर माईचर की सूचियों में कस्टम स्वरूपण भी होगा। वास्तव में, यही कारण है कि वर्णों की सूची ([चार]) अन्य सूचियों को दिखाने से अलग व्यवहार करती है ([ए])। – sdcvvc