代码之家  ›  专栏  ›  技术社区  ›  Alex Baranosky

Haskell IO代码不进行类型检查

  •  3
  • Alex Baranosky  · 技术社区  · 14 年前

    提前谢谢。

    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 回复  |  直到 12 年前
        1
  •  9
  •   sepp2k    14 年前

    map parsePerson lines 具有类型 [Person] ,但由于您需要 loadPeople IO [Person] ,你得把它包起来 IO return :

    return $ map parsePerson lines
    
    推荐文章