`взаимодействовать`, используя текст вместо строки
Я хотел бы переписать 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 ответ
Решение
http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text-Lazy-IO.html
имеет interact
уже для вас:)
Похоже, что так http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text-IO.html