2012-05-25 16 views
12

Sé que este sonido es muy simple, pero no pude combinar dos cadenas en una nueva.Cómo concatenar dos (IO) Cuerdas en Haskell?

El IO cadena "a" de una entrada GTK se fue a buscar por

 a <- (entryGetText text_field) 

El objetivo es combinar siente:

newString = "text:" + a

Todas las ideas para lograr eso? Gracias!

+2

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

Respuesta

20

cadena mediante la concatenación:

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

Más sencillamente:

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

Puede jugar también:

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

Para expandir en la última línea de código: '<$>' es equivalente a '\' fmap \ '' como operador infijo. Entonces, lo que hace es quitar el valor de IO Monad '(entryGetText text_field)' y aplica '(" Text: "++)' a él. – lucidbrot

11

Creo que en Haskell, el operador de concatenación de cadenas es ++.

+0

¡No! Eso es concatenación de listas. – lindhe

+8

@Lindhea El tipo 'String' es simplemente una' Lista' de 'Char's, por lo que' ++ 'también funcionará en' String's. Por ejemplo, '" tiene "++" kell "' returns '" haskell "'. –

+1

Eso es verdad. Mi error. – lindhe

3

En el mismo momento se utiliza el operador de asignación x <- expr con expr :: m a y m siendo alguna mónada, x no es un m a, sino más bien un a. En su caso, la variable a tiene el tipo String y no IO String, por lo que puede concatenarlo como lo haría en código puro, p. Ej. "hello world " ++ a.