2012-05-25 89 views
12

我知道這個聲音很簡單,但我沒有將兩個字符串合併成一個新字符串。如何在Haskell中連接兩個(IO)字符串?

的IO字符串 「a」 從GTK條目由

 a <- (entryGetText text_field) 

中提取的目標是結合它喜歡:

newstring = 「文字:」 +一

任何想法完成那個? 謝謝!

+2

'newstring < - fmap(「Text:」++)$ 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 \''作爲中綴運算符。所以它做的是從IO Monad'(entryGetText text_field)'中取出值,並將'(「Text:」++)'應用於它。 – lucidbrot

11

我相信在Haskell中,字符串連接運算符是++

+0

不!這是列表的連接。 – lindhe

+8

@Lindhea String類型只是'Char'的'List',所以'++'也可以在'String's上使用。例如,''具有「++」kell「'返回'」haskell「'。 –

+1

的確如此。我的錯。 – lindhe

3

您使用賦值操作符x <- exprexpr :: m a的非常時刻, m是一些單子,x不是m a而是a。在你的情況下,變量a的類型爲String,而不是IO String,所以你可以像在純代碼中那樣連接它,例如。 "hello world " ++ a