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