2017-05-16 6 views

답변

0

그래서 interact는 IO가 표준 입력 및 표준 출력 을 사용하는 것입니다. 대신 당신이 입력 파일을 사용하려는표준 입력의, 괜찮 만약 당신이 이미하고있는 당신은 readFile 기능을 사용할 수 있습니다 :

applyOnFileLines :: FilePath -> (String -> String) -> IO() 
applyOnFileLines filePath func = do 
    file <- readFile filePath 
    putStr . unlines 
     . map func 
     . lines 
     $ file 
+0

뿐만 아니라 우리가 '이후 여기에'do' 표기법을 제거 할 수 있음 어쨌든 함수 합성을 주로 사용하고 있습니다 :'applyOnFileLines filePath f = putStr = << unlines. 지도 f. 행 <$> readFile filePath'. 또한'applyOnFileLines'가'filePath' 전에'f'라는 다른 순서로 인수를 취하는 것이 더 좋을 것이라고 생각합니다. 명확한 독서와 부분 적용을 향상시킵니다. – amalloy

+0

충분히 공정하게, 나는 그것이 OP를 위해 더 쉬울 것이라고 생각하는 것처럼 그것을 썼다. 그렇지 않으면 더 많은 점없는 스타일을 원한다면 다음과 같이하면됩니다 : onLinesToFile func = (putStr. unlines. map func. lines = <<). readFile' –

+0

감사합니다,하지만 정말로 하스켈에서는 좋지 않습니다. 파일을 보내면 함수를 포함하여 실행할 준비가되었습니다. 그리고 그것을 배치하고 다른 함수에서이 함수를 호출하는 방법입니다. –