`взаимодействовать`, используя текст вместо строки

Я хотел бы переписать 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 во всех ситуациях.

1 ответ

Решение
Другие вопросы по тегам