2014-01-07 3 views
-1

У меня есть функция для подсчета не раз каждое слово повторяется в строке:Не может IO в Haskell

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 

, который работает отлично.

Я хочу прочитать текстовый файл в качестве ввода этой функции с помощью ввода-вывода. Я сделал кодировку следующим образом:

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

Функция ввода-вывода дает мне ошибку. Может ли кто-нибудь помочь мне исправить эту ошибку, пожалуйста?

ошибка

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

«.. дает мне ошибку». Не могли бы вы * прокомментировать * сообщение * точное * сообщение об ошибке, которое вы получили? –

+0

ok .. я добавил ошибку .. – 2964349

+1

wordcount текст не возвращает строку. Таким образом, результат putStr не будет работать. Тип для wordcou также неверен, он возвращает IO(). – kaan

ответ

1

Ваш код имеет 2 проблемы:

  • wordcou должны быть типа IO(), так как он не возвращает что-нибудь
  • putStr должны быть заменены print, потому что результат не является String

После этих изменений ваш код компилируется и работает нормально.

+0

спасибо @fjh. – 2964349

0

Добавить объявление типа для wordcount.

Ознакомьтесь с типами и определениями putStr и print. Вы видите разницу?