Код IOS на Haskell не проверяется - PullRequest
3 голосов
/ 09 ноября 2010

Я новичок в Haskell, и у меня возникают проблемы с определением кода. Что мне нужно сделать, чтобы получить правильные типы в этом разделе ввода-вывода моего кода?

Заранее спасибо.

loadPeople :: FilePath -> IO [Person]
loadPeople file = do
   lines <- getLines file
   map parsePerson lines

getLines :: FilePath -> IO [String]
getLines = liftM lines . readFile

parsePerson :: String -> Person
parsePerson line = ...........

map подчеркнуто красным в Лексе, и я получаю ошибку компиляции:

src\Main.hs:13:3:
    Couldn't match expected type `IO [Person]'
           against inferred type `[Person]'
    In the expression: map parsePerson lines
    In the expression:
        do { lines <- getLines file;
             map parsePerson lines }
    In the definition of `loadPeople':
        loadPeople file
                     = do { lines <- getLines file;
                            map parsePerson lines }

1 Ответ

9 голосов
/ 09 ноября 2010

map parsePerson lines имеет тип [Person], но так как вам нужен тип результата loadPeople, равный IO [Person], вам нужно обернуть его в IO, используя return:

return $ map parsePerson lines
...