`interact`使用Text而不是String

时间:2012-08-13 21:24:56

标签: haskell text lazy-io

我想重写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的行为相同。