2013-05-30 75 views
3

讀我想要從文件中Haskell和過程的每一行 讀什麼我現在哈斯克爾從文件

main = interact (unlines . (map calculate) . lines) 

有這個讓我從輸入的每一行,並將其發送給計算

現在我想從一個文件中的每一行,並將其發送給計算

這是我嘗試

main = do 
    text <- readFile "input.txt" 
    let linii = lines text 
    interact (unlines . (map calculate) . linii) 

請告訴我,它是如何正確的?

UPDATE下面

calculate :: String -> String 
calculate s= 
    case ret of 
     Left e -> "error: " ++(show e) 
     Right n -> "answer: " ++ (show n) 
    where 
     ret = parse parseInput "" s 

main :: IO() 
--main = interact (unlines . (map calculate) . lines) 
main = do text <- readFile "input.txt" 
      let linii = lines 
      putStrLn . unlines $ map calculate linii 
+0

你想要什麼,結果呢?將它寫入另一個文件?只輸出到控制檯? – kirelagin

+0

輸出到控制檯 –

+0

@kirelagin我假定打印到控制檯。至少,在寫入文件之前,確保一切工作到目前爲止,這是一個合理的下一步。 –

回答

7

記住interact需要從stdin輸入併發送輸出到stdout。由於您已經從文件中讀取輸入,因此您不需要前者。你只需要稍後再做。您可以用putStrln打印一個字符串。把這個一起,改變

interact (unlines . (map calculate) . linii) 

putStrLn . unlines $ map calculate linii 
+0

我改變了它,現在我得到解析錯誤輸入'let' –

+1

Haskell是特別關於縮進。確保'main = do'後面的所有行都縮進並排列在同一列上。在你的代碼中,你在let之前有一個額外的空間。 –

+0

我縮進正確,現在無法匹配預期的類型'[String]' 與實際類型'字符串 - > [字符串]' 我的函數calculate ::字符串 - >字符串 –