2012-05-25 14 views
12

Bu sesi çok basit biliyorum, ancak iki dizeyi yeni haline getiremedim.Haskell'de iki (IO) Strings'e nasıl uyulur?

IO Dize "a" GTK giriş gol

 a <- (entryGetText text_field) 

tarafından edilir getirilirse gelen bu gibi birleştirmek için:

-dizge = "Metin:" + a

Herhangi bir fikir bunu başarmak için? Teşekkürler!

+2

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

cevap

20

kullanma dize birleştirme: basitçe

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

Daha:

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

Sen de oyun oynayabilir:

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

Son kod satırında genişletmek için: '<$>', infix işlecine göre '\' fmap \ 'işlevine eşdeğerdir. Öyleyse bu, IO Monad 'ın (entryGetText text_field)' inin değerini alması ve '(" Text: "++)' yi uygulayabilmesidir. – lucidbrot

11

Haskell'de dize birleştirme işleci ++ olduğuna inanıyorum.

+0

Hayır! Bu listelerin birleşimidir. – lindhe

+8

@Lindhea 'String' tipi sadece '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Örneğin, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' haskell '' ile döner –

+1

Bu doğru. Benim hatam. – lindhe

3

Eğer expr :: m a ile atama operatörü x <- expr kullanmak çok anı ve m, bazı monad, x, bir m a değil, bir a'dur. Sizin durumunuzda a değişkentipine ve IO String'a sahip değildir, bu nedenle bunu, örneğin, salt kodda yaptığınız gibi birleştirebilirsiniz. "hello world " ++ a.

İlgili konular