2012-05-25 7 views
12

Ich kenne diesen Sound sehr einfach, aber ich habe es versäumt, zwei Saiten zu einer neuen zu kombinieren.Wie man zwei (IO) Strings in Haskell concat?

Der IO-String "a" von einem gtk Eintrag von

 a <- (entryGetText text_field) 

Ziel es ist, verbinden möchten geholt wird:

newstring = "Text:" + a

Irgendwelche Ideen

um das zu erreichen? Danke!

+2

'newstring <- fmap (" Text: "++) $ entryGetText text_field' – applicative

Antwort

20

Mit String-Verkettung:

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

Einfacher ausgedrückt:

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

Sie können auch Spiele spielen:

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

Um auf die letzte Zeile des Codes zu erweitern: '<$>' ist äquivalent zu '\' fmap \ '' als Infix-Operator. Was das also bedeutet, ist, dass es den Wert aus dem IO Monad '(entryGetText text_field)' nimmt und '(" Text: "++)' darauf anwendet. – lucidbrot

11

Ich glaube, dass in Haskell der String Verkettung Operator ++ ist.

+0

Nein! Das ist eine Verkettung von Listen. – lindhe

+8

@Lindhea Der 'String'-Typ ist nur eine' Liste' von 'Char's, also wird' '' '' '' '' '' '' auch an 'String's funktionieren. Zum Beispiel hat "has" ++ "kell" '' 'haskell" 'zurück. –

+1

Das stimmt. Mein Fehler. – lindhe

3

In dem Moment, Sie den Zuweisungsoperator verwenden x <- expr mit expr :: m a und m ist etwas Monad, x ist kein m a, sondern ein a. In Ihrem Fall hat die Variable a den Typ String und nicht IO String, so dass Sie sie wie in reinem Code, z. "hello world " ++ a.