2012-01-19 19 views
3

我跟在http://www.haskell.org/haskellwiki/Hitchhikers_guide_to_Haskell中的代码,并且代码(在第2章中)给出了一个错误。本教程中没有提及作者姓名/电子邮件,所以我来这里寻求建议。代码如下,错误发生在“eof”字上。haskelwiki教程中的parsec错误

module Main where 

import Text.ParserCombinators.Parsec 

parseInput = 
    do dirs <- many dirAndSize 
    eof 
    return dirs 

data Dir = Dir Int String deriving Show 

dirAndSize = 
    do size <- many1 digit 
    spaces 
    dir_name <- anyChar `manyTill` newline 
    return (Dir (read size) dir_name) 

main = do 
    input <- getContents 
    putStrLn ("Debug: got inputs: " ++ input) 

回答

4

该教程很早以前写过,当时parsec很简单。现在,由于parsec-3,库可以包装monad,因此现在必须指定(或以其他方式消除歧义)在某些点使用的类型。这是其中之一,给出eof例如表达式类型签名eof :: Parser()使其编译。

+0

谢谢。另外,从Main调用parseInput设置上下文。在上面的例子中,代码正在构建,Main代码来自以前的版本,并且不调用parseInput。当我修改下一节的主代码段时,它工作。 – R71