2012-05-25 58 views
12

Tôi biết âm thanh này rất đơn giản, nhưng tôi không thể kết hợp hai chuỗi thành một chuỗi mới.Làm thế nào để concat hai (IO) Strings trong Haskell?

Các IO String "một" từ một mục gtk được lấy bởi

 a <- (entryGetText text_field) 

Mục đích là để kết hợp nó thích:

newstring = "Text:" + a

Bất kỳ ý tưởng để đạt được điều đó? Cảm ơn!

+2

'newstring <- fmap (" Văn bản: "++) $ entryGetText text_field' – applicative

Trả lời

20

Sử dụng chuỗi nối:

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

More đơn giản:

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

Bạn có thể chơi trò chơi quá:

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

Để mở rộng dòng mã cuối cùng: '<$>' tương đương với '\' fmap \ '' làm toán tử kết xuất. Vì vậy, điều này có nghĩa là nó lấy giá trị ra khỏi IO Monad '(entryGetText text_field)' và áp dụng '(" Text: "++)' cho nó. – lucidbrot

11

Tôi tin rằng trong Haskell, toán tử nối chuỗi là ++.

+0

Không! Đó là nối các danh sách. – lindhe

+8

@Lindhea Kiểu 'String' chỉ là một' List' của 'Char', vì vậy '++' cũng sẽ hoạt động trên 'String'. Ví dụ, '" có "++" kell "' trả về '" haskell "'. –

+1

Đó là sự thật. Lỗi của tôi. – lindhe

3

Khoảnh khắc rất bạn sử dụng toán tử gán x <- expr với expr :: m am là một số đơn nguyên, x không phải là m a mà là a. Trong trường hợp của bạn, biến số a có loại String và không phải IO String, vì vậy bạn có thể nối nó như bạn thực hiện trong mã thuần túy, ví dụ: "hello world " ++ a.

Các vấn đề liên quan