2012-08-13 6 views
1

interact 함수를 다시 쓰고 싶지만 String 대신 Text을 사용하고 싶습니다. 과 동일한 동작을 수행하려면 Data.Text 및/또는 Data.Text.Lazy을 사용할 수 있습니까? 예를 들어문자열 대신 텍스트를 사용하여

, 나는 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

* DOH하는 것처럼

보인다. 나는 문서를 더주의 깊게 살펴야했다. :)'textInteract'를'T.interact'로 대체하고'Import qualified Data.Text.Lazy.IO'를 T로 추가함으로써, 코드의 후자의 버전은 실제로'String' 대응 물과 똑같이 동작합니다. 항상 * String *과 비슷하게 동작하지만, 지금은 만족 스럽습니다. –