2012-05-25 16 views
12

मुझे यह ध्वनि बहुत सरल पता है, लेकिन मैं दो तारों को एक नए में जोड़ने में असफल रहा।हास्केल में दो (आईओ) स्ट्रिंग्स को कैसे सम्मिलित करें?

आईओ स्ट्रिंग "एक" एक जीटीके प्रविष्टि से द्वारा

 a <- (entryGetText text_field) 

दिलवाया है लक्ष्य है इसे पसंद गठबंधन करने के लिए:

newstring = "पाठ:" + एक

कोई भी विचार इसे पूरा करने के लिए? धन्यवाद!

+2

'newstring <- fmap (" टेक्स्ट: "++) $ entryGetText text_field' – applicative

उत्तर

20

का उपयोग स्ट्रिंग संयोजन:

do a <- entryGetText text_field 
    let b = "Text:" ++ a 
    return b 

अधिक बस:

do a <- entryGetText text_field 
    return $ "Text:" ++ a 

आप खेल भी खेल सकते हैं:

("Text:" ++) <$> (entryGetText text_field) 
+0

कोड की उस अंतिम पंक्ति पर विस्तार करने के लिए: '<$>' '' 'fmap \' 'के रूप में इंफिक्स ऑपरेटर के बराबर है। तो यह क्या करता है कि यह आईओ मोनाड '(एंट्रीगेटटेक्स्ट टेक्स्ट_फील्ड) 'से मूल्य लेता है और' ("टेक्स्ट:" ++)' पर लागू होता है। – lucidbrot

11

मेरा मानना ​​है कि हास्केल में, स्ट्रिंग कॉन्सटेनेशन ऑपरेटर ++ है।

+0

नहीं! यह सूचियों का समामेलन है। – lindhe

+8

@ लिंडिया 'स्ट्रिंग' प्रकार सिर्फ 'चर' की 'सूची' है, इसलिए '++' भी 'स्ट्रिंग' पर काम करेगा। उदाहरण के लिए, "" ++ "kell" 'return '" हैकसेल "है। –

+1

यह सच है। मेरी गलती। – lindhe

3

क्षण आप expr :: m a साथ असाइनमेंट ऑपरेटर x <- expr का उपयोग करें और m कुछ मोनड,होने के नातेm a नहीं बल्कि एक a है। आपके मामले में, परिवर्तनीय a में String टाइप किया गया है और IO String नहीं है, इसलिए आप इसे शुद्ध कोड में कर सकते हैं, जैसे आप इसे जोड़ सकते हैं। "hello world " ++ a

संबंधित मुद्दे