2014-01-07 113 views
-1

我有一個函數來計算沒有時間每個單詞串重複:不能IO在哈斯克爾

keywords :: String -> [String] 
keywords = words . map (\x -> if isAlpha x then x else ' ') 

count :: Ord a => [a] -> [(a,Int)] 
count = map (head &&& length) . group . sort 

wordcount = count . keywords 

它完美的作品。

我想使用IO讀取一個文本文件作爲此函數的輸入。我做了這樣的編碼:

wordcou :: IO() 
wordcou = 
    do 
    putStr "Please text file name :" 
    textfile <- getLine 
    text <- readFile textfile 
    let result = wordcount text 
    putStr result 

IO函數給我一個錯誤。任何人都可以幫我解決這個錯誤嗎?

誤差

ERROR file:.\project.hs:194 - Type error in application 
*** Expression  : putStr result 
*** Term   : result 
*** Type   : [([Char],Int)] 
*** Does not match : [Char] 
+1

「..給我一個錯誤」。您可以*請*發佈*確切*錯誤信息,你會得到? –

+0

好的..我添加了錯誤.. – 2964349

+1

wordcount文本不返回一個字符串。所以putStr結果將不起作用。 wordcou的類型也是錯誤的,它返回IO()。 – kaan

回答

1

你的代碼有2個問題:

  • wordcou應該IO()型的,因爲它不返回任何東西
  • putStrprint因爲結果被替換不是String

這些更改後,您的代碼編譯並運行良好。

+0

謝謝@fjh。 – 2964349

0

wordcount添加類型聲明。

看看putStrprint的類型和定義。 你看到了區別嗎?