2012-01-19 3 views
3

Я следовал за кодом в http://www.haskell.org/haskellwiki/Hitchhikers_guide_to_Haskell, а код (в главе 2) дал ошибку. В учебнике нет имени автора/электронной почты, поэтому я прихожу сюда для консультаций. Код ниже, и ошибка возникает в слове «eof».ошибка parsec в учебнике haskelwiki

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-3, библиотека может обернуть монады, так что теперь вам нужно указать (или иным образом устранить неоднозначность) тип, который нужно использовать в некоторых точках. Это один из них, дающий eof, например. подпись типа выражения eof :: Parser() позволяет скомпилировать ее.

+0

Спасибо. Кроме того, вызов parseInput из Main устанавливает контекст. В приведенном выше примере код строился, а основной код был из предыдущей версии и не вызывал parseInput. Когда я пересмотрел основной сегмент кода из следующего раздела, он сработал. – R71

Смежные вопросы