2012-08-13 54 views
1

我想重寫interact函數,但使用Text而不是String。是否可以使用Data.Text和/或Data.Text.Lazy來完成與interact相同的行爲?`交互式`使用文本而不是字符串

例如,當我運行使用String此程序:

main = interact (unlines . map f . lines) 
    where f "hello" = "wassup" 
     f _ = "wat?" 

它等待一個線路輸入的,然後打印出在響應一條線,並等待輸入的下一行。我想編寫相同的代碼並使其適用於Text

{-# LANGUAGE OverloadedStrings #-} 
import Data.Text.Lazy (Text) 
import qualified Data.Text.Lazy as T 

textInteract :: (Text -> Text) -> IO() 
textInteract = undefined 

main = textInteract (T.unlines . map f . T.lines) 
    where f "hello" = "wassup" 
     f _ = "wat?" 

但是,這個用例不僅僅是特例textInteract。我希望它在所有情況下的行爲與interact一樣。

回答

4
+1

*衛生署*。我應該仔細看看這些文檔。 :)通過用'T.interact'替換'textInteract'並添加'import qualified Data.Text.Lazy.IO as T',後面的代碼版本確實的行爲就像它的'String'對應。它仍然有待證明它*總是*表現得像它的'String'對應,但現在我很滿意。 – 2012-08-13 21:41:14

相關問題