2012-05-25 24 views
12

Wiem, że ten dźwięk jest bardzo prosty, ale nie udało mi się połączyć dwóch strun w nowy.Jak połączyć dwa ciągi (IO) w Haskell?

IO String "a" z wpisu gtk jest osiągane przez

 a <- (entryGetText text_field) 

Celem jest, aby połączyć to lubią:

newstring = "text" + a

Wszelkie pomysły osiągnąć to? Dzięki!

+2

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

Odpowiedz

20

Korzystanie konkatenacji ciąg:

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

Mówiąc prościej:

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

Możesz grać w gry za:

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

Aby rozwinąć ten ostatni wiersz kodu: '<$>' jest równoważne '\' fmap \ '' jako operatorowi infix. Więc to, co robi, polega na tym, że pobiera wartość z IO Monad '(entryGetText text_field)' i stosuje do niej '(" Text: "++)'. – lucidbrot

11

Wierzę, że w Haskell, operator konkatenacji ciąg jest ++.

+0

Nie! To jest konkatenacja list. – lindhe

+8

@Lindhea Typ 'String' jest po prostu' List' z 'Char's, więc' ++ 'będzie również działał na' String's. Na przykład '" ma "++" kell "' zwraca '" haskell "'. –

+1

To prawda. Mój błąd. – lindhe

3

tym samym momencie użyć operatora przypisania x <- expr z expr :: m a i m jest jakaś monada, x to nie jest m a, ale raczej a. W twoim przypadku zmienna a ma typ String, a nie IO String, więc możesz ją łączyć tak, jak robisz to w czystym kodzie, np. "hello world " ++ a.