निम्नलिखित फ़ंक्शन हस्ताक्षर को देखते हुए:

concatThings :: (Show a) => a -> String -> String
concatThings any str2 = str2 ++ (show any)

यदि concatThings "there" "hi" चलाते हैं, तो परिणाम होगा: "hi\"there\"", लेकिन मैं जो चाहता हूं वह सिर्फ "hithere" है।

मैं अभी भी इस फ़ंक्शन हस्ताक्षर के साथ "यहां" कैसे प्राप्त कर सकता हूं?

1
user618815 23 जुलाई 2011, 02:18
आप show str1 नहीं करना चाहते; str पहले से ही एक स्ट्रिंग है, तो बस str2 ++ str1 करें।
 – 
Tom Crockett
23 जुलाई 2011, 02:21
मुझे पता है, लेकिन मेरे पास कुछ अन्य मामले हैं जहां पहला तर्क स्ट्रिंग का प्रकार नहीं है
 – 
user618815
23 जुलाई 2011, 02:26

2 जवाब

सबसे बढ़िया उत्तर

आप स्ट्रिंग को एक नए प्रकार में लपेट सकते हैं और इसके लिए एक साधारण दिखाएँ उदाहरण प्रदान कर सकते हैं:

newtype PartialString = PartialString String

instance Show PartialString where
    show PartialString str = str

और फिर एक लिपटे स्ट्रिंग में concatThings फ़ंक्शन में पास करें:

let pstr1 = PartialString str1 in concatThings pstr1 str2
3
Kris Shannon 18 फरवरी 2015, 06:26

इस फ़ंक्शन हस्ताक्षर के साथ, आप नहीं कर सकते। आपको या तो show से छुटकारा पाना होगा, जिससे फंक्शन कम हो जाएगा

concatStrs :: String -> String -> String
concatStrs = flip (++)

या Show को बदलने के लिए एक नए प्रकार के वर्ग का परिचय दें।

4
Fred Foo 23 जुलाई 2011, 02:33